代码块
类的成员之4 :代码块(或者初始化块) 代码块的作用:用来初始化类、对象 代码块如果修饰的话,只能用static 分类:静态代码块vs非静态代码块 静态代码块: 在类中可以执行多个静态代码块,多个并存时按照顺序执行 可以有输出语句 随着类的加载而执行,只执行一次 作用:初始化类的属性 静态代码块执行优先于非静态代码块的执行 静态代码块只能调用静态的属性和方法,不能调用非静态的属性和方法 非静态代码块: 可以有输出语句 随着对象的创建而执行.每创建对象就执行一次 作用可以创建对象时,对对象的属性赋值 对属性赋值的位置 默认初始化-->显示初始化/在代码块初始化(按照前后顺序)--->构造器初始化--->在代码块初始化 非静态代码块按照前后顺序执行 非静态代码块能调用静态的属性和方法,也能调用非静态的属性和方法
示例
public class BlockTest { public static void main(String[] args) { String desc = Person.desc; Person p1 = new Person(); Person p2 = new Person(); Person.info(); } } class Person{ //属性 String name; int age; static String desc= "我是人"; //构造器 public Person(){ } public Person(String name, int age){ this.name = name; this.age = age; } //静态代码块 static { System.out.println("hello,static bloc !"); } static { System.out.println("1234567"); } //非静态的代码块 { System.out.println("hello,非静态代码块"); age = 9; name = "wee"; System.out.println(this.age); } { System.out.println("hello,非静态代码块00000"); } //方法 public void eat(){ System.out.println("吃"); } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } public static void info(){ System.out.println("1234567"); } } 测试结果 hello,static bloc ! 1234567 hello,非静态代码块 9 hello,非静态代码块00000 hello,非静态代码块 9 hello,非静态代码块00000 1234567 Process finished with exit code 0
关键字:final
在Java中声明类、变量和方法时,可使用关键字final来修饰,表示“最终的”。 final标记的类不能被继承。提高安全性,提高程序的可读性。 string类、System类、StringBuffer类 final标记的方法不能被子类重写。 比如:Object类中的getClass()。 final标记的变量(成员变量或局部变量)即称为常量。名称大写,且只能被赋值一次。 final标记的成员变量必须在声明时或在每个构造器中或代码块中显式赋值,然后才能使用。 final double MY_PI = 3.14;final :最终的 1.可以修饰的结构;类、方法、属性 2. final 用来修饰类,被修饰的类不能称为别的父类不能被继承 Final 用来修饰方法,表示此方法不可以被重写 Final 修饰变量:此时的“变量”就称为常量 Final 修饰属性:可以考虑赋值位置:显示初始化、代码块中初始化、构造器初始化 Final 修饰局部变量:尤其是使用final修饰形参时,表明此形参时个常量, 当调用此方法时,给常量形参赋值一个形参,赋值以后,就只能在方法体内使用形参,不能重新赋值 static final 用来修饰属性方法 修饰属性:全局变量 示例
public class FinalTest { final int width = 10; public void doWidth(){ //width =20; } public static void main(String[] args) { FinalB f1 = new FinalB(); f1.eat(7); } } final class FinalA{ } class FinalB { public void eat(final int o){ //不可以 // int o = 6; System.out.println(o); } }