(一)掌握有无static修饰成员变量的用法和特点
(1)有static修饰的成员变量为:类变量(类的变量):无论创建多少个变量,都只共享一个name变量
(2)无static修饰的成员变量为:实例变量(对象的变量):每个创建的对象都有自己独立的age
Student类中:
package D1_StaticDemo; public class Student { //类变量(类的变量):无论创建多少个变量,都只共享一个name变量 static String name;//加上 //实例变量(对象的变量):每个创建的对象都有自己独立的age int age; }
创建Test类进行特点查看:
package D1_StaticDemo; public class test { public static void main(String[] args) { //掌握有无static修饰成员变量的用法和特点 //1.类变量的用法 //类名.类变量实现访问static修饰的类变量(推荐) Student.name="元华"; //2.类变量name也可以通过对象访问 Student s1=new Student(); s1.name="威望"; Student s2=new Student(); s2.name="石坝";//因为共用一个name变量,所以修改后由s1访问name时,显示:石坝 System.out.println(s1.name);//石坝 System.out.println(s2.name); //实例变量age只能由对象访问 s1.age=13; s2.age=12; //s1,s2的age变量为实例变量,所以互不影响 System.out.println(s1.age); System.out.println(s2.age); } }
static:静态,可以修饰成员变量,成员方法。
类变量:属于类,与类一起加载,在内存中只有一份,可以被类和类的所有对象共享
实例变量:属于对象,每个对象中都有一份,只能用对象访问
(二)static修饰成员变量应用场景
在开发中,若某个数据只需要一份,且希望能够被共享(访问,修改),则该数据可以定义为类变量来记住
案例:系统启动后,要求用户类记住自己创建了多少个用户对象。
public class User{
//类变量
Public static int number ;
//构造器,每创建一个对象,number+1
public User(){
// User.number++; //在同样一个类中,访问自己的类变量,可以省略类名不写 number++;}
}
使用测试类查看效果:
package D1_staticDemo2; public class test2 { public static void main(String[] args) { //通过案例理解类变量的应用场景 User t1=new User(); User t2=new User(); System.out.println(User.number); } }
(三)static修饰成员方法
根据有无static修饰分为类方法和实例方法
(1)类方法:有static修饰的成员方法,属于类,可以用类和对象触发访问
package D1_staticDemo3; public class StaticMethod { public static void Print(){//加了static,变成类方法 System.out.println("hello"); } }
在test中查看:
package D1_staticDemo3; public class test3 { public static void main(String[] args) { //static修饰成员方法 //1.类方法的用法 StaticMethod.Print();//直接使用类访问 StaticMethod s1=new StaticMethod(); s1.Print();//使用对象s1访问类方法 } }
(2)实例方法:无static修饰的成员方法,属于对象,只能用对象来触发访问
在StaticMethod类中添加实例方法:
public void printPass(){
system.out.println("成绩判断");
}
在Test中访问:
s1.printPass();
(四)Static修饰的成员方法的应用场景
(五)Static的注意事项
因为实例方法和实例成员属于对象,而类方法属于类,在类方法中不能明确某一个对象,所以无法调用实例方法和实例对象
同理,this关键字也是指向对象,所以类方法中无法使用
(六)代码块
在加载类时会先调用静态代码块
且调用一次
可以在静态代码块中对成员变量进行赋值
实例代码块
实例代码块作用,记录日志,避免在有参构造器和无参构造器中重复写
(七)单例设计模式
饿汉式单例,第一次调用类时创建对象(类变量会随着类的创建一起运行)
懒汉式单例在使用时才创建对象