代码块/初始化块与方法的区别:
无方法名、返回、参数,仅方法体。
不用通过对象或类显示调用,加载类/创建对象时隐式调用。
代码块的好处:
总结:在有多个构造器的类中,可以把每个构造器中都需要有的重复语句抽取出来单独作为代码块,大大提高了程序的复用性。
public class CodeBlock01 {
public static void main(String[] args) {
Movie a = new Movie("a");
Movie b = new Movie("b", 12);
}
}
class Movie{
private String name;
private double price;
private String director;
{
System.out.println("电影屏幕打开...");
System.out.println("广告开始...");
System.out.println("电影正式开始...");
}
public Movie(String name) {
this.name = name;
}
public Movie(String name, double price) {
this.name = name;
this.price = price;
}
public Movie(String name, double price, String director) {
this.name = name;
this.price = price;
this.director = director;
}
}
代码块注意事项:
很重要!多复习!
注意!当调用到子类的static代码块时,其父类的static代码块也会被调用。(因为子类加载时其父类也会加载)
由上可以总结:类的加载和new实例之间是有重叠部分,且不相关的两件事情。
小结:
1.static代码块在类加载时执行,只执行一次。
2.非静态代码块在创建对象时调用,创建一次,调用一次。
代码块在构造器之前被调用。
示例代码如下:
public class CodeBlock02 {
public static void main(String[] args) {
A1 a1 = new A1();
}
}
class A1{
private static int n1 = getVal1();
private int n2 = getVal2();
{
System.out.println("1普通代码块");
}
static{
System.out.println("1static");
}
public static int getVal1(){
System.out.println("val1");
return 10;
}
public int getVal2(){
System.out.println("val2");
return 30;
}
}
输出如下:
val1
1static
val2
1普通代码块
当涉及到继承关系时的顺序:
父类加载->子类加载->父类构造->子类构造
有关最后一条:static代码块本质上也是一个static方法,普通代码块同理。
标签:10,name,Movie,代码,static,面向对象编程,public,String From: https://www.cnblogs.com/gknives/p/18394893