企业真题

一个”.java”源文件中是否可以包括多个类?有什么限制

来源:明?数据

是!

一个源文件中可以声明多个类,但是最多只能有一个类使用 public 进行声明。且要求声明为 public 的类的类名与源文件名相同。

Java 的优势

来源:阿??巴

  • 跨平台型
  • 安全性高
  • 简单性
  • 高性能
  • 面向对象性
  • 健壮性

常用的几个命令行操作都有哪些?(至少 4 个)

来源:北京数字??

Java 中是否存在内存溢出、内存泄漏?如何解决?举例说明

来源:拼?多

存在!

内存溢出:

  • 栈溢出:不正确的递归调用
  • 堆溢出:大对象、大数组

内存泄漏:主要是因为不能正确释放不需要的资源,长生命周期对象持有短生命周期对象的引用。

  • 静态字段:静态字段引起的内存泄漏比较常见,如果某个不需要的类中含有静态字段,那么就会造成内存泄漏。单例模式中如果持有其他的类引用就会造成内存泄漏,静态集合如 HashMapLinkedList 等持有的一些对象没有及时释放等。
  • ThreadLocal:ThreadLocal 引用一个对象使用完成后并没有被及时 remove 掉,线程一直存活的情况下(使用线程池时)就会发生内存泄漏。

大多时候内存泄漏都是由于开发人员的代码错误导致的,要防止这种内存泄漏,就需要编写必要的代码来配合垃圾回收器释放资源。

避免 Java 内存泄漏的一些最佳实践

  • 使用最新稳定版本的 Java
  • 尽量减少使用静态变量,使用完之后及时赋值 null,移除引用
  • 明确对象的有效作用域,尽量缩小对象的作用域。局部变量回收会很快。
  • 减少长生命周期对象持有短生命周期的引用
  • 各种连接应该及时关闭(数据库连接,网络,IO 等)
  • 使用内存泄漏检测工具,如 MAT、Visual VM、jprofile 等
  • 避免在代码中使用 System.gc()
  • 避免使用内部类

内存泄漏很难定位并修复,但是我们可以遵循以下几个步骤去定位并修复:

  • 确定是否存在内存泄漏,启用详细的 GC 跟踪。
  • 使用一些第三方插件进行分析(jprofile、Visual VM 等)
  • 检查调用堆栈是否有未释放的引用(分析 GC 状态)
  • 找出对象没有被垃圾回收的原因
  • 编写代码手动删除此类对象

如何看待Java是一门半编译半解释型的语言

来源:携?

拓展练习

System.out.println()System.out.print() 有什么区别?

  • System.out.println();:在最后会加换行;可以不传参数,代码仅换行
  • System.out.print(); :不会加换行;不传参数会报错

一个”.java”源文件中是否可以包括多个类?有什么限制?

答:可以。但最多只有一个类名声明为 public,与文件名相同。

拓展:程序中若只有一个 public 修饰的类。那么类名与源文件名可否不一致?

答:不能。

Something 类的文件名叫 OtherThing.java 是否可以?

class Something {  
	public static void main(String[] something_to_do) {      
		System.out.println("Do something ...");  
	}  
}

答案: 正确。从来没有人说过 Java 的 class 名字必须和其文件名相同。但 public class 的名字必须和文件名相同。

为什么要设置 path

答:目的是为了在控制台的任何文件路径下,都可以调用 JDK 指定目录下的所有指令。

JDK、JRE 和 JVM 的关系是什么?以及 JDK、JRE 包含的主要结构有哪些

  • JDK 包含 JRE,JRE 包含 JVM。
  • JDK = JRE + Java 开发工具
  • JRE = JVM + Java SE 核心类库

请对 public static void main(String[] args) 的每一个单词做解释?

  • public:公共的,用它修饰的类或成员在任意位置可见
  • static:静态的,用它修饰的方法,可以不用创建对象就可以调用
  • void:表示该方法没有返回值
  • main:Java 的主方法名,JavaSE 的程序入口
  • String[]:字符串数组,这是 main 方法的形参类型,可以通过命令行参数传值
  • args:这是 main 方法的形参名,如果要在 main 中使用命令行参数,可以遍历该 args 数组。

说明:刚开始学习 Java 上面每个单词意思不需要掌握。只需要知道这是程序入口,先“死记硬背”下来即可。