private PassParam paramObj = new PassParam();前面没有必要加private,因为paramObj在作用域终点就消失了。
Java对象不具备和基本类型一样的生命周期,当用new创建一个Java对象时,它可以存活于作用之外
{
String s = new String("a String");
}
引用s在作用域终点就消失了。然而s指向的String对象继续占据内存空间(内存泄漏),直至"垃圾回收器"将其回收。
static StaticTest
{
static int i = 47;
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
StaticTest.i++;
}
StaticTest.i和任意StaticTest对象指向同一份存储空间,它们共享同一个i的堆地址。StaticTest.i++执行完毕,st1.i,st2.i,StaticTest.i的值全变为48.
static字段对每个类只有一份存储空间,而非static类对每个对象有一份存储空间.static方法重要用处在于不创建对象的前提下就可以调用它.
希望无论是否产生对象or产生了多少个对象,某些特定数据在内存里只有一份时,使用static字段.eg:所有中国人都有个国家名称,每个中国人都共享这个国家名称.
当申明一个事物是static,就意味着这个数据和方法不会与包含它的那个类的任何对象实例关联在一起;而非static事物必须知道它们一起运作的特定对象.
所以对于static方法,不能通过调用其他非static成员或方法而没有指定某个命名对象,来直接访问非static成员或方法.
在静态方法里只能直接调用其它的静态成员(变量,对象和方法),而不能直接访问类中的非静态成员(同类中调用不用加类名;其它类中调用:类名.静态成员or对象名.静态成员).
因为对于非静态成员,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象.
静态方法不能以任何方式引用this和super关键字,理由同上,当静态方法被调用时,this所引用的对象根本就没有产生.
System:类名,out:静态对象,println:out是PrintStream类的static对象,println是PrintStream类的方法.
相反,非静态方法里可以调用任何的静态方法和非静态方法











































main方法是static的,如果没有指定对象,就不能调用非static成员PassObj.修改:
方法1
static PassParam1 paramObj = new PassParam1();
public static void main(String[] args){paramObj.i = 500}
方法2
PassParam1 paramObj = new PassParam1();
public static void main(String[] args)
{
PassParam1 Obj = new PassParam1();
Obj.paramObj.i = 500;
}
方法3
public static void main(String[] args)
{
PassParam1 paramObj = new PassParam1();
paramObj.i = 500;
}
































