一、代码块:
package 面向对象.代码块;
/***
* 代码块:
* 在类中或方法当中使用{}括起来的一段代码,就称它是一个代码块
* 1. 局部代码块:直接定义在方法内部的代码块,在调用方法的时候执行。
* 2. 初始化代码块: 直接在类当中定义的代码块,初始化代码块在运行时,还是要把它放到构造方法当中。
* 3. 静态代码块: 在初始化代码块前面加上static. 在什么时候执行?
* 在加载字节码时就会自动调用.在主方法之间执行的。 只执行一次。
*
*/
public class Test {
static{
System.out.println("静态代码块已运行!");
}
//它是每创建一个对象,就会调动一次。
{
int b=10;
System.out.println("初始化代码块执行");
}
Test(){
System.out.println("------");
}
void myxq() {
{
//代码块当中定义的变量,我们称它是局部变量
int a =10;
System.out.println(a);
}
}
public static void main(String[] args) {
System.out.println("main执行");
new Test();
//new Test();
}
}
总结:
1. 类的加载,当第一次创建该类对象的时候,加载到内存当中
在加载时,会执行static
2.字段初始化问题
2.1 静态字段初始化,是在静态代码块当中初始化
2.2 非静态的字段初始化,它是在构造器当中做的初始化
3.子类构造器默认会调用父类的构造器
1-->
二、final 关键字
final class SuperClass{
final String name ="zs";
final void test()
{
System.out.println(1);
// final int a =10;
// a=20;
}
}
//继承:1.减少了重复代码。2.破坏了我们的封装,它可去访问父类当中的实现细节.
// 2. 覆盖了父类当中的方法
/***
* final: "最终,不可修改的",保证数据安全,子类只能用,不能修改
* 可以修饰:
* 字段:不能再去修改字段
* 方法:子类开就能再去覆盖该方法
* 类:该类就不能再去被继承了
*
* final 修饰字段时,字段是没有初始值,必须得要自己手动设置初始值。不加的话,会报错。
* final 修改变量,就代表是一个常量.命令规则:所有的字母都大写MAX_VALUE
*
* final 可以在局部代码块当中使用
* 如果final 修饰的是基本数据类型,代表值不能去修改了
* 如果final 修饰的是一个引用数据类型,代表地址不能再去修改了
*
*
*/
class SubClass extends SuperClass{
int age =10;
void test()
{
System.out.println(2);
final int a =10;
//a=20;
}
}
public class Test {
public static void main(String[] args) {
final SubClass sub = new SubClass();
System.out.println(sub.age);
sub = new subClass()
sub.test();
sub.name="ls"
System.out.println(sub.name);
}
}