首先呢,要明确概念。
类:一个类型,用来封装数据和各种动作,通过关键字class定义。
实例:一个类通过new操作或者newInstance方法产生的对象,也称实例。
方法:描述此类型的动作的成员,定义格式为访问符(private、public、protected)返回类型,方法名,参数表,大括号(内部有方法的具体操作内容)。
字段:描述此类型的数据的成员,定义格式为访问符,字段类型,字段名(可以直接用等号赋初始值)。
属性:字段如果仅仅提供了get方法,例如get字段名(),字段可以称为只读属性,如果仅仅提供了set方法,例如:set字段名() ,字段可以称作只写属性,都有,直接称作属性,字段如果是静态成员,拥有静态的get或者set,那么称为静态属性。
静态成员:类直接拥有的字段或方法,在访问符(private,public,protected)后标注static表示此字段或者方法为静态成员。
实例成员:类所创建的对象(类的实例)拥有的字段或方法。
静态成员和实例成员最大的区别是是否需要对象,静态成员是归属与class的,通常class对象只有一个,而实例成员是有class衍生的对象,通过new或者newInstance等手段得到。
因此,在main方法外,这个class内,不加static的对象是一个字段,而且是实例字段,实例字段属于类的对象,因此如果需要使用的话需要用类new一个对象出来,然后在使用对象的字段。
public class Test {
// 访问符 类型 名称 这个是字段,没有static,因此是实例的字段,需要new之后再用public String test = "123456";
// 访问符 【static 这个是静态成员,不需要new出对象】,类型 名称,是一个静态字段 public static String test2 = "121212";
// 访问符 返回类型,名称,参数表,没有static,需要new出对象在使用。public void printTest() {
System.out.println("hello");
}
// 访问符 【static 这个是静态成员,不需要对象】 返回类型 参数表,因此这个是一个方法。// 方法的名字是main,java可以从这里开始执行public static void main(String[] args){
Test instance = new Test();
instance.printTest(); // 输出helloSystem.out.println(instance.test); // 输出123456System.out.println(Test.test2); // 输出121212}
}
因此呢,main外面是可以不用static修饰的,只不过那样 话 你需要 先 new 一个 对象,然后在使用它。
其实类本身就是一个对象,只是他很特殊,整个java环境里面就只有一个这样的类对象,他和类所衍生的对象有区别,例如:
String.class这样,他就是String的类对象,整个java环境里面就一个,其他的String,就都是这一个String.class衍生的实例对象。
所以,如果我们需要说明一个字段或者方法是属于这样一个唯一的类对象的,那么就需要使用static修饰他。