JAVA基础
Java  /  管理员 发布于 4年前   310
一、类的初始化顺序
1 (静态变量,静态代码块)-->(变量,初始化块)--> 构造器
同一括号里的,根据它们在程序中的顺序来决定。上面所述是同一类中。如果是继承的情况,那就在父类到子类交替初始化。
二、String
1 String a = "abc";
JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的对象,根据String类的equals(Object
obj)方法的返回值来判断。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。
2 String a = "ab" + "cd";
常量值在编译期就被确定。上面代码等同于:String a = "abcd";只创建了一个对象。
3 String a = new String("abc")
JAVA虚拟机在堆中创建一个String对象,它的值(value)是在栈(字符串池)中创建的对象("abc"),所以,创建了两个对象。
三、属性覆盖
1、private修饰的变量不能被覆盖。
2、属性的值取父类还是子类并不取决于我们创建对象的类型,而是取决于我们定义变量的类型。(这点后面代码说明)
3、default,protected和public修饰符并不影响属性的覆盖。
4、静态变量和静态常量属于类,不属于对象,因此它们不能被覆盖。
5、常量可以被覆盖。
6、对于基本类型和对象,它们使用同样的覆盖规律。
四、final,finally和finalize的区别
1、final
(1)修饰变量:变量只能被赋值一次,变量可以在初始化块和构造器中初始化,不可以在静态代码块中初始化。static final修饰的变量可以在静态代码块中初始化,不可以在初始化快和构造器中初始化。
(2)修饰方法:方法不能被子类覆盖,但不影响被子类继承。
(3)修饰类:不允许被继承,类中所有方法不能被重写,但并不代表类中的属性值不能被改变。
2、finally用在try/catch语句中,并且附带着一个语句块,表示这段代码最终总是被执行。如果try语句块中有return、continue和break,则finally语句块是在这三个语句之前被执行。
3、finalize是一个方法,属于java.lang.Object类。是GC(garbage
collector)运行机制的一部分,所有类都有这个方法。Object的任意子类都可以重写该方法,在其中释放系统资源或者做其他的清理工作,入关闭输入输出流。该方法在GC清理它所从属的对象是被调用,若果执行过程中抛出了无法捕获的异常(uncaught
exception),GC将终止对该对象的清理,并且该异常会被忽略,直到下一次GC清理这个对象时,finalize方法被再次调用。
System.gc()如同Runtime.getRuntime().gc(),只是建议GC启动,但是GC启动并不一定,这取决于JAVA虚拟机。直到虚拟机停止运行,可能有些对象的finalize方法没被运行过。只有通过调用System类的另一个方法:
runFinalizersOnExit(boolean value)才能保证对象的finalize方法在虚拟机停止运行前一定运行过。但该方法是不安全的,可能会造成finalize方法被误调用。
五、日期时间
1 DateFormat.parse(String source) String --> Date
2 DateFormat.format(Date date) Date --> String
六、switch
1 long,float,double,boolean,所有类型的对象(包括String类,排除byte,char,short,int四种基本类型对应的包装类)不能用于switch括号里表达式
七、位运算
1 移位运算符可用于byte,short,int,long,char,但不能用于float,double;
2 byte,short,char在移位前被自动转换为int,结果也为int。
1 << 35 = 1 << (35%32) = 1 << 3 = 8
100 >> 35 = 100 >> (35%32) = 100 >> 3 = 12
3 左移(<<)一位相当于 *2 ,有符号右移(>>) 相当于 /2 。
八、创建的方式
1 new
2 调用Class类的newInstance()方法,利用反射机制创建对象。
代码说明:
三、属性覆盖
2、
package test;
class ParentClass {
private String privateField = "Parent_private";
String frieddlyField = "Parent_friendly";
protected String protectedField = "Parent_protected";
public String publicField = "Parent_public";
public String getPrivateField() {
return this.privateField;
}
}
class SubClass extends ParentClass {
private String privateField = "Sub_private";
String frieddlyField = "Sub_friendly";
protected String protectedField = "Sub_protected";
public String publicField = "Sub_public";
public String getPrivateField() {
return this.privateField;
}
}
public class OverrideTest {
public static void main(String[] args) {
ParentClass subClass = new SubClass();
System.out.println(subClass.getPrivateField());
System.out.println(subClass.frieddlyField);
System.out.println(subClass.protectedField);
System.out.println(subClass.publicField);
}
}
运行结果:
Sub_private
Parent_friendly
Parent_protected
Parent_public
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号