封装【java】

一、封装的定义

先来看一个简单的类结构:

public class student {

  String name;

int score;

int age;

String adr;

double gpa;

public void setName(String name){

this.name=name;

}

public String getName(){

return name;

 }

}

public class main {

public static void main(String[] args){

student wyh=new student();

wyh.name="温宇辉";

wyh.score=100;

wyh.age=20;

wyh.adr="广东";

wyh.gpa=4.05;

}

此时对类的默认访问属性成员进行初始化,这样看好像没有什么问题,但是在大型程序的运行过程中这样的数据是不安全的,因为访问权限太大了,外界中本包里的所有方法都能访问。因此我们需要对包中的数据进行封装,即使用private关键字进行访问修饰。

封装的具体定义就是:隐藏实现细节,仅对外提供访问的接口。内部的具体实现细节并不关心。

二、封装后私有成员的使用

但是在进行数据成员私有化后,我们应该怎么进行使用其中的数据成员呢?以下面这个程序为例:

public class student3 {

private String  name;

public void setName(String name){

this.name=name;

}

public String getName(){

return name;

 }

}

public class main {

public static void main(String[] args){

student3 xx=new student3();

xx.setName("xx");

System.out.println(xx.getName());

}

输出结果:xx

不难看出,对外的接口是setName和getName两个函数,在使用的时候,需要在main函数中调用它们,才能使用私有成员name。

  • 一行代码搞定对象的创建与属性初始化

但是这又有一个问题:要是我类中的私有成员很多,难道我要一个个去编写set函数和get函数再调用吗?如果真是如此,那未免也太复杂了。要想更方便地解决这个问题,我们首先要知道类中的构造方法。

格式:public 类名(){}

对于每个类而言,都默认具有一个隐式的空参数构造方法。这个方法,在创建对象时会自动调用。默认的构造方法不能完成对象数据成员的初始化, 只能给对象创建一标识符, 并为对象中的数据成员开辟一定的内存空间如果显式写了任意一个构造方法,空参数构造方法都会被覆盖。通过显性地编写,我们便可以解决上述问题。

实例如下:

public class student2 {

private String name;

private int score;

private int age;

private String adr;

private double gpa;

//访问修饰符: 限制访问范围 对象的 子类的

//普通方法 属性 进行 private 对象不能调用

//构造方法 private 在这个类的范围之外 对象不能创建对象

public student2(String name,int score,int age,String adr,double gpa){

this.name=name;

this.score=score;

this.age=age;

this.adr=adr;

this.gpa=gpa;

System.out.println("赋值流程结束 !!");

} 

public class main {

public static void main(String[] args){

student2 w=new student2("哈哈",99,21,"广西",3.9);

}

}

需要注意的是,在创建对象的时候,必须按照构造函数中的参数顺序来给具体的参数。

  • 单例模式(一个类中只能有一个对象)

要想实现单例模式,必须完成以下几个步骤:

①对构造方法进行私有化;

②在这个类的内部创建这个类(唯一)对象;

③提供一个对外的对象出口。

下面是一个简单的实例:

public class king {

//创建一个king类的对象

private static king fa=new king();

// 对构造方法进行私有化

private king(){}

//提供一个对外的对象出口

public static king getking(){

return fa;

}

//static作用是不需要创建对象就可以调用这个方法

public void showMessage(){

  System.out.println("Hello World!");

}

}

public class main {

public static void main(String[] args){

//king wd=new king();

//编译时错误:构造函数king()是不可见的

king wd=king.getking();

wd.showMessage();

}

}

使用单例模式好处在于可以节省内存,节约资源,对于一般频繁创建和销毁对象的可以使用单例模式。因为它限制了实例的个数,有利于java垃圾回收。好的单例模式也能提高性能。

总结:这篇文章是作者初学时的一些见解,也参考了许多网上的资料,如有不对欢迎批评指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值