语句块:用{}括起来的部分。
语句块前面用static关键字修饰的叫静态块。
只要JVM加载一个类,那么就初始化静态成员,一个项目启动时需要做的事儿会放在静态块中。
对象的初始化过程:先初始化父类的静态成员,再初始化子类的静态成员,然后是父类的非静态块,接着是父类的构造方法,然后是子类的非静态块,最后调用子类的构造方法。
package com.bluedot.block;
public class Child extends Parent {
public Child(){
System.out.println("Child构造方法");
}
{
System.out.println("Child初始化块");
}
static {
System.out.println("Child静态块");
}
}
package com.bluedot.block;
public class Parent {
public Parent(){
System.out.println("Parent构造方法");
}
{
System.out.println("Parent初始化块");
}
static {
System.out.println("Parent静态块");
}
}
package com.bluedot.block;
public class Test {
public static void main(String[] args){
Child child = new Child();
}
}
内部类:在类内部定义的类,或者在方法中定义的类。
好处:可以直接访问包装类的成员。如果有一个类只需要包装类来访问而有需要其它类访问,那么就把这个类定义成内部类。
内部类生成的.class文件名是“包装类名$内部类名.class”
匿名内部类:主要用到一个类只想使用一次的时候。
package com.bluedot.innerClass;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Animal a = new Animal();
Animal.AA aa = a.new AA();
//匿名内部类,继承了Book类
new Book(){
public void getBook(){
System.out.println("BOOK...");
}
public void a(){
System.out.println("a");
}
}.a();
}
}
class Book{
public void getBook(Animal a){
System.out.println("book...");
}
}
//包装类
class Animal {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//内部类
class AA {
public void get(){
name = "string";
}
}
}
语句块前面用static关键字修饰的叫静态块。
只要JVM加载一个类,那么就初始化静态成员,一个项目启动时需要做的事儿会放在静态块中。
对象的初始化过程:先初始化父类的静态成员,再初始化子类的静态成员,然后是父类的非静态块,接着是父类的构造方法,然后是子类的非静态块,最后调用子类的构造方法。
package com.bluedot.block;
public class Child extends Parent {
public Child(){
System.out.println("Child构造方法");
}
{
System.out.println("Child初始化块");
}
static {
System.out.println("Child静态块");
}
}
package com.bluedot.block;
public class Parent {
public Parent(){
System.out.println("Parent构造方法");
}
{
System.out.println("Parent初始化块");
}
static {
System.out.println("Parent静态块");
}
}
package com.bluedot.block;
public class Test {
public static void main(String[] args){
Child child = new Child();
}
}
内部类:在类内部定义的类,或者在方法中定义的类。
好处:可以直接访问包装类的成员。如果有一个类只需要包装类来访问而有需要其它类访问,那么就把这个类定义成内部类。
内部类生成的.class文件名是“包装类名$内部类名.class”
匿名内部类:主要用到一个类只想使用一次的时候。
package com.bluedot.innerClass;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Animal a = new Animal();
Animal.AA aa = a.new AA();
//匿名内部类,继承了Book类
new Book(){
public void getBook(){
System.out.println("BOOK...");
}
public void a(){
System.out.println("a");
}
}.a();
}
}
class Book{
public void getBook(Animal a){
System.out.println("book...");
}
}
//包装类
class Animal {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//内部类
class AA {
public void get(){
name = "string";
}
}
}