一:类体
类的目的是抽象出一类事物共有的属性和行为。
类是一种用于创建具体实例(对象)的数据类型。在eclipse中,类是放在包(也就是package hello;)与public class hello{}之间的。
类包含两部分内容:
1.变量的声明:用来储存属性的值(体现对象的属性)。
2.方法的定义:方法可以对类中声明的变量进行操作,及给出算法(体现对象所具有的行为)。
1.成员变量
声明变量部分所声明的变量称为成员变量或域变量,其在整个类内都有效。
成员变量除了包括基本类型外,还包括引用类型,即数组、对象和接口。关于对象和接口后面再记录,现在先讲一下类的调用吧,我初次调用时总是出现这句话 java.lang.NullPointerException(使用了空对象)。1字符串变量未初始化;
2接口类型的对象没有用具体的类初始化
出现 java.lang.NullPointerException 的原因一般有两个:1.字符串变量未初始化;2.接口类型的对象没有用具体的类初始化。
class Factory {
int [] a;
Workman zhang ;// int [] a = new int [40];
// Workman zhang = new Workman();
}
class Workman {
int age;
String name;
int high;
}
public class Lei {
public static void main(String[] args) {
Factory HD = new Factory();
HD.a[0] = 1;
HD.zhang.age = 19;
HD.zhang.name = "HchildD";
HD.zhang.high = 152;
System.out.println(HD.a[0]);
System.out.println(HD.zhang.name);
System.out.println(HD.zhang.age);
System.out.println(HD.zhang.high);
}
}
例如,我刚开始这样调用,在编译时并没有异常,可是运行时就出现了 java.lang.NullPointerException ,我也给他创建对象了啊(Factory HD = new Factory();),为什么还是错了,再回头看看,我创建了两个类,,那你调用另一个类是不是也应该使用new创建对象呢,试一下,将类Factory()中的Workman zhang ;改成Workman zhang = new Workman(); 还是空指针,再看一下,上次提到使用数组也要为其创建对象的,我的数组a是不是也要new以下,把int [] a;改成int [] a = new int(40);再运行一下,ok,没问题了。当然,创建对象也可以在类Lei()做,在赋值之前先对其new一下也是可以的。不过我个人看来还是在定义数组或类时就直接为其创建对象,不然忘记了后面找起来就比较麻烦了。
另外需要注意的是,在类中创建对象或者给变量赋值时要直接跟在声明之后,若另起一行会显示错误!
2.方法
方法的定义包括两部分:方法头和方法体。
方法头:由类型名、名称和名称之后的一对小括号(可以带有参数)构成。
方法体:由一对{},及其里面的内容构成。内容包括局部变量(在方法体中声明的变量和方法的参数叫做局部变量)的声明和Java语句。
class Factory {
int getsum(int n){
int sum = 0;
for(int i = 1;i<n;i++){
sum = sum+i;
}
return sum;
}
}
public class Lei {
public static void main(String[] args) {
Factory HD = new Factory();
int sum = HD.getsum(10);
System.out.println(sum);
}
}
尽管一个Java源文件中可以有多个类,但仍然提倡在一个Java源文件中只编写一个类。
二:构造方法与对象的建造
1.构造方法
构造方法是类中的一种特殊方法,当程序用类创建对象时需使用它的构造方法。构造方法的名字必须与他所在类的名字完全相同,而且没有类型。允许在一个类中编写若干个构造方法,但必须保证他们的参数不同(参数个数不同,或者个数相同但对应的某个参数类型不同)。例如:
class Factory {
int x,y;
Factory(int a,int b){
x = a+b;
}
Factory(int b){
y = b;
}
}
public class Lei {
public static void main(String[] args) {
Factory HD = new Factory(2,4);
System.out.println(HD.x);
Factory H = new Factory(8);
System.out.println(H.y);
}
}
2.创建对象
创建对象就是我上面所说的,为其分配变量的过程,也就是加一个new,否则,运行时是会出错的。
注意的一点是,若类中定义了一个或多个构造方法,Java不提供默认的构造方法,也就是说,在上一个例子中,若是这样定义HD: Factory HD = new Factory();是错误的!
那么,我想在这里留一个问题,若一个类中,既有构造方法,又有普通方法,那如何去调用普通方法呢?
或许是无法在main中调用这个普通方法的,但是可以在构造方法中调用同一个类中的普通方法的。即直接在构造方法中添加普通方法的名字和括号或者直接赋值给某一个变量就可以了。例如:
class Factory {
int x,h;
int getsum(int n){
int sum = 0;
for(int i = 0;i<n;i++){
sum = sum + i;
}
return sum;
}
Factory(int b){
x = b;
h = getsum(5);
}
}