静态变量与静态函数
静态变量:
作用:一个类可以实例化很多对象,每个对象分别占据自己的内存,而静态变量在类被载入时就已经已经创建,所以静态变量可以代替不同对象内内容相同的变量,从而达到节省内存的目的。
访问方式:可以使用“对象名.变量名”访问,也可以使用“类名.变量名”访问,一般情况下使用“类名.变量名”访问,非静态变量不能使用这种方法。
常见使用情景:1、保存跨对象信息
2、储存对象个数
1 class Student{ 2 String name; 3 int age; 4 static int classRoom;//可以被任意实例化对象调用 5 static int num = 0;//作为计数 6 Student(String name,int age){ 7 this.name = name; 8 this.age = age; 9 System.out.println(name + "打卡成功"); 10 num++;//计数 11 } 12 void checkOut(){ 13 System.out.println(name + "离开了"); 14 num--; 15 if(num==0){ 16 System.out.println("无人"); 17 } 18 } 19 } 20 public class Test1{ 21 public static void main(String[] args){ 22 Student zhangsan = new Student("张三","19"); 23 zhangsan.classRoom = 3;\此时再创建lisi,lisi.classRoom=3; 24 Student lisi = new Student("李四","20"); 25 zhangsan.checkOut(); 26 lisi.checkOut(); 27 } 28 }
输出结果为:
张三打卡成功 李四打卡成功 张三离开了 李四离开了 无人
静态函数
静态函数就是在普通函数的定义上加上static关键字,与静态变量统称为静态成员。
访问方法:与静态变量相似可以使用“类名.函数名”、“对象名.函数名”访问,通常使用“类名.函数名”访问。
注:静态函数调用时,对象还没有创建,因此,静态函数中不能直接访问类中的非静态成员变量和成员函数。当然,也不能使用 this 关键字。上一篇博客已经提到this关键字。
静态代码块
对所用对象的共同信息进行初始化,并对所有对象只执行一次。(类似构造函数)。经常用来进行类属性的初始化。如:
class Student{ static String classroom; String name; static{ classroom = "三班" System.out.println(" 静态代码块执行"); } } public class Test2{ public static void main(String[] args){ Student zhangsan = new Student(); } }
输出结果为:静态代码块执行
封装与访问控制修饰符
封装
将属性和方法封装到类里面,通过添加访问修饰符来限制访问权限,以达到信息隐藏的目的。而信息隐藏的原因是对模块的任何实现细节所做的更改不会影响使用该模块的代码,防止用户意外修改数据,完善对象的使用。
使用封装:
1、将不能暴露的成员隐藏起来。实现方法是将成员定义为私有的,在成员定义前加上 private修饰符。
2、用公共方法来暴露对该隐藏成员的访问,可以给函数加上 public 修饰符,将该方法定义为公共的。
注:私有成员,只能在定义它的类的内部被访问,在类的外部不能被访问。private 和 public 都是访问控制修饰符,下面讲解。
访问控制修饰符
类的访问控制修饰符:
public修饰:该类就是一个公共类,该类可以被包内包外的所有类识别。
无public修饰:属于默认访问修饰,该类只能被同一包中的所有类识别。
成员的访问控制修饰符:(从上到下开放程度加大)
1、private(私有的)类型成员,只能在定义它的类的内部被访问。
2、default 类型成员,可以在定义它的类的内部被访问,也可以被这个包中的其他类访问。
3、protected(受保护的)类型成员,可以在定义它的类的内部被访问,也可以被这个包中的其他类访问,也可以被包外的子类访问。
4、public(公开的) 类型成员,可以在定义它的类的内部被访问,也可以被包内包外的所有其他类访问。
举例如下:
1 public class Student(//public修饰的类 2 private String name;//private 类型成员 3 String sex;// default 类型成员 4 protected int age;// protected 类型成员 5 public void display(){} // public 类型成员 6 )