所以我们这就出现了StringBuilder类或者StringBuffer类。 main(String[] args) { StringBuilder sb1 = new StringBuilder("hello"); StringBuilder sb2 world123 System.out.println(sb1); // hello world123 System.out.println(sb1 == sb2) 找到最后一个空格 // 2. 获取最后一个单词:从最后一个空格+1位置开始,一直截取到末尾 // 3. isValidChar(s.charAt(left))){ left++; } // 2.
(2)----类加载过程" Main 命令。 (2)----类加载过程"。 (Thread.currentThread() + ": InvokeOrder cinit invoke: v = " + v); } int vv = 2; { = classLoader2.loadClass(CustomClassLoader.TO_LOAD_CLASS_NAME); System.out.println("c1, c2 , c1 == c2: " + c1 + ", " + c2.toString() + ", " + (c1 == c2)); } catch (ClassNotFoundException
重写类方法 第一步:在类的外部写一个函数; 第二步:把这个新函数的名字赋值给类.原始函数 (注意:这里的赋值是在替换方法,并不是调用函数,所以【不要加上括号】—— 写成类.原始函数() = 新函数() 语法格式如下: 1 class 类(): 2 def 原始函数(self): 3 print('我是原始函数!') 15 a.原始函数() 2.初始化函数 初始化函数的写法是固定的格式:def __init__(self): 3.类的继承 如果新的类有许多代码都和旧类相同,又有一部分不同的时候,就可以用“继承”的方式避免重复写代码 格式:class new_ClassName(old_ClassName) 子类从【一个父类】继承类方法,称为‘单继承’; “多重继承”就是一个子类从【多个父类】中继承类方法。 格式是class 子类(父类1,父类2,……)。
类的6个默认成员函数 我们需要从下面这两个方面来学习默认成员函数: 1 我们不写时,编译器默认生成的函数行为是什么 2 编译器默认生成的函数不满足我们的需求,我们需要怎样更改 如果一个类中什么都没有,那么被称为空类 1 函数名与类名相同 2 无返回值(返回值什么都不需要给,也不需要void) 3 对象实例化时编译器自动调用对应的构造函数 4 构造函数可以重载(同一个类中,可以定义多个构造函数,只要它们的参数列表不同即可 特性 1 析构函数的函数名是在类名之前加上符号~ 2 无参数无返回值(不需要void) 3 一个类只能有一个析构函数,如果没有定义析构函数,则会生成默认的析构函数 4对象生命周期结束时,自动调用析构函数 5如果一个类显式实现了析构并释放资源,那么他需要写拷贝构造,否则就不需要 6 传值返回不会返回st,会返回st的拷贝 Stack func2() { Stack st; return st; 赋值运算重载的参数建议写成const当前类类型引用,否则会传值传参会有拷贝 d就是d2的别名,this就是d1 2 有返回值,且建议写成当前类类型引用,引用返回可以提高效率,有返回值目的是为了支持连续赋值场景
Thread类源码(2) ? _notified == 0) { if (millis <= 0) { // 2. 2. 阻塞线程 3. ); #else /* USDT2 */ HOTSPOT_THREAD_SLEEP_BEGIN( millis); #endif /* USDT2 2. 调用os::sleep方法使线程休眠。
封装的概念 访问限定符 Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。 如下: 包的概念 在Java中也引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一个包中的类不想被其他包中的类使用。 包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。 导入包中的类 Java 中已经提供了很多现成的类供我们使用. 如果需要使用 java.util 中的其他类, 可以使用 import java.util.* ,java.util包中的所有类它都可以代表。 2. java.lang.reflect:java 反射编程包; 3. java.net:进行网络编程开发包。 4. java.sql:进行数据库开发的支持包。
1、什么是类图 类图(Class diagram)主要用于描述系统的结构化设计。类图也是最常用的UML图,用类图可以显示出类、接口以及它们之间的静态结构和关系。 2、类图的元素 在类图中一共包含了以下几种模型元素,分别是:类(Class)、接口(Interface)、依赖(Dependency)关系、泛化(Generalization)关系、关联(Association 2.1 类(Class) 在面向对象(OO) 编程中,类是对现实世界中一组具有相同特征的物体的抽象。 ? 在UML中类图中,聚合关系用空心的菱形+实线箭头来表示,箭头指向为被聚合的类。 ? 2.6 组合(Aggregation)关系 组合关系是类之间一种整体与部分之间的关系,如一只青蛙有四条腿,青蛙类与青蛙腿类之间的关系就是组合关系。
经过前面的一篇博客,Java—类反射(1),相信大家对类反射有了一定的了解了。 下面来进行对类反射的加强,了解一下怎么通过类反射去new一个对象, 怎么通过类反射去访问其他类的方法。 ; import java.lang.reflect.Method; /** * 类反射的演示 * @author 陈浩翔 * * @version 1.0 2016-5-2 */ public ; import java.lang.reflect.Method; /** * 类反射的演示 * @author 陈浩翔 * * @version 1.0 2016-5-2 */ public new出对象 obj = (Object) cls.newInstance(); //2 再用类反射对新new的对象设置属性值(必须遵守Java设置规范)--即通过setter new出对象 t = cls.newInstance(); //2 再用类反射对新new的对象设置属性值(必须遵守Java设置规范)--即通过setter方法设置
本文继续讨论 this 指向 问题,今天讨论: 类中的this 0 1 类上下文 this 在 类 中的表现与在函数中类似,因为类本质上也是函数,但也有一些区别和注意事项。 如下图: 0 2 派生类 派生类中写构造函数必须在super,否则报错, 如下 class Father{ constructor() { this.age this.sex = '男'; super() } 正确代码如下: constructor() { super() this.sex = '男'; } 0 2 因为子类没有自己的 this 对象,而是继承父类的 this 对象,然后对其进行加工,而 super 就代表了父类的构造函数。 调用了Fahter 的constructor 2. 生成this ,绑定Father中的属性(相当于new Father) 3. 返回Son的实例(即this)
包是对类、接口等的封装机制的体现,是一种对类或者接口等很好的组织方式。 double y = 40; // 静态导入的方式写起来更方便一些 // double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); double result = sqrt(pow(x, 2) + pow(y, 2)); System.out.println(result 类变量存储在方法区当中 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁) public class Student{ public String name; public = " + x); } } // 执行结果 x1 = 10 x2 = 100 8.3 构造代码块 构造代码块也叫实例代码块 。
java零基础入门-高级特性篇(十五) 类加载与反射 2 继续上一章的内容,当我们获取到了类的Class对象,下面就可以用Class对象来干大事了。 反射 反射是什么? java中的反射也有类似的特性,当一个java类加载到jvm后,生成了Class对象,这时候Class对象就像镜子一样,当我们在java应用程序中需要获取到已加载的java类的信息时,通过反射这个功能, 反射获取信息 反射包提供了很多的类型来获取类的信息,上例中使用了最常用的几种类型,分别是Constructor构造器类型,Method方法类型,Field成员变量类型,除了这几种常用类型,还有各种方法用于判断枚举类 ,注解类,接口等等,同学们可以自行查阅API。 调用方法 反射调用方法的流程也与上面差不多,首先是获取Class对象,有了Class对象再创建实例对象,然后获取类的方法,最后用反射获取的方法类调用方法。
2. 拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错, 因为会引发无穷递归调用。 此处会调用Date类的拷贝构造函数 // 但Date类并没有显式定义拷贝构造函数,则编译器会给Date类生成一个默认的拷贝构 造函数 Date d2(d1); return 0; } 如图,由于 2.修改其中一个对象时将会影响另一个对象 **注意:类中如果没有涉及资源申请时,拷贝构造函数是否写都可以;一旦涉及到资源申请时,则拷贝构造函数是一定要写的,否则就是浅拷贝。 拷贝构造函数典型调用场景: 1.使用已存在对象创建新对象 2.函数参数类型为类类型对象 3.函数返回值类型为类类型对象 此图对应下方代码: class Date { public: Date 当然像日期类这样的类是没必要的。那么下面的类呢?
文章目录 tensorflow2线性模型 步骤 源代码 tensorflow2线性模型 步骤 使用 tf.keras.datasets 获得数据集并预处理 使用 tf.keras.Model 和 tf.keras.layers
sql注入类 sql注入配合万能密钥进后台 在内网中扫描到网络运维资料管理系统,在登录账号位置加上单引号后报错,于是判断可能存在sql注入, 试着闭合后边sql语句,而使用注释则会失败(access数据库无注释符 如:下列搜索框中输入单引号报错, 查版本, 2%' and 1=(select @@version) and '%'=' 1' and 1=(select @@version) -- 查当前数据库, 2% (select db_name()) -- 查表名, 1%' and 1=(select top 1 name from sysobjects where xtype='U' ) and '%'=' 2' U' ) -- 然后利用闭合配合注释去进行搜索框注入, 还要注意前端长度限制,如果注入语句无法输入,可以修改前端maxlength元素, 也可以保存请求包配合sqlmap的-r参数进行注入, 文件上传类
《深入理解Java虚拟机》一书中将类的加载过程放到了类加载器前面一节,但在这里我想先讲“类加载器”。在上一篇类加载时机中我们用大量篇幅来讲解了类加载过程中的5个步骤的最后一步——初始化。 这是因为,对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在Java虚拟机的唯一性,每一个类加载器,都拥有一个独的类名称空间。 1 package day_14_classloader; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 但事实恰好相反:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中 1 /** 2 * 3 * 此方法和书中的方法略有不同,书中方法为protected synchronized Class<?
public final class String2 {//删除了非关键信息 private final char value[]; public String2() { 每一个类中都有一个默认的构造器(构造方法)。 这个类编译了之后,会通过Java编译器,生成一个String2.class文件。 (字节码文件) 当创建这个类实例,会通过String2.class文件,使用字节码解释器,生成机器码文件,系统就可以运行。 方法(重点) 方法比较重要,特地拿出来细谈。 int a = Math.max(4,8);//返回最大的数,显示参数 2.一个方法只需要访问类的静态域 double pi = Math.PI; 工厂方法(静态工厂) 这个留到设计模式再说,其实就是工厂流水线的形式 package com.yingqi; public class Demo { public void Quote(StringBuilder str2) { str2.append(" word
org.jsoup.select.Elements; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** @Description: 文件相关工具类 org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 文件操作工具类 private String pcHtmlContentType; private String pcHtmlFileName; /** * 上传文件大小验证 默认为2M if(this.pcImg.length()>Constants.MAXSIZE){ this.addFieldError("pcImg", "电脑端图片不能超过2M if(this.appHtml.length()>Constants.MAXSIZE){ this.addFieldError("appHtml", "手机端网页不能超过2M
Action类的实现方式 1.1. Action类的实现方式 1.2. 普通的pojo类 1.3. 继承ActionSupport 1.4. 实现Action类 Action类的实现方式 Action类的实现方式 如果想要浏览器可以映射到其中的方法,那么必须返回一个String,使用这个值指示需要跳转的视图或者Action Struts中的 Action类实际上可以是一个POJO类,其中也是可以定义许多的方法,但是如果在struts.xml的配置文件中特指调用哪个方法的话,那么就会默认会调用名为execute的方法。 后续将会讲如何调用类中其他的方法 普通的pojo类 不需要实现或者继承任何类,只是一个普通的类 这个普通的类中有一个名为execute的方法,返回的一个字符串 public class SimpleAction -- 配置跳转到添加学生页面的action --> <action name="simpleAction" class="com.jsnu.struts<em>2</em>.controller.SimpleAction
javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; import org.apache.struts2. org.slf4j.LoggerFactory; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** * Struts2工具类 * * @author 杨尚川 */ public class Struts2Utils { public static final Logger log = LoggerFactory.getLogger (Struts2Utils.class); private Struts2Utils() { }; private static final String ENCODING_PREFIX = "encoding
* Set s2 = m2.keySet(); // Needn't be in synchronized block * ... * synchronized (m) { // Synchronizing on m, not m2 or s2! * NavigableMap m = Collections.synchronizedNavigableMap(new TreeMap()); * NavigableMap m2 * Set s2 = m2.keySet(); // Needn't be in synchronized block * ... * synchronized (m) { // Synchronizing on m, not m2 or s2!