核心Java面试问题和答案(四)
面试问题和答案 核心Java(四)
Ijava中的三元运算符是什么?
Java三元运算符是唯一一个有三个操作数的条件运算符。
它是对if-then-else语句的一个替换,在java编程中使用了很多。
我们可以使用三元运算符if-else条件,甚至可以使用嵌套的三元运算符交换条件。
在java三元操作符中可以找到一个示例。
II超级关键字做什么?
当您在子类中覆盖了方法时,超级关键字可以被用来访问超类方法。
我们可以使用super关键字在子类构造函数中调用超类构造函数,但在这种情况下,它应该是构造函数方法中的第一个语句。
package com.journaldev.access;
public class SuperClass {
public SuperClass(){
}
public SuperClass(int i){}
public void test(){
System.out.println("super class test method");
}
}
超级关键字的使用可以在子类的实现中看到。
包com.journaldev.access;
公共类子类继承超类
公共ChildClass(String str){
//使用超级关键字访问超类构造函数
超级();
/ /子类方法的访问
测试();
//使用super来访问超类方法
super.test();
}
@Override
公共空白测试(){
system . out。
println(“儿童类测试方法”);
}
}
III break and continue ?
我们可以使用break语句来终止for循环,也可以使用while循环。
我们可以在switch语句中使用break语句,以退出switch案例。
您可以在java break中看到break语句的示例。
我们可以使用中断与标签来终止嵌套循环。
continue语句跳过了for循环的当前迭代,也跳过了while循环。
我们可以使用标签的continue语句来跳过最外层循环的当前迭代。
IV 关键字
这个关键字提供对当前对象的引用,它主要用于确保使用对象变量,而不是使用相同名称的本地变量。
//构造函数(constructor)
public Point(int x, int y) {
this.x = x;
this.y = y;
}
我们还可以使用这个关键字从构造函数调用其他构造函数。
public Rectangle() {
this(0, 0, 0, 0);
}
public Rectangle(int width, int height) {
this(0, 0, width, height);
}
public Rectangle(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
V 默认构造函数是什么?
没有一个类的参数构造函数被称为默认构造函数。
当我们不为类定义任何构造函数时,java编译器会自动为类创建默认的无args构造函数。
如果定义了其他构造函数,那么编译器就不会为我们创建默认的构造函数。
VI 我们可以试一试没有挡块吗?
是的,我们可以使用try-finally语句,因此避免了catch块。
VII 垃圾收集是什么?
垃圾收集是查看堆内存的过程,确定哪些对象在使用,哪些对象没有,并删除未使用的对象。
在Java中,回收内存的过程是由垃圾收集器自动处理的。
我们可以使用代码runtime().gc()或使用效用方法system.gc()来运行垃圾收集器。
有关堆内存和垃圾收集的详细分析,请阅读Java垃圾收集。
VIII什么是序列化和反序列化?
我们可以将一个Java对象转换为一个称为序列化的流。
一旦将对象转换为流,就可以将其保存为文件或发送到网络或在套接字连接中使用。
该对象应该实现Serializable接口,我们可以使用java.io。
ObjectOutputStream将对象写入文件或任何OutputStream对象。
更多地阅读Java序列化。
将通过序列化方式创建的流数据转换为对象的过程称为反序列化。
更多地阅读JAVA/265.html">Java反序列化。
IX 如何通过命令提示运行JAR文件?
我们可以使用java命令运行一个jar文件,但是它需要jar清单文件中的主类条目。
主类是jar的入口点,java命令使用它来执行类。
X 系统类的使用是什么?
Java系统类是核心类之一。
用于调试信息的最简单方法之一是system.out.print()方法。
系统类是final的,因此我们不能子类化并通过继承来覆盖它的行为。
系统类不提供任何公共构造函数,所以我们不能实例化这个类,这就是为什么它的所有方法都是静态的。
系统类的一些实用方法是用于数组复制、获取当前时间、读取环境变量。
在Java系统类中阅读更多信息。
XI运算符关键字是什么?
我们可以使用instanceof关键字来检查对象是否属于类。
我们应该尽量避免使用它。
示例使用:
public static void main(String args[]){
Object str = new String("abc");
if(str instanceof String){
System.out.println("String value:"+str);
}
if(str instanceof Integer){
System.out.println("Integer value:"+str);
}
}
因为str在运行时是String类型的,首先if语句的值为true,第二个为false。
XII我们可以使用带有开关的字符串吗?
Java 7的一个特性是改进了允许字符串的开关情况。
因此,如果您使用的是Java 7或更高版本,您可以在开关-case语句中使用字符串。
XIII Java是通过值传递还是通过引用传递?
这是一个非常令人困惑的问题,我们知道对象变量包含了堆空间中的对象的引用。
当我们调用任何方法时,将传递这些变量的副本,并将其存储在方法的堆栈内存中。
我们可以测试任何语言,无论它是通过引用传递的,还是通过一个简单的通用交换方法传递的值,以了解更多的读Java是通过值传递的,而不是通过引用传递的。
XIV 堆和堆栈内存之间的区别是什么?
Heap和堆栈记忆之间的主要区别是:
堆内存被应用程序的所有部分使用,而堆栈内存只被一个执行线程使用。
每当创建一个对象时,它总是存储在堆空间中,堆栈内存中包含对它的引用。
堆栈内存只包含本地原始变量和堆空间中的对象的引用变量。
堆栈中的内存管理是用LIFO方式完成的,而在堆内存中则更复杂,因为它在全局中使用。
更多请阅读Java堆和堆栈内存。
JXV ava编译器存储在JDK、JRE或JVM中?
java编译器的任务是将java程序转换成字节码,我们有javac可执行的可执行文件。
因此它必须存储在JDK中,我们不需要它在JRE中,而JVM只是规范。
下列程序的输出将是什么?
静态方法在类
package com.journaldev.util;
public class Test {
public static String toString(){
System.out.println("Test toString called");
return "";
}
public static void main(String args[]){
System.out.println(toString());
}
}
代码不会编译,因为我们不能使用静态关键字的对象类方法。注意对象类有toString()方法。
您将得到编译时错误,因为“这个静态方法不能将实例方法从对象中隐藏”。原因是静态方法属于类,
因为每个类都是对象,所以我们不能在类中有相同的方法。如果将方法名从toString()更改为超类对象中不存在的其他内容,则不会出现此错误。
静态方法调用
package com.journaldev.util;
public class Test {
public static String foo(){
System.out.println("Test foo called");
return "";
}
public static void main(String args[]){
Test obj = null;
System.out.println(obj.foo());
}
}
当我们在对象上调用一个NULL的方法时,我们都看到了NullPointerException。
但是在这里,这个程序将会工作并打印出“测试foo”。
这样做的原因是java编译器代码优化。
当将java代码编译为生成的字节代码时,它会发现foo()是一种静态方法,应该使用类来调用。
因此,它将方法调用obj.foo()更改为test.foo(),因此不会出现NullPointerException。
http://www.itemperor.com/a/JAVA/258.html
原文链接:http://www.jxszl.com/biancheng/JAVA/446610.html