实际运用类的封装、赋值

来源:互联网 发布:python中迭代器 编辑:程序博客网 时间:2024/06/06 11:37

简单介绍一下:关于类的封装和赋值:

Java类的成员变量在被修饰为public、protected和包访问权限时,可以在不同层次上直接给成员变量赋值。但是,赋值的前提是:必须存在持有成员变量的对象。而对象的初始化必须调用构造函数,所以构造函数是必不可缺的。至于使用构造函数还是直接声明时给成员变量赋值,那就要看情况而定。如果创建的这个对象是不可变的,那么就必须使用构造函数初始化成员变量,反之,就无所谓。另外,直接给成员变量赋值,Java是不推荐的,因为这样会破坏它的封装性。所以,建议在构造函数或提供setters方法对变量赋值。

成员变量的赋值一般通过构造函数直接赋值一般的话都是一些常成员变量,final关键字开头的其他的时候基本上都是用构造函数,构造函数试用于动态创建对象。基于对象编程的思想,是不赞成直接给类里面的变量直接赋值的。直接赋值就固定死了,构造函数去赋值就可以根据写进来的参数去赋值。

给成员变量赋值的方式有3种

构造函数初始化:Person(String name){this.name=name;} 
set初始化:public void setName(String name){this.name=name;}
定义成员变量时手动赋值。name="wangqing";

下面看一个赋值的例子

public class TestClass{    private int i=giveMeJ();    private int j=10;    private int giveMeJ(){        return j;    }    public static void main(String args[]){        System.out.println((new TestClass()).i);    }}

java 的对象初始化顺序决定的.
当执行 new TestClass()时,(实际上是要执行默认的构造方法),先是给成员变量分配空间并赋默认值,i=0,j=0.
之后程序会上溯类的父类初始化,这个类的父类是 Object.
从 Object里回来后,先给i j显式赋值,这是调用giveMeJ()方法给i赋值,返回j的值0。再给j赋值10。
之后执行空构造方法,对象产生完。
所以最后输出 new TestClass().i=0.

尽可能的缩小变量的作用域

我们在写代码时有一条原则,尽可能的缩小变量的作用域。当然相对应的实际情况,那就是几乎所有的软件都必然存在一些覆盖整个运行周期的变量,这些变量也需要尽可能的

。越是这些变量,越有可能用到这条原则。


Get和Set的应用

实际应用的时候发现的各种应用问题

1 private封装的一个最主要的用途:封装字段 提高代码的安全性,修改维护方便,实现代码分层。

2 用它实现逻辑、定义逻辑,可以减低耦合,这类变量方法灵活性高,基本上可以任意重构、修改。

3 将所有属性定义为priate,用get、set方法可以控制属性的类型,将来就算修改属性的类型,也不影响接口API。

4 一些需要结合配置文件才能起作用的工程,get set方法的作用就明显起来了。通过get set方法,你可以把变量私有化,只暴露方法,这样就能起到保护配置文件的作用,比如禁止读、禁止写等操作。

5 所有的属性get和set方法写出来,在用到的地方直接用get方法获取,而且在逻辑层的判断也会很清晰。

6 比如你想在 取值赋值 时 添加其他操作,那么直接在get set方法里添加就ok了,多方便。

7 比如你想外部类只能get,只允许类内部赋值,那么只开放get方法就ok了,封装性考虑。

8 比如你想限制成员变量的可访问范围,用get set方法更加方便,编译时虚拟机还能自检。

9 比如说有个类要实现实现线程安全,他的某个成员变量可能不允许并发修改,使用set方法可以给set上锁,保证只有一个线程可以修改该成员变量,使用set方法方便以后进行线程安全的扩展。当让扩展采用get set方法的扩展是体现在很多方面的,以上只是一例。

10 封装才能体现面向对象的编程思想,如果你把每个属性都使用public进行获取和设置,那样的话属性一旦多的话,看上去也会很乱,如果封装起来的话可以抽象出一个类来表示,所有的属性get和set方法写出来,在用到的地方直接用get方法获取,而且在逻辑层的判断也会很清晰。面向对象编程思想!

11 你在定义浏览器中的默认的每一页中显示的数据为10行数据,你用public static去修饰了,我就可以通过new一个类的对象去修改你的这个默认值。但是你用private去修饰时(也就是对其进行了封装),你要setter和getter去改变,改变的只是你new出来。

12 public static修饰过的变量在虚拟机里运行的时候确实是独一份,建议用private修饰,如果是保护字段,用final或者const限制。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 快递写错地址但已经发货了怎么办 快递写错电话但已经发货了怎么办 微信添加好友功能被限制怎么办 qq号被冻结了限制解封怎么办 被别人强制拉入qq群怎么办 qq群里的图片过期了怎么办 q附近人不能关注不能发信息怎么办 qq畅聊之火掉了怎么办 打印机打印时上面空白留太多怎么办 发短信一直空格里面写0怎么办 网贷获取我新手机号通讯录怎么办 系统音频驱动异常或未安装怎么办 附近功能已屏蔽你的qq好友怎么办 新申请的qq号忘了怎么办 刚申请的qq号忘了怎么办 以前申请的qq号忘了怎么办 小孩玩手机游戏扣费了怎么办 手机qq好友头像显示不出来怎么办 qq的一些重要数据被清理怎么办 华为p9微信听筒声音小怎么办 win10我的电脑图标没了怎么办 小米5x里的微信头像不清楚怎么办 微信头像换了总是模糊怎么办 找到老公暧昧对象的微信怎么办 朋友欠我钱一直拖找借口怎么办 陌陌附近的人不按距离排序怎么办 老婆一直要管我的钱怎么办 老公不肯把钱交给老婆管怎么办 愿意和做朋友不愿意做情侣怎么办 欠信用卡碰到第三方不愿协调怎么办 qq密码忘记了申诉不回来怎么办 当你老公烦你了你该怎么办 自己有漂亮媳妇还经常想去嫖怎么办 微信号封了找不到好友解封怎么办 别人总是提起你的黑历史怎么办 换了手机微信登录不上怎么办 qq不小心清空了聊天记录怎么办 人家介绍了外地媳妇跑了怎么办 火锅想吃香菜牛肉没有签子串怎么办 想读外省大学但家人反对怎么办 13岁被同学忽视他不知道怎么办