来源:牛客网
在牛客网做题,收录一些题目与优秀回答。
1,有如下一段代码,请选择其运行结果()
1
2
3
4
5
6
7
8
9
10
|
public
class
StringDemo{
private
static
final
String MESSAGE=
"taobao"
;
public
static
void
main(String [] args) {
String a =
"tao"
+
"bao"
;
String b=
"tao"
;
String c=
"bao"
;
System.out.println(a==MESSAGE);
System.out.println((b+c)==MESSAGE);
}
}
|
true true
false false
true false
false true
链接:https://www.nowcoder.com/questionTerminal/10afeae4a5c24a35898c0771fb5995b1
来源:牛客网
2,static类型的变量存在内存的哪个位置
方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
3,final变量定义是需要初始化吗?
被final修饰的变量必须要初始化,赋初值后不能再重新赋值。
被final修饰的变量必须显示的初始化,初始化可以以三种方式:1)定义时初始化,2)在构造器中设置值,3)在非静态块中为final实例变量设置值。
4,Java中接口和抽象类的区别是什么?
抽象类可以有构造函数,接口不可以有构造函数
抽象类中可以有普通成员变量,接口中没有普通成员变量,只能有常量
抽象类中的方法可以被static修饰,接口中的方法不可以被static修饰
抽象类中可以有普通方法和抽象方法,接口中的方法全是抽象方法
抽象中的方法可以被public,protected等修饰符修饰,接口中的方法全都是public abstract的方法,如果省略修饰符,则默认的也都是public abstract修饰
一个类只能继承一个抽象类,接口可以被多实现,即一个类只能继承一个类,可以实现多个接口
5,抽象类和接口如何选择?
如果要创建不带任何方法定义和成员变量的基类,就应该选择接口而不是抽象类;
如果知道某个类是基类,第一个选择的应该是让它成为接口,只有必须要方法定义和成员变量时才可以选择抽象类,因为抽象类允许存在一个或多个被具体实现对的方法,只要方法没有完全被全部实现则该类仍是抽象类。
6,抽象类可以实例化吗?
参考:http://blog.sina.com.cn/s/blog_7ffb8dd5010120oe.html
抽象类其实是可以实例化的,但是他的实例化方式不是通过new方式来创建对象,而是通过父类的引用来指向子类的实例来间接地实现父类的实例化(因为子类要实例化前,一定会先实例化他的父类。这样创建了继承抽象类的子类的对象,也就把其父类(抽象类)给实例化了).
但是:接口是不能被实例化的(接口压根就没有构造函数),与上面的原理相似同样 接口类型的引用可以指向其子类的对象
public abstract class A
{private String str;
public A(String a)
{
System.out.println("父类已经实例化");
this.str=a;
System.out.println(str);
}
public abstract void play();
}
package com.etc;
public class B extends A
{
public B(String a)
{super(a);
System.out.println("子类已经实例化");
}
public void play()
{
System.out.println("我实现了给方法");
}
public static void main(String[] args)
{
A aa = new B("aa");
}
}
运行B类结果如下: 父类已经实例化
aa
子类已经实例化