目录
从这章节开始,要慢慢养成——面向对象编程的思维,使用对象进行程序设计。
1、定义通用类
引入——通用类来定义同一类型的对象,一个对象的属性/特征/状态——数据域(变量)表示,一个对象的行为——方法表示。
//UML类图中的表示方法
ClassName(parameterName:parameterType...)
{
...
methodName(parameterName:parameterType):return
}
//定义一个类
public class TestClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
Circle1 NO1 = new Circle(5); //使用构造方法创建对象
Circle1 NO2 = new Circle(3);
double s1=NO1.getArea(); //调用对象上的实例方法的过程称为调用对象
NO2.setRadius(10);
double s2=NO2.getArea();
System.out.printf("s1=%f,s2=%f",s1,s2);
System.out.println(" Area is " + new Circle1(50).getArea()); //有时候,一个对象在创建之后并不需要引用。在这种情况下,可以创建一个对象,而并不将它明确地賦值给一个变量。
}
}
class Circle{
double radius;
Circle(){ //无参构造方法(默认)
radius=1;
}
Circle(double newRadius){
radius = newRadius;
}
double getArea(){ //实例方法:因为只能在具体的实例上调用
return radius*radius*Math.PI;
}
void setRadius(double newRadius){
radius = newRadius;
}
}
class Student{
String name;
int age;
boolean isSci;
char gender;
}
2、无引用对象数据的默认值
对于上面程序中申明的String name; int age; boolean isSci; char gender;
如果一个引用类型的数据域没有引用任何对象,引用类型数据域的默认值是rum, 数值类型数据域的默认值是0, boolean 类型数据域的默认值是false, 而char 类型数据域的默认值是’u000'
Student student = new Student();
System.out.println(student.name);
System.out.println(student.age);
System.out.println(student.isSci);
System.out.println(student.gender);
显示的结果是:
null
0
false
3、对象的赋值
我们在创建对象时,使用的语句是:Student student = new Student();简单的说,即:student是一个包含对Student对象引用的变量。对引用类型变量来说,对应内存所存储的值是一个引用,是对象的存储地址。
对于语句:Circle1 C1 = new Circle(5); Circle1 C2 = new Circle(3);
赋值:C2=C1;是将C1的引用赋值给C2,他俩指向了同一个Circle对象C1。原先C2指向的内存空间成为了垃圾,将被java运行系统检测后自动回收(垃圾回收)
4、静态变量、常量、方法
静态变量被类中的所有对象所共享。静态方法不能访问类中的实例成员。
首先,什么是实例/实例变量。Circle1 C1 = new Circle(5);Circle1 C2= new Circle(3);
C1 C2即是我们创建的两个实例,radius分别等于5和3;radius就是两个实例变量。实例变量是绑定到类的某个特定实例的
如果想让一个类的所有实例共享数据,就要使用静态变量/类变量
若在class Cricle1{...}中增加一个静态变量/静态方法
//静态变量:
static int numberOfObjects;
//静态方法:
static int numberOfObjects(){
return numberOfObjects;
}
//静态常量
final static int PI = 3.141592654;
申明为静态量后,该类的所有对象共享其值。
main方法也是静态方法
5、可见修饰符public
可以在方法和数据域前使public修饰符,表示它们可以被任何其他的类访问。
如果没有可见修饰符public,则只能被同一个包(程序第一行申明:package packageName)中的任何一个类访问。
6、private
private : 限定方法和数据域只能在它自己的类中被访问,只能应用在类的成员上。