类中的域
在类中存在两种域,静态域和非静态域
静态域:类变量,使用static关键字申明,这个域被此类的所有对象共享,只有一份拷贝。能被所有实例或类方法引用。
非静态域:实例变量,每个实例都有自己的一份拷贝。
public class TTest { public static void main(String[] args) { //直接调用静态域 System.out.println(TPerson.PI); //实例化类 TPerson person = new TPerson(); //调用非静态域 System.out.println(person.radius); //调用静态域 System.out.println(person.PI); } } class TPerson{ //静态域 public static double PI=3.14; //非静态域 double radius = 10; }
类中如果不加任何的修饰符,默认是public级的。这里有一个问题,一般静态域都是public级的。
为了完整的封装数据,不推荐实例变量(非静态域)是public级的,实例变量应该都申明为private级别,然后
利用方法实现对实例变量的读写。方法后面逐渐会学习。例如:
public class TTest { public static void main(String[] args) { //直接调用静态域 System.out.println(TPerson.PI); //实例化类 TPerson person = new TPerson(); //调用静态域 System.out.println(person.PI); //通过方法调用静态域 person.setRadius(200.00); System.out.println(person.getRadius()); } } class TPerson{ //静态域 static double PI=3.14; //非静态域 private double radius = 10; public double getRadius() { return radius; } public void setRadius(double _radius) { radius = _radius; } }
还有一种域叫做Final域,意味着在这个域不能被类中的方法修改,在声明final域时可以为它提供初始值。也可以在构造函数中对它进行初始化。
final double PI=3.14
final域因为不能在类中修改,所以只能在声明的时候初始化或者在构造函数中初始化,其他位置将会引发异常。final field version may not have been initialized.