Java小试牛刀3
1、为什么在面向对象程序中,调用类的成员方法可以操作该类的属性?
答:1)、在一个类中无论属性的访问修饰成什么(例如最低访问修饰private),只要是成员方法的局域之外,都能被所有成员方法操作,当然如果属性是定义在方法局部之内,其它方法是有能访问到的。
2)、正是因为上一个特点,所以我们可以通过调用类的成员方法来操作该类的,其实这是通过间接的方式来操作其它类中的方法,而非直接操作其它类的属性;但这里有一个前提是,类中的方法是可见的,如果不可见谈何操作类的属性呢!
2、Object类中所有方法重写的意义?
答:这里只是通过一个普通类举例,与重写Object类的意义相同。
1)、重写的前提是有继承。
2)、重写可以修改父类已有的方法:
首先,修改方法的目的可以是扩展父类的方法功能;例如:Student类的对象有一个paly()方法,那么当College继承Student之后,我们可以重写父类Student中的paly()这个方法,这样就相当于扩展了paly()方法的功能。
另外,修改父类方法可以屏蔽父类中的方法;例如:把paly()重写后,方法体不写任何内容,这样paly()方法就没有任何作用了。
3、抽象类中的方法可不可以实例化(有声明、有定义)?
通过实例证明抽象类中的普通方法可以声明和定义,但是抽象方法是不可以实现方法体,只能声明;同时抽象类是不能直接创建对象,就如上图所示,编辑器会提示错误!
4、验证main()、静态代码块、初始化代码块哪个执行次序?
通过实例验证静态代码块及静态变量比main()先,也发现在静态代码块和静态变量中不能使用类中其它普通成员变量值,从而也间接的证明,静态代码块和静态变量比普通变量和main()要先执行。
5、实现一个单件模式的类:
6、访问修饰符
1.transient 关键字
首先是JAVA的序列化,简单来说就是将某一个类存储以文件形式存储在物理空间,下次再从本地还原的时候,还可以将它转换回来,这种形式便利了网络上的一些操作。
序列化只能保存对象的非静态成员交量,不能保存任何的成员方法和静态的成员变量,而且串行化保存的只是变量的值,对于变量的任何修饰符都不能保存。
以文件形式描述某些信息时,容易涉及到安全问题,因为数据位于Java运行环境之外,不在Java安全机制的控制之中。对于这些需要保密的字段,不应保存在永久介质中,或者不应简单地不加处理地保存下来 ,为了保证安全性。应该在这些字段前加上transient关键字。它的意思是临时的,即不会随类一起序列化到本地,所以当还原后,这个关键字定义的变量也就不再存在。
如果TransTest 类的一个对象被序列化,i的内容不被保存,但j的将被保存。
Java代码
class TransTest {
transient int i; //不需要保存
int j; //需要保存
2. volatile关键字 不常用
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。
这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。
而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。
3、Synchronize 关键字
先提出问题,如果开启多线程同时操作同一实例变量,Thread-0线程从主内存中取出的值a 为 1,然后a++; Thread-1线程也从主内存中取出的值 a 进行 a+=2操作;Thread-0存入2到主内存中,Thread-1也存入,这样就覆盖了Thread-0存入的值.
原因是在JAVA 的内存模型中,是每一个进程都有一个主内存,每个线程都有自己的内存,线程从主内存取得数据,计算后再存回到主内存中.
解决这个问题就可以使用 synchronize关键字.
使用synchronized修饰此方法后,把下面的这几个步骤当作一个原子操作:取数据,操作数据,存数据。原子操作是不能够被打断的,所以就保证了数据的一致性,这样在同一时间有线程再执行,虽然在效率上比较有影响,但是能够保证在同一时间只有一个线程能够访问到这一块内存单元。
7、为什么final不能修饰构造方法?
final使得被修饰的变量"不变",但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变。那么如果用final来修饰构造方法是没有意义的。
8、Visio画图
- 大小: 98.2 KB
- 大小: 100.3 KB
- 大小: 75.6 KB
- 大小: 84.7 KB
- 大小: 70.2 KB
- 大小: 58.9 KB
- 大小: 128.3 KB
分享到:
相关推荐
NULL 博文链接:https://hbxflihua.iteye.com/blog/2370781
java-swing编程小试牛刀之图片查看器讲解文档,与源码一起使用效果最好。
基于MVC设计模式下完成的Java泡泡堂项目,不玩虚的,导入本项目即可运行!
本文主要研究一下Java11的HttpClient的基本使用。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
这个日历也是本人初学java时小试牛刀的作品,虽然比不上什么大的日历,但是却能激发初学者对java的兴趣!
数值转换 代码下载 初学者学编程,小试牛刀
很完美的模拟了windows计算器的运行,小试牛刀,用做课程设计。
JAVA源码.............牛刀小试
号码段计算器 例:00000001-0026000号码段,每段步进值为100,就可以通过...默认号码为8位数,最大也只能计算10000个号码段,原代码也在包内,这是初学JAVA的小试牛刀,各位也可以自己修改默认号码位数和最大计算号码段数.
小试牛刀,请勿见怪,只针对含有X的多项式
小试牛刀,看了尚学堂的tank后,自己的一点点改进! serverTank 是服务器 ClientTank 是客户端 NetClient 是客户端用来处理网络的 在一台计算机上实验udp端口不能相同 先启动服务器,再启动客户端,按c连接服务器 0 ...
1.用ireport软件设计好报表,生成扩展名是".jrxml"和".jasper"文件。 2. src/main/java/com/jasper/example下面...3. 其它的是spring运行jasper文件。 参考网站:http://blog.csdn.net/hj7jay/article/details/51686341
blog 源码 java blog 开发随笔, 配置总结,小试牛刀 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 12、
小试牛刀的做品 拿来当毕业设计还是没问题
一、知识预备1、树2、树的相关术语介绍1、二叉树2、二叉树类型二、二叉树实操(我没有说脏话)1、定义二叉树的结点2、遍历二叉树(四种方法)三、小试牛刀leetcode题目:反转二叉树 一、知识预备 1、树 树(Tree)...
第2章 牛刀小试只selenium ide 第3章 selenium玩转页面元素 第4章 初始selenium webdriver 第5章 玩转selenium webdriver 第6章 selenium玩转android 第7章 selenium玩转IOS 第8章 selenium玩转Raspberry pi 第9章 ...
先牛刀小试一下,混淆自己本地的工程,支持jar,war,ear,目录(class)等方式 4、proguard常见参数标签的用法在《proguard标签的用法.pdf》 5、混淆只是 proguard 功能之一,其它还有压缩、优化等 6、proguard混淆首先...
正巧不久前笔者对J2ME下了一番功夫,正想借这个机会小试牛刀.选用J2ME作为开发语言还有一个原因就是目前Java开发大行其到,无限增殖业务迅猛发展,J2ME的应用日渐活跃起来,也希望我的这篇文章能够为J2ME知识的普及...
在这篇教程中,我们会用 Python 的 PyQt 框架编写...牛刀小试 让我们从最简单的 PyQt 的 Webkit 用例开始吧:输入 url,打开窗口并在窗口中加载页面。 这个例子十分短小,连 import 语句和空行在内也只有 13 行代码。
安卓java读取网页源码 yx_im 网易云信IM前端web实现 WEB ...牛刀小试 使用该种模式,开发者只需要通过工程独立抽出的公共样式、配置文件、路由结构,就可以完成简单的换APPKEY、换界面皮肤、换LOGO等