1. 对象
对象(object):代表现实世界中可以明确标识的一个实体。例如:一个学生、一张桌子等。每个对象都有自己独特的标识、状态和行为。
-
- 1) 对象的状态是指那些具有它们当前值的数据域。java使用变量定义数据域。
- 2) 一个对象的行为是由方法定义的。调用对象的方法就是要对象完成一个动作。
2.使用构造方法构造对象
构造方法是一种特殊的方法,具有以下三个特性:
-
- 1) -- 构造方法必须与所在类名字相同。
- 2) -- 构造方法没有返回值,甚至也没有void。
- 3) -- 构造方法在创建一个对象使用new操作符时调用的。用于初始化对象。
new ClassName (arguments); new 类名 (参数);
-
- 4) -- 构造方法可以重载。
通常情况下,一个类会提供一个没有参数的构造方法,即无参构造函数。如果类中没有定义构造方法,则系统会提供一个默认的方法体为空的无参构造方法,即默认构造方法。(default constructor)。
一个类的例子:
public class TV { int channel = 1; int volumeLevel = 1; boolean on = false; //默认无参构造函数 public TV(){} //带参数的构造函数 public TV(int newChannel, int newVolumeLevel, boolean newOn){ this.channel = newChannel; this.volumeLevel = newVolumeLevel; this.on = newOn; } //方法 public void turnOn(){ on = true; } public void turnOff(){ on = false; } public void setChannel(int newChannel){ if (on && newChannel >= 1 && newChannel <= 120) channel = newChannel; } public void setVolume(int newVolumLevel){ if (on && newVolumLevel >= 1 && newVolumLevel <= 7) volumeLevel = newVolumLevel; } public void channelUp(){ if (on && channel < 120) channel++; } public void channelDown(){ if (on && channel > 1) channel--; } public void volumeUp(){ if (on && volumeLevel < 7) volumeLevel++; } public void volumeDown(){ if (on && volumeLevel > 1) volumeLevel--; } }
调用实例:
Now the TV‘s channel is 10 , and volum level is: 3 Now the TV‘s channel is 30 , and volum level is: 4
3. 通过引用变量访问对象
3.1. 引用变量和引用类型
对象是通过引用变量来访问的,该变量包含对对象的引用,使用如下语句声明引用变量:
ClassName objectRefVar; 类名 对象引用变量 Circle myCircle = new Circle();//创建一个对象,并将其引用赋值给变量myCircle ClassName objectRefVar = new ClassName(); 类名 对象引用变量 = new 类名(); //声明对象引用变量,创建对象以及将对象的引用赋值给这个变量的语句
在java中,数组被看成是对象。数组是用new操作符创建的。一个数组变量实际上就是一个包含数组引用的变量。
3.2. 访问对象的数据和方法
创建一个对象后,其数据和方法可以使用圆点(.)运算符来访问和调用。该运算符.也称为对象成员运算符:
objectRefVar.dataField; //引用对象的数据域 objectRefVar.method; //(参数)调用对象的方法 myCircle.radius //引用myCircle的半径
-
- 1) 引用变量与基本类型变量的区别:基本类型变量——对应内存所存储的是基本类型变量的值;引用变量——对应内存所存储的值是一个引用,是对象存储的地址。
- 2) 将一个变量赋值给另一个变量时,另一个变量就被赋予同样的值。对基本数据类型来说,就是将变量的数值赋予另一个变量。对引用来说则是将一个变量的引用赋给另一个变量,两个变量同时指向同一个对象。
java中的垃圾回收:如果原来两个引用变量c1, c2分别指向不同的对象,但是后来由于引用赋值,c1与 c2都指向c1所指的对象,那么c2之前引用的对象就是无用的了,称为了垃圾(garbage)。垃圾会占用内存空间。Java运行系统会检测垃圾并自动回收它所占用的空间,这个过程称为垃圾回收(garbage collection)。
--如果你认为不再需要某个对象,可以显示地给该对象的引用赋null值。
4. 静态变量、常量和方法
- 1)如果想让一个类的所有实例共享数据,就将其声明为静态变量,也称为类变量。静态变量将变量存储在一个公共的内存空间。 Java支持静态变量和静态方法,无须创建类的实例就可以调用静态方法。
- 2)要声明一个静态变量或者定义一个静态方法,就要在这个变量或方法的声明中加上static。
- 3)类中的常量是被该类的所有对象所共享的。因此常量应该声明为:final static。 例如Math类中的PI常量: final static double PI = 3.14159265358979323846
- 4)使用 “类名.方法名” 的方式来调用静态方法,使用 “类名.静态变量”的方法来调用静态变量。
- 5)如果一个变量或者方法不依赖于具体类的实例对象,那么应该将其设计为静态变量、静态方法。
Circle类:
package demo; public class Circle { double radius; //圆的半径 static int numberOfObjects = 0; //创建实例对象的个数 Circle(){ radius = 1.0; numberOfObjects++; } Circle(double newRadius){ radius = newRadius; numberOfObjects++; } static int getNumberOfObjects(){ return numberOfObjects; } double getArea(){ return radius * radius * Math.PI; } }
测试类:
package demo; public class TestCircle { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("创建对象前:"); System.out.println("实例的个数为:" + Circle.numberOfObjects); Circle c1 = new Circle(); //创建c1 System.out.println("创建c1后,c1的半径为:" + c1.radius + ", c1的面积为: "+ c1.getArea()); System.out.println("实例的个数为:"+ c1.numberOfObjects); Circle c2 = new Circle(2.5); System.out.println("创建c2后,c2的半径为:" + c2.radius + ", c2的面积为: "+ c2.getArea()); System.out.println("实例的个数为:"+ c2.numberOfObjects); } }
输出:
创建对象前: 实例的个数为:0 创建c1后,c1的半径为:1.0, c1的面积为: 3.141592653589793 实例的个数为:1 创建c2后,c2的半径为:2.5, c2的面积为: 19.634954084936208 实例的个数为:2
5. 可见性修饰符
-
- 1)、如果在类、方法、数据域前使用public修饰符,表示它们可以被任何其他的类访问。
- 2)、如果没有使用可见性修饰符,那么默认为类、方法、数据域可以被同一个包中的任何一个类访问。————称为包私有或包内访问。
- 3)、private修饰符限定方法和数据域只能在它自己的类中被访问。
- 4)、如果一个类没有被定义为公共的,那么其只能在同一个包内被访问。
- 5)、修饰符private只能应用在类的成员上。修饰符public可以作用在类或类的成员上。
- 6)、在局部变量上使用修饰符public和private都会导致编译错误。
- 7)、大多数情况下,构造方法是公共的。但是如果想要阻止用户创建类的实例,就该使用私有的构造方法。例如Math类的所有数据域和方法都是静态的,没必要创建Math的实例。其构造 方法: private Math(){}
6. 数据域封装
为了防止对数据域的直接修改,使用private修饰符将数据域声明为私有的,称为数据域的封装。
为了修改和访问私有数据域,定义get和set方法:get(读取器)返回数据域的值,set(设置器)给数据域设置新值。
get方法的签名: public returnType getPropertyName() 如果返回值是boolean类型: public boolean isPropertyName() set方法的签名: public void setPropertyName( dataType propertyValue )
7. 对象数组
Circle [] circleArray = new Cricle [10] ; //创建10个circle对象数组 初始化circleArray数组: for( int i = 0; i < 10; i++){ circleArray[i] = new Circle(); }
时间: 2024-10-14 19:48:23