栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java第二次作业

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java第二次作业

1.Java包含哪两类数据类型?其中基本类型的每种类型的取值范围和默认值分别是多少?请编程验证。

基本数据类型和引用数据类型。

(1)数值型:

byte:可以说是java中最少的数据类型了,它在内存中占用1个字节,也就是8位(bit),值得范围是:-128~127,
也就是-2的7次方到2的7次方减一,默认值是0B.

short:短整型,它在内存中占用的是2个字节,16位,值得取值范围是-32768~32767,也就是-2的15次方到2的15次方减一,
默认值也是0S.

int:整型,在内存中占4个字节,32位,值得取值范围是-2147483648~2147483647,也就是-2的31次方到2的31次方减一,
默认值还是0

long:长整型,在内存中占8个字节,64位,值的取值范围是-2的63次方到2的63次方减一,默认值要注意了,因为是长整型,
所以默认是虽说是0,但是准确的说是0L,必须要加上L来表示它是long类型,不加就成了int类型了.

不声明小数类型的情况下,默认为double

float :单精度浮点型, 在内存中占4个字节,32位,主要用来存储小数的,但是有限制,有效小数位只有6~7位,默认是0.0f ,取值范围是:3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示  乘以10的负45次方)

double:双精度浮点型,在内存中占8个字节,64位,也是用来存储小数的,默认是0.0,取值范围是1.797693e+308 到4.9000000e-324(e+308表示是乘以10的308次方,同样,e-324表示乘以10的负324次方)

(2)字符型:char
字符类型,它在内存中占用2个字节,也就是16 bit,因为java本身的字符集不是用ASCII码来存储的,
而是用的16位的Unicode字符集,所以它的字符存储范围也就是'u0000 -- uffff',默认值呢?就是'u0000'

(3)布尔型:boolean

布尔类型,它比较特殊,布尔类型只允许存储true(真)或者false(假),不可以用0或者非0表示
可以使用 1 bit 来存储,但是具体大小没有明确规定。JVM 会在编译时期将 boolean 类型的数据转
换为 int,使用 1 来表示 true,0 表示 false。JVM 支持 boolean 数组,但是是通过读写 byte数
组来实现的。

2.Java在什么情况下会发生整型溢出?请举例说明。

以下是摘自:http://calvin.javaeye.com/blog/91903,对于java内存泄漏的总结

(1)被生命周期极长的集合类不当持有,号称是Java内存泄漏的首因。
      这些集合类的生命周期通常极长,而且是一个辅助管理性质的对象,在一个业务事务运行完后,如果没有将某个业务对象主动的从中清除的话,这个集合就会吃越来越多内存.

(2)Scope定义不对,这个很简单了,方法的局部变量定义成类的变量,类的静态变量等。

(3)异常时没有加finally{}来释放某些资源,JDBC时代也是很普遍的事情。

(4)另外一些我了解不深的原因,如:Swing里的Listener没有显式remove;内部类持有外部对象的隐式引用;Finalizers造成关联对象没有被及时清空等。

3.Java基本类型的包装类分别是哪些?其高频区间数据缓存范围分别是什么?请选择一种包装类型编程验证其数据缓存特性。

byte → Byte,short → Short,int → Integer,long → Long,float → Float,double → Double,char → Character,boolean→ Boolean。

Boolean:使用静态final,就会返回静态值
Byte:-128~127
Short:-128~127
Character:0~127
Long:-128~127
Integer:-128~127

4.什么是自动装箱,什么是自动拆箱,请举例说明。

此处摘自:什么是拆箱和装箱?举例说明_babeyuu的博客-CSDN博客_装箱和拆箱的区别

1.装箱,值类型向引用类型转换:

在托管堆中分配内存,分配的内存量是类型各字段所需的内存量+类型对象指针所需的内存量+同步块索引所需的内存量。

值类型的字段复制到分配好的内存中

返回对象地址,现在对象地址是对象引用

2.拆箱,引用类型向值类型转换:

获取已装箱类型中的未装箱部分,也就是对象的原始值的各个字段

复制字段的值从堆中到栈中的值类型实例中

            
            //装箱的例子
            //装箱允许将值类型隐式转化成引用类型还是在Main方法里面
            int i = 2008;
            object obj = i;
            Console.WriteLine("1.i的值为{0},装箱之后的对象为{1}",i,obj);
            i = 927;
            Console.WriteLine("2.i的值为{0},装箱之后的对象为{1}",i,obj);
            Console.ReadKey();
 
            //程序运行结果
            //1.i的值为2008,装箱之后的对象为2008.
            //2.I的值为927,装箱之后的对象为2008
          //拆箱例子
          //拆箱允许将引用类型显示转换为值类型,下面通过一个实例演示拆箱的过程
            int i = 112;
            object obj = i;
            Console.WriteLine("装箱操作:值为{0},装箱之后的对象为{1}",i,obj);
            int j = (int)obj;
            Console.WriteLine("拆箱操作,装箱的对象为{0},值为{1}", obj, j);
            Console.ReadKey();
         //程序运行后的结果
         //装箱操作:值为112,装箱之后对象为112
         //拆箱操作:装箱对象为112,值为112

5.int和Integer有什么区别,它们之间的互相转化是怎样的?

int 属于普通数据类型,Integer是 int 所对应的包装类
①int转Integer
int a = 5;
Integer A = new Integer(a);或
Integer A = Integer.valueOf(a);
②Integer转int
Integer A = new Integer(5);
int a = A.intValue();

6.逻辑运算符&和&&的区别是什么?逻辑运算符&与位运算符的区别是什么?请举例说明。

逻辑运算符&和&&的区别:

“&”在执行操作时,运算符左右两边的表达式首先被执行,再对结果进行与运算。而利用“&&”执行操作时,如果从左边的表达式中得到操作数能确定运算结果,则不再对右边的表达式进行运算。

逻辑运算符&与位运算符的区别:

位运算符&:如果相对应位都是1,则结果为1,否则为0;

例如:假设整数变量A的值为60和变量B的值为13。即A = 0011 1100,B = 0000 1101。则(A&B),得到12,即0000 1100。

逻辑运算符&:当&两侧的值都为真时,结果才为真。 

例如:

int i = 2,j = 4;则(++i=2)&(j++=4)的结果为false。

先判断++i=2是否成立,结果不成立(false),程序会继续判断下一个表达式是否成立,j++=4,该表达式成立。但是&逻辑运算符要求两侧的值都为真时,结果才为真。

7.Java语言中可以采用什么语句跳出多重循环?请举例说明。

(1)break lab; (跳出多重循环的外层循环),
其中break是关键字;lab是用户定义的标号。

lab:
            for(int i =0; i<2; i++) {
                 for(int j=0; j<10; j++) {
                      if (j >1)  { 
                         break lab; 
                      }
                     System.out.println(“break");
                 }
            }
输出结果:
break
break

(2)continue lab;(跳出外层的本次循环,继续外层下一次循环)

 lab:   for(int i =0; i<2; i++) {
                      for(int j=0; j<10; j++) {
                            if (j >1)  { 
                                 continue lab; 
                            }
                           System.out.println("continue");
                      }
                     System.out.println("************");
                 }

输出结果:
continue
continue
continue
continue

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298786.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号