第三周知识点总结

本周测试题难点部分归纳

封装:隐藏实现细节的过程:1.类的成员变量变成只读和只写2.类可以对储存在成员变量中的内容有一个整体控制,类的用户不需要知道类是如何储存数据的。

继承:通过扩展一个已有的类,并继承该类的属性和行为1.代码的可重用性,2.父类的方法和属性可以用于子类,3.子类可以扩展父类的属性和方法,

多态:相同行为,不同实现,1.静态多态:程序在编译时系统就能决定调用那个方法,即重载,动态多态:在运行期才知道调用哪一个里面的方法即重写和动态绑定。

抽象:不能产生对象,即不能被实例化,必须被子类继承,有抽象方法的类一定是抽象类,但为抽象类的不一定有抽象方法,抽象方法必须被子类重写或者继续抽象。


 数组有没有length()这个方法? String有没有length()这个方法?

数组没有,string有,返回字符串长度。

一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

这个是可以的,一个“.java”源文件里面可以包含多个类,但是只允许有一个public类,并且类名必须和文件名一致。

每个编译单元只能有一个public 类。这么做的意思是,每个编译单元只能有一个公开的接口,而这个接口就由其public 类来表示。
你可以根据需要,往这个文件里面添加任意多个提供辅助功能的package 权限的类。但是如果这个编译单元里面有两个或两个以上的public 类的话,程序就不知道从哪里导入了,编译器就会报错。 

什么是GC?什么样的对象可以被GC回收?程序员如何召唤GC?一旦召唤是否马上回收?

GC即:gabage collection,垃圾回收的意思。
没有引用指向的对象会被GC回收,程序员可以通过System.gc()、run.gc()或者GC所支持的其它调用方法召唤GC。
但是召唤过后,GC什么时候处理还是不明确。

JRE是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
JDK是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具软件。如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK

new String()究竟创建几个对象?

1. 由来

遇到一个Java面试题,是关于String的,自己对String还有点研究?下面是题目的描述:

在Java中,new String("hello")这样的创建方式,到底创建了几个String对象?

题目下答案,各说纷纭,有说1个的,有说2个的。我觉得都对,但也都不对,因为要加上一定的条件,下面来分析下!

2. 解答

2.1. 分析

题目中的String创建方式,是调用String的有参构造函数,而这个有参构造函数的源码则是这样的public String(String original),这就是说,我们可以把代码转换为下面这种:


String temp = "hello";  // 在常量池中

String str = new String(temp); // 在堆上

   
   
  • 1
  • 2
  • 3
  • 4
  • 5

这段代码就创建了2个String对象,temp指向在常量池中的,str指向堆上的,而str内部的char value[]则指向常量池中的char value[],所以这里的答案是2个对象。(这里不再详述内部过程,之前的文章有写,参考深入浅出Java String)

那之前我为什么说答案是1个的也对呢,假如就只有这一句String str = new String("hello")代码,并且此时的常量池的没有"hello"这个String,那么答案是两个;如果此时常量池中,已经存在了"hello",那么此时就只创建堆上str,而不会创建常量池中temp,(注意这里都是引用),所以此时答案就是1个。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值