代码块分为4种
1.局部代码块: 在方法中,限定了局部变量的作用范围
2.构造代码块 : 类中方法外,顾名思义,就是实例对象时调用,优先于构造函数调用
3.静态代码块:使用static来修饰类中方法外,与构造代码块不同,静态代码块是在类加载的时候就加载到静态区中,优先创建与对象,而且只调用一次.应用场景:驱动加载
4.同步代码块,多线程中才用到,新手先知道有这概念即可
下面有段代码,来好好建议你的掌握程度:
class Student {
static {
System.out.println("Student 静态代码块");
}
{
System.out.println("Student 构造代码块");
}
public Student() {
System.out.println("Student 构造方法");
}
}
class Demo2_Student {
static {
System.out.println("Demo2_Student静态代码块");
}
public static void main(String[] args) {
System.out.println("我是main方法");
Student s1 = new Student();
Student s2 = new Student();
}
}
输出:依次为
1.System.out.println("Demo2_Student静态代码块")
2.System.out.println("我是main方法");
3.System.out.println("Student 静态代码块");
4.System.out.println("Student 构造代码块");
5.System.out.println("Student 构造方法");
6.System.out.println("Student 构造代码块");
7.System.out.println("Student 构造方法");
内存分析图
在结合上面的静态语句块和构造语句块,就可以的到上面依次打印的结果.
继承:在封装之后,java面向对象的三大特性之二,(最后一个是多态,多态的前提必须有继承,继承中的重写(Override),以及父类引用指向子类对象),
继承的特点:减少代码的重复编写量
继承写法:
在Java 中只有单继承,如何实现多继承的功能呢?
就要使用JAVA 所允许的多接口,实现多继承的效果
所有的类都有一个基类(Object 类)
继承中的构造方法,是不能被继承的
class Father{
String name;
public Father() {
this("ssss");
System.out.println("无参构造方法");
}
public Father(String name) {
this.name = name;
System.out.println("有参构造方法"+name);
}
private void sayhi() {
System.out.println(name);
}
}
class Son extends Father{
public Son() {
super();//没写,系统就自己加上
}
public Son(String name) {
super();//没写,系统就自己加上
this.name = name;
System.out.println("子类有参构造");
}
}
这里要注意到,子类Son 的构造方法虽然没有继承父类构造方法,但是他的构造方法中,会自己调用父类的无参构造方法.即使不写,系统也会自动加上.
继承时,如果子类和父类有相同名字的成员变量, 用this.成员变量 就是调用当前子类的属性,如果子类没有,系统会自动去父类中寻找.
super. 在类中代表的是父类对象,super.调用父类的属性.
this(); 调用本类的构造方法
super(); 调用父类的构造方法
final 修饰符:
1.修饰类(不能被继承)
2.修饰变量(不能被修改) 相当于常量(不能被修改的量) 命名规则 字母全部大写 ,多单词下划线分开
final 变量有两种赋值方式:第一个,直接在类声明成员变量时给初值 第二个,在构造方法中赋值
3.修饰方法(不能被重写)