实际运用类的封装、赋值
来源:互联网 发布: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限制。
- 实际运用类的封装、赋值
- 实际开发运用的工具类优化。
- fusioncharts的实际运用
- AcionBar的实际运用
- 赋值语句的运用
- 赋值语句的运用
- hash算法的实际运用
- 实际开发运用的工具类优化(二)。
- JDBC工具类的封装以及运用
- 复合应用的实际运用情况
- DECODE函数的用法和实际运用
- highCharts实际运用的问题集锦
- 实际开发中关于autorelease的运用
- stm32实际运用中遇到的问题
- Java 生产者 与 消费者 的实际运用
- storm的实际运用框架,过程
- tinyxml2实际运用的一类场景
- @interface自定义注解的实际运用
- js循环绑定事件解决方案
- iconfont使用
- Java —— Hibernate4 No Session found for current thread
- js中对字符串的操作
- Android 之ActivityThead、ActivityManagerService 与activity的管理和创建
- 实际运用类的封装、赋值
- C++访问限定符
- pig语法学习 FOREACH GENERATE group AS
- winpython,安装与使用(anaconda)
- 物联网操作系统
- android JNI 与cocos结合篇(二)
- 微信图文发送
- 诺基亚引领新一代5G技术布局物联网
- android开发split的方法在String中的特殊使用