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
分享到:
相关推荐
3. **实体类(Mapping)**: 在使用Spring Data MongoDB时,通常需要创建Java对象(称为Document)来映射MongoDB的集合。这些类通常使用`@Document`注解来标识,并且可以通过`@Id`注解指定主键字段。 ```java @...
本文将深入探讨这两个主题,并结合“小试牛刀代码”这一主题,为开发者提供一些实用的见解和借鉴。 首先,SQL(Structured Query Language)是用于管理和处理关系型数据库的标准编程语言。它允许我们创建、查询、...
标题中的“JExcel / 小试牛刀”表明这是一个关于使用JExcel库进行电子表格操作的实践案例。JExcel是一个Java库,它允许开发者在Java应用程序中读取、写入和修改Excel文件,极大地简化了与Excel数据交互的工作。在这...
3. **MainPanel** - 主要用于展示图片的面板。 4. **RightPanel** - 位于主面板右侧,用于展示同一文件夹下的其他图片。 5. **BasePanel** - 位于窗口底部,包含导航按钮及图片信息的显示。 #### 功能细节 - **...
标题“spring-boot小试牛刀”表明我们即将探讨的是关于Spring Boot的基础知识和实践应用。Spring Boot是由Pivotal团队提供的一个用于简化Spring应用程序初始搭建以及开发过程的框架。它预设了许多默认配置,帮助...
**J2ME RMS小试牛刀** 在移动设备开发领域,Java 2 Micro Edition(J2ME)曾经占据着重要的地位,尤其在功能手机时代,它为开发者提供了跨平台的应用程序开发框架。J2ME中的Record Management System(RMS)是用于...
3. 控制器层:在Java中,控制器可能是Servlet或使用Spring MVC框架的Controller类。它们处理用户的HTTP请求,比如玩家的移动指令、释放炸弹的操作等,调用服务层方法进行处理,然后将响应数据(如更新的游戏状态)...
《log4j之小试牛刀》 在Java开发中,日志记录是不可或缺的一部分,它可以帮助我们追踪程序运行状态,定位错误,进行性能分析。Log4j作为一款广泛使用的日志框架,因其灵活的配置、强大的功能以及高效的性能而备受...
3. **JSP内置对象**:JSP提供了八种内置对象,如`request`、`response`、`session`和`application`等。这些对象对应于Servlet API中的请求、响应、会话和应用范围的对象,方便开发者处理HTTP请求和响应。 4. **JSP...
【标题】:“Hibernate小试牛刀” 在Java开发领域,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本篇内容将深入探讨Hibernate的基本概念、安装配置以及简单应用,帮助初学者快速...
SpringbootVueApplication.java resources static index.html vue-demo dist index.html static ... pom.xml ``` 项目运行 现在,我们可以运行 Spring Boot 项目,并访问 Vue 项目的静态文件。我们可以使用浏览器...
Java11的HttpClient新特性浅析 本文主要研究Java11的HttpClient的基本使用,包括了HttpClient的新特性、超时时间设置、认证机制等方面的内容。 一、HttpClient的新特性 在Java11中,HttpClient模块从jdk....
同样地,对于Java示例,通过`ant`工具编译生成的Java代码,之后运行`./JavaServer`和`./JavaClient simple`启动服务端和客户端。 **知识点五:Thrift的应用场景与扩展资源** Thrift不仅适用于构建分布式系统和...
**小试牛刀:** - 实践基本的数据类型操作,如整型、浮点型、字符型等。 - 编写简单的控制结构程序,如if-else语句、switch-case语句。 **挑战自我:** - 设计并实现一个简单的计算器程序,支持加减乘除四则运算。 ...
任务三:小试牛刀(学习Java语言基础) * 学习Java语言的基本语法和数据类型 * 了解变量、数据类型、运算符和控制流程 任务四:挑战选择(使用分支控制流程) * 学习使用分支控制流程 * 了解if语句和switch语句的...
数值转换 代码下载 初学者学编程,小试牛刀
【描述】:“很完美的模拟了windows计算器的运行,小试牛刀,用做课程设计。” 这个项目充分展示了如何用Java来构建一个功能完备的用户界面(UI),并且实现了与真实Windows计算器相似的操作逻辑。作为一个课程设计...
号码段计算器 例:00000001-0026000号码段,每段步进值为100,就可以通过...默认号码为8位数,最大也只能计算10000个号码段,原代码也在包内,这是初学JAVA的小试牛刀,各位也可以自己修改默认号码位数和最大计算号码段数.