这个是可以的,一个“.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)
,这就是说,我们可以把代码转换为下面这种:
- 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个。