1. 类
1.1 类的一般形式
1.2 方法的重载(overloading)
2. 对象
2.1 对象的创建和使用
2.2 构造函数
3. 关键字 static
3.1 静态变量
3.1.1 普通的变量都是属于某个对象的,有一个对象就有一个这个数据的副本。静态变量则是整个类只有一个变量,它跟对象是没有关系的,跟它相关联的是类而不是对象。
package chap5; public class StaticDemo1 { // 声明普通变量 int commanint = 0; // 声明静态变量 static int staticint = 0; StaticDemo1(int x){ commanint = x; } public static void main(String[] args) { // 创建两个对象 StaticDemo1 s1 = new StaticDemo1(1); StaticDemo1 s2 = new StaticDemo1(2); // 比较静态变量和普通变量 System.out.println("s1.commanint = " + s1.commanint); System.out.println("s2.commanint = " + s2.commanint); System.out.println("s1.staticint = " + s1.staticint); System.out.println("s2.staticint = " + s2.staticint); // 改变s1普通变量的值,仅影响s1的普通变量 s1.commanint++; System.out.println(" change commanint value:"); System.out.println("s1.commanint = " + s1.commanint); System.out.println("s2.commanint = " + s2.commanint); System.out.println("s1.staticint = " + s1.staticint); System.out.println("s2.staticint = " + s2.staticint); // 通过s1改变静态变量的值,静态变量的值全部改变 s1.staticint++; System.out.println(" change staticint by changing s1"); System.out.println("s1.staticint = " + s1.staticint); System.out.println("s2.staticint = " + s2.staticint); } }
3.1.2 上例中通过一个对象改变静态变量的值,可以看到两个对象的值都改变了。实际上上例中访问静态变量的方法是不规范的,规范的方法是使用“类名.变量名”来访问。
package chap5; public class Student { int id = 0; static int studentNum = 0; Student(int x) { id = x; studentNum ++; } public static void main(String args[]) { Student s1 = new Student(1000); Student s2 = new Student(1001); Student s3 = new Student(1002); Student s4 = new Student(1003); System.out.println("s1 student number:" + s1.id); System.out.println("s2 student number:" + s2.id); System.out.println("s3 student number:" + s3.id); System.out.println("s4 student number:" + s4.id); // 使用“类名.变量名”来访问静态变量 System.out.println("student count:" + Student.studentNum); } }
3.2 静态方法
3.2.1 使用“类名.方法名”来访问静态方法。一般在工具类中定义一些静态方法来处理一些事情,这样可以方便地使用这些静态方法。在Java常用的数学工具类Math类中的方法大多数是静态的,可以很方便地访问。
package chap5; public class StaticMethod { public static void main(String args[]){ System.out.println("Print information by Static Method"); MyMethod.printString("str type"); MyMethod.printInt(5); } } class MyMethod{ static void printString(String str){ System.out.println(str); } static void printInt(int i){ System.out.println(i); } }
3.2.2 使用静态方法时需要注意以下两点:
- 静态方法不能直接访问非静态变量
- 非静态方法可以直接访问静态变量
package chap5; public class Demo1 { int x = 0; public static void main(String[] args) { // 静态方法中调用非静态变量,非法 System.out.println(x); } }
3.3 静态常量
3.3.1 实际应用中静态变量不常用,最常用的是静态常量,用来存储程序中不会改变的信息。静态常量的定义如下:
public static final int X = 123;
3.3.2 该变量X在程序中是不可以改变的,不能通过赋值改变它的值。
3.3.3 静态变量和静态常量的初始化是调用构造函数之前完成的。
package chap5; public class Demo2 { static int x = 0; static { x = 100; } Demo2(){ System.out.println(x); } public static void main(String[] args) { // 创建一个对象,创建对象之前会先执行static代码块,注意程序输出 Demo2 d = new Demo2(); } }
4. 参数传递
4.1 基本类型的参数传递
4.2 对象类型的参数传递
5. 包
5.1 包的使用
5.2 导入包
5.3 在Eclipse中使用包
6. 小结