001.static
/**
*static + 属性 :类变量 静态变量
*static + 方法 : 静态方法 类方法
*static + {} :静态代码块
*/
public class StaticTest {
private String name; //成员属性 成员变量 实例变量
private static int age=20; //静态属性 静态变量 类变量
/**
* static + 方法
* 静态方法 类方法
*/
private static void getName(){
// getAge(); 静态方法中不能直接访问同一个类中的非静态成员
// this.name="mingming"; 静态方法中不能使用this(this此时代表对象实例,static代表类共享)
// StaticTest st = new StaticTest();
// st.getAge(); //只有对象实例后,对象.成员方法的方式访问非静态成员
System.out.println("static方法的getName");
}
/**
* 成员方法
*/
public void getAge(){
getName(); //成员方法可以直接访问静态成员
System.out.println("成员方法");
}
/**
* 类代码块
* static + {}
*/
static{
System.out.println("这是静态代码块");
}
//构造代码块
{
System.out.println("构造代码块");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
StaticTest st = new StaticTest();
st.getAge(); //对象引用名.方法
System.out.println(StaticTest.age); //类名.属性
}
}
0011.总结:
- 静态成员的生命周期:类加载时产生,销毁时释放;
- 访问:
- 静态方法中不能直接访问类中非静态成员,但成员方法可以直接访问类中静态成员;
- 静态方法中,只有对象实例后,对象.成员的方式访问非静态成员;
- Static不能修饰类、局部变量和构造方法;
- 静态方法中不能用this 和 super;
- 类对象共享Static成员;
- 静态成员访问方式:(推荐)1.类名.成员 2.对象名.成员;
- 静态成员只执行一次,而对象实例化可以执行多次;
- 只希望代码执行一次,可以考虑放在静态代码块中;
002.final
0021.final的影响
- 修饰变量:不允许修改;
- 基本数据类型:初始赋值后则不能更改;
- 引用数据类型:初始化之后不能再指向另一个对象,但对象的内容是可以修改的;
- 修饰方法:该方法不能被子类重写,但可以被子类继承使用;
- 修饰类:不能被子类继承;
//修饰引用类型时-->(引用地址可以发生改变?属性值是否可以改变)
public void eat(){
final Animal animal = new Animal("ming");
// animal = new Animal(); 报错,引用地址是不可以发生改变的
animal.name = "lili"; //但对象的属性值是可以修改的
}
//该方法不能被子类重写,但可以被子类继承使用
//父类
public class Animal
private String name = "Animal";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public final void eat(){
System.out.println(this.getName()+"在吃东西");
}
}
//子类
public class Dog extends Animal{
/*这时,子类eat方法是不能重写父类eat方法的
public void eat(){
System.out.println("Dog 重写了 eat");
}
*/
}
//测试类
public class TestDemo {
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("Dog");
dog.eat();
}
}
//输出
Dog在吃东西
0022.注意