一、用户自定义类
这些类没有main方法,但都有自己的实例域和实例方法。
class classname{
field1
field2
constructor1
constructor2
method1
method2
}
例如
class Employee{
private String name; //实例域
public Employee(String a){
name=a;
} //构造器 在实例化类出对象时自动调用。
public String get name{
return name;
} //方法
}
new出一个对象用Employee a=new Employee();
new出多个对象(数组形式)
Employee[] a=new Employee[n]
(其实和定义一个int型数组一样,可能用自定义类new出对象有些陌生)
当有多个类时,源文件名必须和public类的名字一致,也就是说只能有一个public类,但可以有多个非公有类
如果习惯每一个类存在一个单独的源文件中。比如有一个Employee类和
EmployeeTest类
。有两种方式;1:用通配符javac Employee*.java
,这样就会编译这两个类。 2:javac EmployeeTest.java
当他编译employeeTest类
时,会发现这个类使用了Employee类
,于是自动搜索employee.class
,如果没有class文件,就去搜索java文件然后对它编译。更重要的是,如果java比class版本新,编译器会重新编译这个文件
二、静态域静态方法
int id=2;
static int nextid=1; //是一个静态域
五个对象可以有五个自己的id,五个对象公用一个静态域nextid;
package hello;
class Java{
private int a=1;
private static int b=2;
public void say() {
System.out.print(a+" "+b);
}
public static void main(String[] args) {
Java[] w=new Java[3];
for(int i=0;i<w.length;i++) {
w[i]=new Java();
}
w[0].b+=1;
w[0].a+=1;
System.out.print(w[1].b);
System.out.print(w[1].a);
}
}
如上图,一共有三个Java对象,当w[0].b nextid静态域被加了1,w[1].b也加了1,因为静态域是公用的。而实例域就是隔开的。
2.2静态常量
public class Math{
public static final double PI=3.14159265357;
}
在程序中,可以采用Math.PI获得这个常量,如果static被省略,就要new出一个实例对象,再调用这个PI。
2.3静态方法
静态方法是一种不能向对象实施操作的方法。
比如Math.pow 不使用任何Math对象。可以说静态方法是没有this参数的方法。
Employee类的静态方法不能访问ID实例域,因为它不能操作对象,但是可以访问静态域。
public static int getnextid(){
return nextid;
return id;//错误,因为不能操作对象,访问自身的静态域可以。
}
备注:实例和引用
Employee e;//引用
Employee A=new Employee();
e=A;
用指针解释就是,指针e指向了A,A是一个实例,有空间,里面放了东西。e是一个指针,指向了A。