1.static关键字
1.1用法:
用于修饰属性,方法,块,内部类。
1.2 特点:
1.被static修饰的方法中,不能访问非静态的属性和方法
2.被static修饰的方法和属性中,会被整个程序所共享
3.被static修饰的方法和属性,会优先被加载
4.被static修饰的方法和属性,无需创建对象,直接使用类名就可以调用。
1.3 static方法
static方法被称为静态方法,因为不需要创建对象,所以对于静态方法来说是没有this的,并且由于没有对象也就没有this,所以根据这个特性又可知道静态方法不能访问非静态成员方法和成员变量。因为非静态成员方法和成员变量都需要依赖具体的对象才能调用。所以静态方法不能访问非静态方法和属性,但是非静态方法可以访问非静态方法和属性。
package HelloWorld;
public class Sta {
//非静态变量
private String str1 ="property";
//静态变量
private static String str2 ="staticProperty";
public Sta() {
}
//非静态方法
public void print1() {
System.out.println(str1);
System.out.println(str2);
print2();
}
//静态方法
public static void print2() {
//这一句报错,报错信息是Cannot make a static reference to the non-static field str1
System.out.println(str1);
System.out.println(str2);
/*
* 调用非静态的方法会报错,
* Cannot make a static reference to the non-static method print1() from the type MyObject
*/
print1();
}
}
}
1.4 static变量
static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响
1.5 static代码块(静态代码块)
static代码块可以放在类中任何地方。
静态代码块可以优化程序性能
为什么?
只会在类加载的时候执行一次。
2.static一些误区:
2.1.static关键字会改变类中成员的访问权限吗?
答:不会,static不会影响到变量和方法的作用域。在java中能影响的访问权限只有 public private protected (包括包访问权限)这几个关键字。
2.2 能通过this访问静态成员变量吗?
不能,因为对于静态方法来说,是没有对象的,没有this的。
2.3 static能作用于局部变量么?
答:static不允许修饰局部变量。这是规定
2.4 static,与final的对比
答: static 修饰的变量在类加载时就会被初始化,不会因为对象的创建而再被加载,并且被static修饰 的变量只会被初始化一次。
3.final关键字
修饰类:被final修饰的类不能有子类
修饰方法: 被final修饰的方法不能被重写
修饰变量:被final修饰的变量其值不能被修改。可修饰常量。