java复习
5: }
6: public Example(String s){
7: str=s;
8: }
9:}
10: class Demo extends Example{
11: }
12: public class Test{
13:public void f () {
14:Example ex = new Example("Good");
2D
==比较的是地址,“hello”是字符串常量,java中保存在专门的内存中,
String s1="hello"赋值时就是把字符常量区中的“hello”给了s1指着,所以s1=="hello"比较的在同一内存中的东西,如还有String s2="hello”java发现"hello”在字符常量区中已经有,也会再次给S2。
}
A.输出s1 !=hello
B.编译正确,运行错误
C.产生编译错误
D.输出s1=hello
3.你怎样强制对一个对象立即进行垃圾收集?
A.调用System.gc()
B.调用System.gc(),同时传递要进行垃圾收集对象的引用
C.给这个对象的所有引用设置一个新的值(例如null)
D.垃圾收集是不能被强迫立即执行
3Djava中回收还是系统做,即便调用gc也是肯定立马回收
4C
Static{}静态代码块先于main函数执行
5C
Main方法是static的,所以他中的变量要不是就是方法自己的局部变量,要不就是static的类变量。题目中long a[] = new long[10];是类Test的实例变量。不能在main中直接用。要用则要改为static的。
3构造方法后的构造块
2构造方法
1构造块
3构造方法后的构造块
2构造方法
写出下列代码输出结果:
public class ClassA {
int a ;
void callfun(){
System.out.println("AAAA");
}
void Test(){
a=100;
System.out.println("A a="+a);
java为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的封装类就是Integer
四、请简单解释下java在内存中的栈(stack)、堆(heap)的用法
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。
1.在Java中,负责对字节代码解释执行的是
A.应用服务器B.虚拟机
C.垃圾回收器D.编译器
2.定义字符串:String s1="hello";对下面程序描述正确的是:
if(s1=="hello"){
System.out.println("s1 = hello");
}else{
System.out.println("s1 !=hello");
接口中的变量都是常量,默认都是public static final,接口中的方法都是抽象方法,默认都是public abstract。
六、Java中的final关键字有哪些用法?静态变量和实例变量的区别?
final关键字修饰类表示该类不能被继承;final关键字修饰方法表示方法不能被重写;final关键字修饰变量表示变量只能一次赋值以后值不能被修改(常量)。
多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
二、请描述重载(Overload)和重写(Override)的概念?重载的方法能否根据返回类型进行区分?
重载(Overload)是指对于类的方法,方法名相同,参数列表不同的方法之间就构成了重载关系。参数列表又叫参数签名,指三样东西:参数的类型,参数的个数,参数的顺序。这三者只要有一个不同就叫做参数列表不同。重载对返回类型没有特殊的要求。
15:Demo d = new Demo("Good");
16:} }
哪句语句会导致错误?
A、line 3
B、line 6
C、line 10
D、line 14
E、line 15
7.
import java.io.*;
import java.util.*;
public class foo{
public static void main (String[] args){
五、请描述抽象类(abstract class)和接口(interface)有什么异同?接口中的变量和方法默认类型是什么?
抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。
String s;
System.out.println("s=" + s);
}
}
输出结果应该是:()
A.代码得到编译,并输出“s=”
B.代码得到编译,并输出“s=null”
C.由于String s没有初始化,代码不能编译通过
D.代码得到编译,但捕获到NullPointException异常
1Bjava程序运行在java虚拟机上,jvm可移植性强
}
}
public class ClassB extends ClassA{
void callfun(){
System.out.println("BBBB");
}
void Test(){
a=150;
System.out.println("B a="+a);
}
void TestSup()
{
this.Test();
重写(Override)是指子类重定义从父类继承来的一个同名方法,此时子类将清除父类方法的影响。子类可以通过重新定义与父类同名的方法,实现自身的行为。重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。
三、String 是java中的基础(原始)数据类型吗?java中int 和Integer 有什么区别?
super.Test();
}
}
public class ClassC extends ClassA {
void callfun(){
System.out.println("CCCC");
}
}
public class Mytest {
public static void main(String[] args) {
4.已知如下代码
public class staTest1 {
static int a=10;
static{a=a+5;}
public static void main(String[] args) {
System.out.println("a=:"+a);
}
static {a=a/3;}
}
请问哪个情况是正确的?
堆内存用于存放由new创建的对象和数组。 在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或 者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对 象,引用变量相当于为数组或者对象起的一个别名,或者代号。
6E
子类无法继承父类的构造函数。子类Demo继承了Example但是什么都没写所以就是有一个默认的无参构造函数。15行Demo d = new Demo("Good");是要用子类有一个字符串参数的构造函数,子类没有。(PS:子类的构造函数要用父类构造函数时是要用super(参数)的形式)
7Cjava String也是个对象String s只是个声明,相当于在内存中的栈空间中有个s的引用(z指针),但是需要如下方法s = new String(“aaa”);才能再堆空间真的有string对象存在并用s指着。
写出下列代码输出结果:
class Demo5{
{
System.out.println("1构造块");
}
public Demo5(){
System.out.println("2构造方法");
}
{
System.out.println("3构造方法后的构造块");
}
static {
System.out.println("4静态代码块");
System.out.println ( a[6] );
}