一
原因:如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法
二
Java字段初始化的规律: 当在java中一个类中既有初始化块,又有构造方法同时还设定了字段的初始值,那么最后输出的数值应该判断呢,当通过new来构造新的对象是。其数值是在原来的类里面构造函数赋值给他的,与初始化块和字段的初始值无关。如果在构造函数里面没有为其相应的变量赋值。那么该变量的数值大小取决于初始化块和设定的字段的初始值谁先谁后的问题了。都是谁在后面最后的值就赋值给变量。而实际上不要这样写代码,应该尽量保证一个字段只初始化一次。
三
静态初始化块的执行顺序: (1)静态初始化块只执行一次。
(2)创建子类型的对象时,也会导致父类型的静态初始化块的执行。
四
1 package cn.demo8; 2 3 4 public class Testtttt{ 5 int a = 2;//实例变量 6 static int b = 3;//类的静态变量 7 public static void variable()//静态方法 8 { 9 System.out.println("实例变量a = " + new Testtttt().a); 10 //在静态方法中访问类的实例变量需首先进行类的实例化 11 12 System.out.println("静态变量b = " + b); 13 //在静态方法中可直接访问类的静态变量 14 } 15 public static void main(String[] args) 16 { 17 Testtttt.variable(); 18 Testtttt test = new Testtttt(); 19 System.out.println("结果是 :实例变量 = " + test.a);//访问实例成员 20 } 21 }
五
package cn.demo8;
public class Testtttt
{
public static void main(String[] args)
{
Integer i1=100;
Integer j1=100;
System.out.println(i1==j1);
Integer i2=129;
Integer j2=129;
System.out.println(i2==j2);
}
}
nteger=100; 实际上调用的是Integer.valueOf(int i);
因为从-127到128之间的Integer数,Java在Integer中有事先缓存好的原型对象,每次返回的都是同一个Integer对象,只有不在这个范围的数才会新创建出一个Integer,最后所指都不是同一个对象,所以比较的不是同一个对象。