Java概念性问题9

来源:互联网 发布:传奇一条龙源码 编辑:程序博客网 时间:2024/06/14 13:03

以下内容来自学习整理:

Why would a responsible Java programmer want to use a nested class?AB

A To keep the code for a very specialized class in close association with the class it works with.
B To support a new user interface that generates custom events.
C To impress the boss with his/her knowledge of Java by using nested classes all over the place.
一般来说,有4中内部类:常规内部类、静态内部类、局部内部类、匿名内部类。
1、常规内部类:常规内部类没有用static修饰且定义在在外部类类体中。
2、静态内部类:与类的其他成员相似,可以用static修饰内部类,这样的类称为静态内部类。静态内部类与静态内部方法相似,只能访问外部类的static成员,不能直接访问外部类的实例变量,与实例方法,只有通过对象引用才能访问。
3、局部内部类:在方法体或语句块(包括方法、构造方法、局部块或静态初始化块)内部定义的类成为局部内部类。局部内部类不能加任何访问修饰符,因为它只对局部块有效。
4、匿名内部类:定义类的最终目的是创建一个类的实例,但是如果某个类的实例只是用一次,则可以将类的定义与类的创建,放到与一起完成,或者说在定义类的同时就创建一个类以这种方法定义的没有名字的类成为匿名内部类。

相减C

变量a是一个64位有符号的整数,初始值用16进制表示为:0Xf000000000000000;
变量b是一个64位有符号的整数,初始值用16进制表示为:0x7FFFFFFFFFFFFFFF。
则a-b的结果用10进制表示为多少?(C)
A 1
B -(2^62+2^61+2^60+1)
C 2^62+2^61+2^60+1
D 2^59+(2^55+2^54+…+2^2+2^1+2^0)
将减数取反加在相加
0Xf000000000000000补码为1111000000000000000000000000000000000000000000000000000000000000
0x7FFFFFFFFFFFFFFF补码为0111111111111111111111111111111111111111111111111111111111111111
a-b=a+(-b)=
1111000000000000000000000000000000000000000000000000000000000000+
1000000000000000000000000000000000000000000000000000000000000001=
10111000000000000000000000000000000000000000000000000000000000001(高位溢出舍去)
则结果为
0111000000000000000000000000000000000000000000000000000000000001=
2^62+2^61+2^60+1

方法通常存储在进程中的哪一区(D)

A 堆区
B 栈区
C 全局区
D 代码区
注意,题目中是问“进程”的哪个区,而不是JVM的哪个区。 “进程的区”属于操作系统里面的
【下面来自博客http://www.cnblogs.com/liulipeng/archive/2013/09/13/3319675.html】
一条进程的栈区、堆区、数据区和代码区在内存中的映射
1>栈区:主要用来存放局部变量, 传递参数, 存放函数的返回地址。.esp 始终指向栈顶, 栈中的数据越多, esp的值越小。
2>堆区:用于存放动态分配的对象, 当你使用 malloc和new等进行分配时,所得到的空间就在堆中。动态分配得到的内存区域附带有分配信息, 所以你  能够 free和delete它们。
3>数据区:全局,静态和常量是分配在数据区中的,数据区包括bss(未初始化数据区)和初始化数据区。
注意:
1)堆向高内存地址生长;
2)栈向低内存地址生长;
3)堆和栈相向而生,堆和栈之间有个临界点,称为stkbrk。
1、一条进程在内存中的映射
假设现在有一个程序,它的函数调用顺序如下:
main(…) ->; func_1(…) ->; func_2(…) ->;
func_3(…),即:主函数main调用函数func_1; 函数func_1调用函数func_2; 函数func_2调用函数func_3。
当一个程序被操作系统调入内存运行, 其对应的进程在内存中的映射如下图所示:

这里写图片描述

Java运行时的数据区包括:(其中前两个是线程共享的)
1.方法区(Method Area) 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
2.堆(Heap) 存放对象实例,几乎所有对象实例都在这里分配内存
3.虚拟机栈(VM Stack) 描述的是Java方法执行的内存模型:每个方法在执行的同时会创建一个Stack Frame(方法运行时的基础数据结构)用于存储局部变量表、操作数栈、动态连接、方法出口等信息
4.本地方法栈(Native Method Stack) 与虚拟机栈了类似,不过则为虚拟机使用的到的Native方法服务。(有的虚拟机譬如Sun HotSpot虚拟机直接把本地方法栈和虚拟机栈合二为一)
5.程序计数器(Program Counter Register) 可看作当前线程所执行的字节码的行号的标识器

What is displayed when the following is executed;A
double d1=-0.5;System.out.println("Ceil d1="+Math.ceil(d1));System.out.println("floor d1="+Math.floor(d1));

A Ceil d1=-0.0
  floor d1=-1.0
B Ceil d1=0.0
  floor d1=-1.0
C Ceil d1=-0.0
  floor d1=-0.0
D Ceil d1=0.0
  floor d1=0.0
E Ceil d1=0
  floor d1=-1
 
  public static double ceil(double a)
  返回最小的(最接近负无穷大)double值,该值大于或等于参数,并且等于某个整数。
  特殊情况是:
如果参数值总是等于某个整数,那么结果与该参数相同。
如果参数是 NaN、无穷大、正零或负零,那么结果与参数相同。
如果参数值小于零,但是大于 -1.0,那么结果是负零。
注意,Math.ceil(x)的值与-Math.floor(-x)的值完全相同。
参数: a- 一个值。返回: 最小(最接近负无穷大)浮点值,该值大于或等于该参数,并且等于某个整数。
 

事务隔离级别是由谁实现的?C

A Java应用程序
B Hibernate
C 数据库系统
D JDBC驱动程序
A,我们写java程序的时候只是设定事物的隔离级别,而不是去实现它
B,Hibernate是一个java的数据持久化框架,方便数据库的访问
C,事物隔离级别由数据库系统实现,是数据库系统本身的一个功能
D,JDBC是java database connector,也就是java访问数据库的驱动

在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别;为了解决更新丢失,脏读,不可重读(包括虚读和幻读)等问题在标准SQL规范中,定义了4个事务隔离级别,分别为未授权读取,也称为读未提交(read uncommitted);授权读取,也称为读提交(read committed);可重复读取(repeatable read);序列化(serializable)

Which statement declares a variable a which is suitable for referring to an array of 50 string objects?BCF

A char a[][];
B String a[];
C String[] a;
D Object a[50];
E String a[50];
F Object a[];

在java 中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度.。
如下,1,2,3可以通过编译,4,5不行。而String是Object的子类,所以上述BCF均可定义一个存放50个String类型对象的数组。
1. String a[]=new String[50];
2. String b[];
3. char c[];
4. String d[50];
5. char e[50];

A:char[][]
定义了二位字符数组。在Java中,使用字符串对char数组赋值,必须使用toCharArray()方法进行转换。所以A错误。
B、C:在Java中定义String数组,有两种定义方式:String a[]和String[]a。所以B、C正确。
D、E:数组是一个引用类型变量,因此使用它定义一个变量时,仅仅定义了一个变量,这个引用变量还未指向任何有效的内存,因此定义数组不能指定数组的长度。所以D、E错误。
F:Object类是所有类的父类。子类其实是一种特殊的父类,因此子类对象可以直接赋值给父类引用变量,无须强制转换,这也被称为向上转型。这体现了多态的思想。所以F正确。

0 0
原创粉丝点击