java中的对象

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

java中的对象的相关文章

Java中的对象序列化

好久没翻译simple java了,睡前来一发.译文链接:http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在Java中,对象序列化指的是将对象用字节序列的形式表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或文件中,并且支持从数据库或文件中反序列化,从而在内存中重建对象: 为什么需要序列化 序列化经常被用于对象的网络传输或本地存储.网络基础设施和硬盘只能识别位和字节信息,而不能识别Jav

Java中字符串对象

Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new String("droid");,这两种方式我们在代码编写时都经常使用,尤其是字面量的方式.然而这两种实现其实存在着一些性能和内存占用的差别.这一切都是源于JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,这段内存被成为字符串常量池或者字符串字面量池. 工作原理 当代码中出现字

java中关于对象的复制

java中的对象复制有两种方法,可以简略的称为浅克隆和深克隆 浅克隆:调用object的clone接口实现克隆,之所以称为浅克隆,是因为在复制的过程中将对象的成员变量中的基本数据类型直接复制,但是对于引用数据类型只是将复制对象成员变量的引用传递过去,并没有对于新对象生成新的成员变量,需要注意的地方,object的clone()方法的访问修饰符是protect的,所以,需要在对象中重写clone方法,将其访问修饰符修改为public方法即可 深克隆:将当前对象以及对象的成员变量完整的复制,生成一个

浅谈Java中的对象和引用

浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是"对象和对象引用",很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起了解一下对象和对象引用之间的区别和联系. 1.何谓对象? 在Java中有一句比较流行的话,叫做"万物皆对象",这是Java语言设计之初的理念之一.要理解什么是对象,需要跟类一起结合起来理解.下面这段话引自<Java编程思想>中的一段原话: "按照通

Java中计算对象的大小

一.计算对象大小的方法 Java中如何计算对象的大小呢,找到了4种方法: 1.java.lang.instrument.Instrumentation的getObjectSize方法: 2.BTraceUtils的sizeof方法: 3.http://yueyemaitian.iteye.com/blog/2033046中提供的代码计算: 4.https://github.com/mingbozhang/memory-measurer提供的工具包: 本质上java.lang.instrument

关于java中任意对象强制转换为接口类型的问题

java中任意对象强转为接口类型都不会有编译错误 public class Apple implements Eatable{ public static void main(String args[]) { Drinkable drinkable = (Drinkable)new Apple(); } } interface Eatable{} interface Drinkable{} java中的类可以多实现接口,Java编译器无法判断该类是否实现了该接口所以不会有编译错误. 但是Java

浅谈Java中的对象和对象引用

浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起了解一下对象和对象引用之间的区别和联系. 1.何谓对象? 在Java中有一句比较流行的话,叫做“万物皆对象”,这是Java语言设计之初的理念之一.要理解什么是对象,需要跟类一起结合起来理解.下面这段话引自<Java编程思想>中的一段原话: “按照通俗的说法,每个对象都是某个类(class)的一个实

Java中String对象的不可变性

首先看一个程序 package reverse; public class Reverse { public static void main(String[] args) { String c1=new String("abc"); String c2=new String("abc"); String c3=c1; System.out.println("c1==c2:"+ (c1==c2)); System.out.println(&quo

【学习笔记】Java中生成对象的5中方法

概述:本文介绍以下java五种创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.使用Class类的newInstance方法 3.运用反射手段,调用java.lang.reflect.Constructor类的newInstance()实例方法. 4.调用对象的clone()方法. 5.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法. 一.使用new关键字 这是最常见也是最简单的创建对象的方式了.通过这种方式

java中String对象和String变量

java中String对象和String变量 (2011-12-27 20:40:27) 转载▼ 标签: it 最近在论坛上看到关于String s = new String("XYZ") + new String("XYZ");到底创建几个对象的讨论,觉得比较有意思,在此总结一下. 在JAVA中除了8种基本类型之外,其他的都是类对象及其引用.所以 "XYZ"在JAVA中是一个String对象,对于String类对象来说它的对象值是不能修改的,也