1、abstract和final可以同时作为一个类的修饰符。( 错误 )
Abstract表示抽象类,抽象类本身不可实例化,必须有子类去继承,且子类中实现抽象父类中所有的抽象方法,子类才可实例化。
final修饰的类,不可继承。
这个修饰符功能相克的。
2、如果类的方法没有返回值,该方法的返回值类型应当是abstract。( 错误 )
没有返回值的方法是void
类被abstract修饰之后说明是一个抽象类,但是可以被继承,方法会被重写,不一定没有返回值
3、
答案是:public void fun(int n){//…}
方法的重写(override)两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。
4、
false
String str1=“hello”; 这样创建字符串是存在于常量池中
String str2=new String(“hello”); str2存在于堆中,
==是验证两个对象是否是一个(内存地址是否相同)
用+拼接字符串时会创建一个新对象再返回。
5、
将源程序编译为字节码文件
javac将.java编译为.class文件
java 将.class文件转为机器码.exe
6、Java 的屏幕坐标是以像素为单位,容器的左下角被确定为坐标的起点。
错误
是以左上角为起点
7、要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以(A )
A、让该类不使用任何关键字
B、使用private关键字
C、使用protected关键字
D、使用void关键字
default和protected的区别是:
前者只要是外部包,就不允许访问。
后者只要是子类就允许访问,即使子类位于外部包。
总结:default拒绝一切包外访问;protected接受包外的子类访问
8、
one
采用命令行“ java Test one two three ”调用
其中Test为调用的方法,而one two three则为Test方法里面main函数的参数;
System.out.println(args[0]);表示输出第一个元素,故为one;
9、java中将ISO8859-1字符串转成GB2312编码,语句为 ?
new String(“ISO8859-1”.getBytes(“ISO8859-1”),“GB2312”)
new String(String.getBytes(“GB2312”), ISO8859-1)
new String(String.getBytes(“ISO8859-1”))
new String(String.getBytes(“GB2312”))
new String(“ISO8859-1”.getBytes(“ISO8859-1”),“GB2312”)
注意这里"ISO8859-1"是一个普通字符串,不要被迷惑了
String.getBytes(“ISO8859-1”)表示获取这个字符串的byte数组,
然后new String(String.getBytes(“ISO8859-1”),GB2312)是上面的字符数组按照GB2312编码成新的字符串
10、以下描述错误的一项是(C )?
A、程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行 到了第几行,是线程隔离的
B、原则上讲,所有的对象都是在堆区上分配内存,是线程之间共享的
C、方法区用于存储JVM加载的类信息、常量、静态变量,即使编译器编译后的代码等数据,是线程隔离的
D、Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)
栈区:
每个线程包含一个栈区,栈中只保存方法中(不包括对象的成员变量)的基础数据类型和自定义对象的引用(不是对象),对象都存放在堆区中
每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
堆区:
存储的全部是对象实例,每个对象都包含一个与之对应的class的信息(class信息存放在方法区)。
jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身,几乎所有的对象实例和数组都在堆中分配。
方法区:
又叫静态区,跟堆一样,被所有的线程共享。它用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
11、 有如下4条语句:©
Integer i01=59;
int i02=59;
Integer i03=Integer.valueOf(59);
Integer i04=new Integer(59);
以下输出结果为false的是:
A、System.out.println(i01==i02);
B、System.out.println(i01==i03);
C、System.out.println(i03==i04);
D、System.out.println(i02==i04);
①无论如何,Integer与new Integer不会相等。不会经历拆箱过程,
②两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false
java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存
③两个都是new出来的,都为false
④int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比
12、 已知有下列Test类的说明,在该类的main方法内,则下列哪个语句是正确的?(A)
public class Test
{
private float f = 1.0f;
int m = 12;
static int n = 1;
public static void main (String args[])
{
Test t = new Test();
}
}
A、t.f;
B、this.n;
C、Test.m
D、Test.f
1、f 虽然是 Test 类的私有成员属性,但因为 main 方法就在 Test 类内,因此可以通过 “对象名.属性名” 的方式调用,所以 A 对。
2、static 静态成员属性不能使用 this 关键字调用,B 错
3、m 和 f 都是普通成员属性,而 “类名.” 方式只能调用 静态成员属性,因此 C 和 D 都错。
13、 关于访问权限说法正确 的是 ? (成员内部类前面可以修饰public,protected和private )
外部类前面可以修饰public,protected和private
成员内部类前面可以修饰public,protected和private
局部内部类前面可以修饰public,protected和private
以上说法都不正确
1.类指外部类,最大的类,修饰符有public(表示该类在项目所有类中可以被导入),default(该类只能在同一个package中使用),abstract,final
2.内部类指位于类内部但不包括位于块、构造器、方法内,且有名称的类,修饰符有public,private,protected访问控制符,也可以用static,final关键字修饰,public和private比较简单,一个表示所有可以被所有类访问,一个表示只能被自身访问,protected修饰的成员类可以被同一个包中的类和子类访问。而default修饰的成员类只能被同一个包中的类访问。
3.局部内部类指位于块、构造器、方法内的有名称类,最多只能有final修饰
14、关于ASCII码和ANSI码,以下说法不正确的是(ASCII码都是可打印字符)?
标准ASCII只使用7个bit
在简体中文的Windows系统中,ANSI就是GB2312
ASCII码是ANSI码的子集
ASCII码都是可打印字符
A、标准ASCII只使用7个bit,扩展的ASCII使用8个bit。
B、ANSI通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符。超出此范围的使用0x80~0xFFFF来编码,即扩展的ASCII编码。不同 ANSI 编码之间互不兼容。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。
C、ANSI通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符,即ASCII码
D、ASCII码包含一些特殊空字符
15、下面关于程序编译说法正确的是(java在运行时才进行翻译指令)
java语言是编译型语言,会把java程序编译成二进制机器指令直接运行
java编译出来的目标文件与具体操作系统有关
java在运行时才进行翻译指令
java编译出来的目标文件,可以运行在任意jvm上
javac先将.java文件编译为.class文件,虚拟机将.class文件翻译为.exe程序
16、
String与StringBuffer的区别。
String是不可变的对象,StringBuffer是可以再编辑的
字符串是常量,StringBuffer是变量
tring类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。
private final char value[];
String 为不可变对象,一旦被创建,就不能修改它的值. . 对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。
17、在java中重写方法应遵循规则的包括()
可以有不同的访问修饰符
参数列表必须完全与被重写的方法相同
方法重写
参数列表必须完全与被重写方法的相同;
返回类型必须完全与被重写方法的返回类型相同;
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
父类的成员方法只能被它的子类重写。
声明为final的方法不能被重写。
声明为static的方法不能被重写,但是能够被再次声明。
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
构造方法不能被重写。
如果不能继承一个方法,则不能重写这个方法。
方法重载
被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。
无法以返回值类型作为重载函数的区分标准。
18、
abstract类只能用来派生子类,不能用来创建abstract类的对象。
abstract不能与final同时修饰一个类。
abstract类定义中可以没有abstract方法。
1·、abstract类不能用来创建abstract类的对象;
2、final类不能用来派生子类,因为用final修饰的类不能被继承;
3、如2所述,final不能与abstract同时修饰一个类,abstract类就是被用来继承的;
4、类中有abstract方法必须用abstract修饰,但abstract类中可以没有抽象方法,接口中也可以有abstract方法。
19、
CMS垃圾回收器在那些阶段是没用用户线程参与的(初始标记、重新标记)
用户线程(user-level threads)指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。
CMS的GC过程有6个阶段(4个并发,2个暂停其它应用程序)
- 初次标记(STW initial mark)
- 并发标记(Concurrent marking)
- 并发可中断预清理(Concurrent precleaning)
- 最终重新标记(STW remark)
- 并发清理(Concurrent sweeping)
- 并发重置(Concurrent reset) 在初次标记,重新标志的时候,要求我们暂停其它应用程序,那么这两个阶段用户线程是不会参与的
20、往OuterClass类的代码段中插入内部类声明, 哪一个是错误的:
public class OuterClass{
private float f=1.0f;
//插入代码到这里
}
A、class InnerClass{
public static float func(){return f;}
}
B、abstract class InnerClass{
public abstract float func(){}
}
C、static class InnerClass{
protected static float func(){return f;}
}
D、public class InnerClass{
static float func(){return f;}
}
全部正确
1.静态内部类才可以声明静态方法
2.静态方法不可以使用非静态变量
3.抽象方法不可以有函数体