java复习

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
五、请描述抽象类(abstract class)和接口(interface)有什么异同?接口中的变量和方法默认类型是什么?
抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。
}
}
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();
多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
二、请描述重载(Overload)和重写(Override)的概念?重载的方法能否根据返回类型进行区分?
重载(Overload)是指对于类的方法,方法名相同,参数列表不同的方法之间就构成了重载关系。参数列表又叫参数签名,指三样东西:参数的类型,参数的个数,参数的顺序。这三者只要有一个不同就叫做参数列表不同。重载对返回类型没有特殊的要求。
A、4行与9行不能通过编译,因为缺少方法名和返回类型
B、9行不能通过编译,因为只能有一个静态初始化器
C、编译通过,执行结果为:x=5
D、编译通过,执行结果为:x=15
5.已知如下代码:
public class Test
{
long a[] = new long[10];
public static void main ( String arg[] ) {
3Djava中回收还是系统做,即便调用gc也是肯定立马回收
4C
Static{}静态代码块先于main函数执行
5C
Main方法是static的,所以他中的变量要不是就是方法自己的局部变量,要不就是static的类变量。题目中long a[] = new long[10];是类Test的实例变量。不能在main中直接用。要用则要改为static的。
重写(Override)是指子类重定义从父类继承来的一个同名方法,此时子类将清除父类方法的影响。子类可以通过重新定义与父类同名的方法,实现自身的行为。重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。
三、String 是java中的基础(原始)数据类型吗?java中int 和Integer 有什么区别?
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){
写出下列代码输出结果:
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] );
}
}
请问哪个情况是正确的?
A、输出为null.
B、输出为0.
C、编译时出错
D、运行时出错
6.已知如下代码:
1: class Example{
2: String str;
3: public Example(){
4: str= "example";
super.Test();
}
}
public class ClassC extends ClassA {
void callfun(){
System.out.println("CCCC");
}
}
public class Mytest {
public static void main(String[] args) {
接口中的变量都是常量,默认都是public static final,接口中的方法都是抽象方法,默认都是public abstract。
六、Java中的final关键字有哪些用法?静态变量和实例变量的区别?
final关键字修饰类表示该类不能被继承;final关键字修饰方法表示方法不能被重写;final关键字修饰变量表示变量只能一次赋值以后值不能被修改(常量)。
继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性。一个类可以从其它已有的类中派生,新类保持了父类中的行为和属性,但增加了新的功能。
多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:1.方法重写(子类继承父类并重写父类中已有的或抽象的方法);2.对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。
6E
子类无法继承父类的构造函数。子类Demo继承了Example但是什么都没写所以就是有一个默认的无参构造函数。15行Demo d = new Demo("Good");是要用子类有一个字符串参数的构造函数,子类没有。(PS:子类的构造函数要用父类构造函数时是要用super(参数)的形式)
7Cjava String也是个对象String s只是个声明,相当于在内存中的栈空间中有个s的引用(z指针),但是需要如下方法s = new String(“aaa”);才能再堆空间真的有string对象存在并用s指着。
堆内存用于存放由new创建的对象和数组。 在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或 者对象在堆内存中的首地址,在栈中的这个Βιβλιοθήκη Baidu殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对 象,引用变量相当于为数组或者对象起的一个别名,或者代号。
}
A.输出s1 !=hello
B.编译正确,运行错误
C.产生编译错误
D.输出s1=hello
3.你怎样强制对一个对象立即进行垃圾收集?
A.调用System.gc()
B.调用System.gc(),同时传递要进行垃圾收集对象的引用
C.给这个对象的所有引用设置一个新的值(例如null)
D.垃圾收集是不能被强迫立即执行
ClassA a;
ClassB b =new ClassB();
b.TestSup();
a=b;
a.callfun();
a.Test();
ClassC c =new ClassC();
a=c;
a.callfun();
}
}
B a=150
A a=100
BBBB
B a=150
CCCC
一、请分别描述下面向对象中抽象、封装、继承、多态性四个特征的概念。
2D
==比较的是地址,“hello”是字符串常量,java中保存在专门的内存中,
String s1="hello"赋值时就是把字符常量区中的“hello”给了s1指着,所以s1=="hello"比较的在同一内存中的东西,如还有String s2="hello”java发现"hello”在字符常量区中已经有,也会再次给S2。
抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
封装:通常认为封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。
}
}
public class Ex22 {
static {
System.out.println("在主方法类中定义的代码块");
}
public static void main(String[] args){
new Demo5();
new Demo5();
}
}
在主方法类中定义的代码块
4静态代码块
1构造块
String不是基础(原始)数据类型。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。
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");
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");
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;}
}
请问哪个情况是正确的?
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);
String s;
System.out.println("s=" + s);
}
}
输出结果应该是:()
A.代码得到编译,并输出“s=”
B.代码得到编译,并输出“s=null”
C.由于String s没有初始化,代码不能编译通过
D.代码得到编译,但捕获到NullPointException异常
1Bjava程序运行在java虚拟机上,jvm可移植性强
相关文档
最新文档