Java中package的含义与C++中namespace的用法类似,都是为了防止各个package/namespace中出现类重名的情况。但package还有一个特性,就是一个package中各个类是可以相互访问的。
所以除了一个package中的主类需要使用public修饰符外,其他的类不需要添加修饰符。
用户可以使用Eclipse中的import指令导入相关的package。系统默认为我们导入import java.lang.*包,这表示导入lang包下所有的类,但不包括langpackage下的子package。
所以,以下两条指令是不同的:
1 import java.awt.*;2 import java.awt.dnd.*;
在Java中由以下几种修饰符:private、默认、abstract、public、四种,主要区别如下:
此外,还有修饰符:static、final和abstract。具体用法如下:1.static final可以表示常量;2.类中的字段若被static final修饰,若未初始化,那么系统会自动初始化,基本类型数据设为0,引用类型设为null;3.若只是被final修饰,那么该类不能被继承。被修饰的字段只能被用户赋值一次,系统不自动初始化;4.static与this、super不能同时存在;5.类中含有被abstract修饰的字段或方法时,类名一定要添加abstract修饰符。抽象方法不进行实例化,只是申明方法形式,而是由子类进行实例化;6static可以充当全局变量修饰符的角色。
另外,在Java的类中中还有set和get,分别表示只写和只读,它们的专有名称为bean。其实质就是设定private字段的函数和读取private字段的函数。由于类具有封装性、继承性,使用private更安全。
set和get的命名方式为setField(){……}和getField(){……}。get和set后面的第一个字母大写。
1 class ClassTest 2 { 3 private int m; 4 public ClassTest(){} 5 public ClassTest(int a) 6 { 7 m=a; 8 } 9 10 public void setM(int a)11 {12 this.m=a;13 }14 15 public int getM()16 {17 return m;18 }19 }
接口在Java中被放到很高的高度,甚至出现了名为面向接口编程。接口的作用是预先定义好一些函数的名称与参数,但并不提供实现的方法。接口中的每个方法修饰符为public abstract。其他类使用接口时用关键字implements来表示。一个类可以同时使用多个接口,即一个接口可以对应多个类,一个类也可以对应多个接口。接口之间也可以继承,用extends来表示。
接口的存在主要是为了统一规范,提高代码的独立性。如在A类中使用了接口I中的方法Menthod1(),在B类中也使用了方法Menthod1(),那么B类的方法可以用A类的方法代替,因为两者的名称相同,最后实现的功能也相同,而不需要考虑两者具体实现的差异。这能大大提高代码的可扩展性。
在Java的接口中也可以存放常量,修饰符为public static final(final也可以省略)。
Java中枚举是用class来实现的。具体用法如下:
1 package helloWorld; 2 3 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT; 4 5 public class Interface { 6 7 8 } 9 10 interface Person11 {12 public static final String MSG="What a pretty girl!";13 public abstract void setName(String str);14 public abstract void setAge(int n);15 public static enum Light{Red,Orange,Yellow,Green,Blue,Purple}16 }17 18 class Student implements Person19 {20 private int age;21 private String name;22 Light light=Light.Orange;23 @Override24 public void setAge(int n)25 {26 age=n;27 }28 public void setName(String str)29 {30 name=str;31 }32 33 public void print()34 {35 System.out.println(age);36 System.out.println(name);37 System.out.println(MSG);38 System.out.println(Light.Orange);39 switch(light)//不可写成Light.Orange40 {41 case Red:42 System.out.println("Red");43 break;44 case Orange:45 System.out.println("Orange");46 break;47 default:48 System.out.println("Nothing");49 break;50 }51 }52 53 }