Java - 类的封装、构造方法和匿名对象

一、面向对象的封装性

封装(encapsulation)又叫隐藏实现(Hiding the implementation)。就是只公开代码单元的对外接口,而隐藏其具体实现。比如手机,手机的键盘,屏幕,听筒等,就是其对外接口。你只需要知道如何按键就可以使用手机,而不需要了解手机内部的电路是如何工作的。封装机制就像手机一样只将对外接口暴露,而不需要用户去了解其内部实现。

开发建议:以后在定义类的时候,所有的属性都要编写private封装,封装之后的属性如果需要被外部操作,则编写setter、getter方法去实现。

二、类中的构造方法

先来看对象的产生格式:

①类名称 ②对象名称 =new ④类名称();

①类名称:规定了对象的类型。即:对象可以使用哪些属性和方法都是由类定义的;
②对象名称:如果需要使用对象,需要有一个名称,这是一个唯一的标记;
③new:分配新的堆内存空间;
④类名称():调用了名称和类名称相同的方法,这就是构造方法。

实际上,构造方法一直在被我们调用,但我们并没有去定义它,为什么能够使用呢?这是因为在整个Java开发中,为了保证程序可以正常执行,即便用户没有定义任何构造方法,也会在程序编译后自动为类增加一个没有参数,方法名称与类名称相同,没有返回值的构造方法。

构造方法的定义:方法名称和类名称相同,没有返回值声明。

    //无参,无返回值的构造方法
    public Book() {

    }

如果在Book类中没有定义以上的构造方法,那么也会自动生成一个无参,无返回值的构造方法。

我们再看:

package com.wz.classandobj;

class Book{

    //无参,无返回值的构造方法
    public Book() {
        System.out.println("无参构造方法");
    }

}

public class TestDemo {
        public static void main(String args[]) {
            Book book = null;//声明对象
        }
}

//    运行,什么也没有打印。 

在主方法中加入实例化对象的代码:

public class TestDemo {
        public static void main(String args[]) {
            Book book = null;//声明对象
            book = new Book();//实例化对象
        }
}

运行: 打印 --> 无参构造方法

以上说明,构造方法是在对象使用关键字new实例化的时候被调用。

构造方法与普通方法最大的区别是:
构造方法在实例化对象(new)的时候只调用一次,而普通方法是在实例化对象之后可以随意调用多次。

在实际开发中,构造方法的作用是在类对象实例化的时候设置属性的初始化内容,范例如下:

package com.wz.classandobj;

class Book{

    private String title;
    private double price;

    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public double getPrice() {
        return price;
    }


    public void setPrice(double price) {
        this.price = price;
    }

    public void getInfo(){
        System.out.println("图书的名称:"+title+" 图书的价格:"+price);
    }
}

public class TestDemo {
        public static void main(String args[]) {
            Book book = new Book("Java开发",89.9);//设置属性的初始化内容
            book.getInfo();

        }
}

//运行结果: 图书的名称:Java开发 图书的价格:89.9

如果一个类中已经明确定义了一个构造方法,则无参构造方法将不会自动生成。而且,一个类之中至少存在一个构造方法。另外,既然构造方法也属于方法,那么构造方法也可以重载,但是由于构造方法的特殊性,所以在构造方法重载时注意其参数的类型及参数的个数即可。

范例如下:

package com.wz.classandobj;

class Book{

    private String title;
    private double price;

//如果调用这个构造方法,因为没有对属性设置,所以
//输出值为默认值:title == null price == 0.0
//只要写了构造方法,编译器就不会生成默认构造方法
    public Book() {
        System.out.println("无参的构造方法");
    }


    public Book(String title) {
        this.title = title;
        System.out.println("有一个参数的构造方法");
    }


    public Book(String title, double price) {
        this.title = title;
        this.price = price;
        System.out.println("有俩个参数的构造方法");
    }

    public void getInfo(){
        System.out.println("图书的名称:"+title+" 图书的价格:"+price);
    }
}

public class TestDemo {
        public static void main(String args[]) {
            Book book1 = new Book();
            book1.getInfo();

            Book book2 = new Book("Java开发");
            book2.getInfo();

            Book book3 = new Book("Java开发",89.9);
            book3.getInfo();

        }
}

运行结果:

无参的构造方法
图书的名称:null 图书的价格:0.0
有一个参数的构造方法
图书的名称:Java开发 图书的价格:0.0
有俩个参数的构造方法
图书的名称:Java开发 图书的价格:89.9

在进行构造方法重载时有一个编写建议:所有重载的构造方法按照参数的个数由多到少,或者是由少到多排列。

三、类中的匿名对象

没名字的对象称为匿名对象,对象的名字按照之前的内存关系来讲,在栈内存之中,而对象的具体内容在堆内存之中保存,这样,没有栈内存指向堆内存空间,就是一个匿名对象。

范例:

package com.wz.classandobj;

class Book{

    private String title;
    private double price;

    public Book(String title, double price) {
        this.title = title;
        this.price = price;
        System.out.println("有俩个参数的构造方法");
    }

    public void getInfo(){
        System.out.println("图书的名称:"+title+" 图书的价格:"+price);
    }
}

public class TestDemo {
        public static void main(String args[]) {
            //匿名对象
            new Book("Java开发",89.9).getInfo();

        }
}

运行结果:
	有俩个参数的构造方法
	图书的名称:Java开发 图书的价格:89.9

匿名对象由于没有对应的栈内存指向,所以只能使用一次,一次之后就将成为垃圾,并且等待被GC回收释放。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
水资源是人社会的宝贵财富,在生活、工农业生产中是不可缺少的。随着世界人口的增长及工农业生产的发展,需水量也在日益增长,水已经变得比以往任何时候都要珍贵。但是,由于人的生产和生活,导致水体的污染,水质恶化,使有限的水资源更加紧张。长期以来,油物质(石油物质和动植物油)一直是水和土壤中的重要污染源。它不仅对人的身体健康带来极大危害,而且使水质恶化,严重破坏水体生态平衡。因此各国都加强了油物质对水体和土壤的污染的治理。对于水中油量的检测,我国处于落后阶段,与国际先进水平存在差距,所以难以满足当今技术水平的要求。为了取得具有代表性的正确数据,使分析数据具有与现代测试技术水平相应的准确性和先进性,不断提高分析成果的可比性和应用效果,检测的方法和仪器是非常重要的。只有保证了这两方面才能保证快速和准确地测量出水中油污染物量,以达到保护和治理水污染的目的。开展水中油污染检测方法、技术和检测设备的研究,是提高水污染检测的一条重要措施。通过本课题的研究,探索出一套适合我国国情的水质污染现场检测技术和检测设备,具有广泛的应用前景和科学研究价值。 本课题针对我国水体的油污染,探索一套检测油污染的可行方案和方法,利用非分散红外光度法技术,开发研制具有自主知识产权的适合国情的适于野外便携式的测油仪。利用此仪器,可以检测出被测水样中亚甲基、甲基物质和动植物油脂的污染物量,为我国众多的环境检测站点监测水体的油污染状况提供依据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值