java 动手动脑解决问题

Posted 任伟强

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 动手动脑解决问题相关的知识,希望对你有一定的参考价值。

1.Java的基本运行单位是类还是方法?是类,因为没有方法可以独立存在,方法在逻辑上属于类或属于对象。

2.类的组成成员?成员变量,成员方法。

3.成员变量的种类? byte short int long   float double char  boolean。

4.String是一个基本数据类型吗?java 中String 是个对象,是引用类型 ,基础类型与引用类型的区别是,基础类型只表示简单的字符或数字,引用类型可以是任何复杂的数据结构 ,基本类型仅表示简单的数据类型,引用类型可以表示复杂的数据类型,还可以操作这种数据类型的行为 。java虚拟机处理基础类型与引用类型的方式是不一样的,对于基本类型,java虚拟机会为其分配数据类型实际占用的内存空间,而对于引用类型变量,他仅仅是一个指向堆区中某个实例的指针。 

5.static代表的含义?static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

6.仔细阅读示例EnumTest.java,运行它,分析运行结果?对象s,t,u分别引用了枚举中的SMALL,LARGE,SMALL,第一次比较的是字符串类型,第二次将字符串转化为字节,第三次比较字节,第四次通过值引用对象输出全部内容。

7.你能得到什么结论?你掌握了枚举类型的基本使用方法了吗?枚举的本质是类,在没有枚举之前,仍然可以按照java最基本的编程手段来解决需要用到枚举的地方。枚举屏蔽了枚举值的类型信息,不像在用public static final定义变量必须指定类型。枚举是用来构建常量数据结构的模板,这个模板可扩展。枚举的使用增强了程序的健壮性,比如在引用一个不存在的枚举值的时候,编译器会报错。

8.运行以下代码,TestDouble.java,你看到了什么样的输出,意外吗?意外,非常意外,精度出现了很大偏差。

9.为什么double类型的数值进行运算得不到数学上精确的结果?这个涉及到二进制与十进制的转换问题。N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4=1×102+2×10+3×(10的0次幂)+4×(10的-1次幂);其它进制的也是同理,例如二进制数11.01=1×2+1×(2的0次幂)+0+1×(2的-2次幂)=十进制的3.25。double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。举个例子来说,比如要用4bit来表示小数3.26,从高到低位依次对应2的1,0,-1,-2次幂,根据最上面的分析,应当在二进制数11.01(对应十进制的3.25)和11.10(对应十进制的3.5)之间选择。简单来说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。

10.在构造BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题?对于double型,小数点后面是0的话,精度就是0;小数点后面不是0,则取决于整数位的位数,整数位越多,精度越小;当整数位接近15位时,精度就趋于0,再多1位数据可能开始溢出(具体情况取决于double类型的数值表示)。对于字符串类型的构造函数,小数点后面有几位,精度就是几位,而且几乎没有位数限制(试了40位都没有问题)。

11.以下代码的输出结果是什么?为什么会有这样的输出结果?

int X=100;

int Y=200;

System.out.println("X+Y="+X+Y);

System.out.println(X+Y+"=X+Y");

在System.out.println()中,如果在string字符串后面是+和变量,会把变量转换成string类型,加号起连接作用,然后把两个字符串连接成一个新的字符串输出;

如果先有变量的加减运算再有字符串,那么会从左到右先计算变量的加减,然后再与后面的string结合成一个新的字符串。也就是说加号只有在两个string类型或者其中一个是string类型的时候才起到连接作用,否则仍然是运算符。

12.弄清楚反码,补码和原码的概念,然后编写示例程序,对正数,负数进行各种位操作,与手工计算结果对比,看java中的数用哪种码表示?

原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

反码:反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码:补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

Java中的数使用原码表示。

 

以上是关于java 动手动脑解决问题的主要内容,如果未能解决你的问题,请参考以下文章

JAVA06数组之动手动脑问题解决

上课时的动手动脑以及实验性问题解决

JAVA09异常处理之动手动脑问题

JAV07接口与继承之动手动脑问题解决

动手动脑课上总结

动手动脑及课后实验性问题