1.构造器
构造器就是类创建对象的初始化方法。它的名字与类名相同。 假设没有写有构造器的情况下,虚拟机会自动加上一个没有参数的构造器,如果【学Java,到凯哥学堂kaige123.com】写有构造器,那么虚拟机就不会在加上构造器了。
public class Test1 { public Test1() { System.out.println("我是构造器!"); } }
2.构造器重载
构造器就是一个方法,所以它和普通的方法一样也可以做方法重载,换句话说就是构造器的重载。 和方法重载一样构造器重载就是多个一样名字参数类型和参数的个数不同的多个构造器。
public class Test1 { public Test1() { System.out.println("先脱去衣服"); } public Test1(String name) { } public Test1(int name) { } }
2.实例块 实例块就是一个划分的代码区域。{ 代码 } 1.它是在构造器之前执行。 2.它和属性初始化一同执行。 3.一个类中可以有很多个实例块。
- 执行过程是按照顺序从上到下执行。
public class Test3 { { System.out.println("我是实例块!"); } }
3.this this用3种用法: 1.表示当前的对象。 假设在一个方法中传入的参数名为a1,在实例中也有一个变量叫做a1.如果方法中的参数a1想赋值给类中的a1。则就需要到this关键字。因为java如果遇到同名的变量就会默认用和你最近的参数。
public class Test4 { String name; // 重名了 使用的规则是 就近原则 public Test4(String name) { this.name = name; } } 2.当前对象返回 public Test4 getTest4() { return this; }
3.构造器转发
注意:静态属性和静态方法参数重名怎么办? 这时就不能用this了。因为this是当前对象。 既然是静态成员那就直接类名点属性名就可以了。 例如:
static String address; static void method(String address) { Test4.address = address; }
4.静态块 static{} 是类加载的时候和静态属性一起执行的。也是按顺序从上往下执行。
5.类的加载 1.在声明静态属性但并没有使用属性时,不会对类进行加载。 使用静态属性时才会对类进行加载。 2.声明或使用常量时都不会对类进行加载。 因为常量的内存【学Java,到凯哥学堂kaige123.com】和类成员的内存不在同一内存内。 3.使用静态方法或new肯定会加载类。 4.//加载类 class.forName( 包名.类名 )
怪题:
main方法中,new Test1();,然而Test1类中又new Test1,因为new对象的时候肯定会加载类,然而加载类其实就是加载静态属性,所以这就成了死循环。报出方法嵌套调用溢出的错误。 java.lang.StackOverflowError