package point; class Point { int x = 0; int y = 0; static int z = 100; // 定義靜態變量z,類變量 static final double PI = 3.1415926;// final定義常量,它的值在運行時不能被改變 Point(int a, int b) { //PI=3.1415926; /* * 當使用靜態常量的時候,不能在構造函數中初始化, 因為靜態時,常量已經變成類的常量了 */ x = a; y = b; } Point() { this(1, 1); // 必須作為構造函數的第一條語句 } static void output() { System.out.println("hello,output() called"); // System.out.println(x);//此時尚未給x,y分配內存空間, /* * Point2.java:16: non-static variable x cannot be referenced from a * static context System.out.println(x); ^ 1 error */ System.out.println(z); } @SuppressWarnings("static-access") public static void main(String[] args) { Point.output(); /* * 當聲明output為靜態方法(static)時,直接使用類名Point, 來調用output()方法, * 因為這樣一個靜態方法只屬於類本身, 而不屬於某個對象,把這種方法稱為類方法 而對於非靜態方法,稱之為實例方法,即對象的方法 */ Point pt2 = new Point(); pt2.output(); // 當然也可以使用類的實例,即對象pt2,使用pt2來調用靜態方法 Point pt3 = new Point(); Point pt4 = new Point(); pt3.z = 5; System.out.println(pt3.z);// 顯示的是5,因為z是靜態變量,類的變量 pt4.z = 1000; System.out.println(pt3.z);// 顯示的是1000,因為z是靜態變量,類的變量 System.out.println(pt4.z);// 48句賦予了z新的值 } }