java 2022/9/9小测有感

关于2022/9/9Java课程的课后总结:

1、JAVA的基本运行单位是类还是方法?

答:基本运行单位是类。

2、类由什么组成?

答:类由类变量和类方法组成。

3、变量的类型,相互之间可以转换吗,浮点数?

答:相互之间可以进行转换,浮点数也可以

4、String是一个数据类型吗?

答:String不是一个数据类型,其实String是一个系统预定义的类,平常使用的是类的实例化。

5、static代表的含义?

答:static代表着静态类型,用来修饰成员变量和成员方法,也可以形成静态static代码块。

6仔细阅读示例: EnumTest.java,运行它,分析运行结果?你能得到什么结论?你掌握了枚举类型的基本用法了吗?

 

 

 上面为运行后得到的结果。

Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。

Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。

枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。
可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。

复制代码
public class demo {

    public static void main(String[] args) {
        Size s=Size.SMALL;  //s和SMALL同理
        Size t=Size.LARGE;
        System.out.println(s==t);  //
        System.out.println(s.getClass().isPrimitive());
        Size u=Size.valueOf("SMALL");
        System.out.println(s==u);  //true
        for(Size value:Size.values()){   //values()用于返回枚举类中的所有值,“:”用来遍历后面的集合,取出所有元素。
            System.out.println(value);
        }
    }

}
 enum Size{SMALL,MEDIUM,LARGE};
复制代码

7、阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。

答:

原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码:反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码:补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

复制代码
public class de {

    public static void main(String[] args) {
        int a=1;
        int b=2;
        int sum=a+b;
        System.out.println(sum);

    }

}
复制代码

运行结果为3;

根据计算,补码的结果与实际运算是一致的,故java使用的应当是补码。

8、Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,就象本示例一样,有意识地在不同地方定义一些同名变量,看看输出的到底是哪个值。

答:

public class de {
    private static int value=4;
    public static void main(String[] args) {
        int value=2;
        System.out.println(value);
    }

}

输出结果为2;

事实证明,当一个变量在全局和局部同时被定义时,优先使用局部变量的数值,而全局变量的数值则被屏蔽了。

9、看着这个图,再查查Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?

 

 

java中有8种基本数据类型:byte、int、short、long、boolean、char、float、double
对应的类为:Byte、Int、Short、Long、Boolean、Charecter、Float、Double
逻辑型:boolean
文本型:char
整数型:byte、short、int、long
浮点型:float、double
byte:    1字节 -128~127
short:   2字节 -2^15~2^15-1
int :      4字节 -2^31~2^31-1
long:    8字节 -2^63~2^63-1
boolean:1字节 true false(java中不能以0或非0代替)
float:    4字节 -3.403E38~3.403E38
double:8字节 -1.798E308~- 4.9E324
char:    2字节  ’\u0000‘~‘ ’\uffff ‘(16进制的,换算过来即0~65535)
(1字节等于8位)
结论:由基本到复杂。
10、为什么double类型的数值进行运算得不到“数学上精确”的结果? 请通过互联网查找资料,或者是阅读相关计算机教材,解决这个问题。
答:计算机进行的是二进制运算,我们输入的十进制数字会先转换成二进制,进行运算后再转换为十进制输出。

而N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4 = 1×102+2×101+3×100+4×10(-1);其它进制的也是同理,例如二进制数11.01 = 1×21+1×20+0+1×2(-2) = 十进制的3.25。

Double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。

Float和Double类型为我们提供了快速运算,然而问题在于转换为二进制的时候,有些数字不能完全转换,只能无限接近于原本的值,这就导致了在后来的运算会出现不正确结果的情况。

想要解决精度不准确的问题,可以使用java中的BigDecimal类!!!

注意:在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题。

复制代码
import java.math.BigDecimal;

public class de
{
    public static void main(String[] args) 
    {
        BigDecimal f1 = new BigDecimal("0.05");
        BigDecimal f2 = BigDecimal.valueOf(0.01);
        BigDecimal f3 = new BigDecimal(0.05);
        System.out.println("*********String类型作为参数的BigDecimal********************");
        System.out.println("0.05 + 0.01 = " + f1.add(f2));
        System.out.println("0.05 - 0.01 = " + f1.subtract(f2));
        System.out.println("0.05 * 0.01 = " + f1.multiply(f2));
        System.out.println("0.05 / 0.01 = " + f1.divide(f2));
        System.out.println("*********double类型作为参数的BigDecimal********************");
        System.out.println("0.05 + 0.01 = " + f3.add(f2));
        System.out.println("0.05 - 0.01 = " + f3.subtract(f2));
        System.out.println("0.05 * 0.01 = " + f3.multiply(f2));
        System.out.println("0.05 / 0.01 = " + f3.divide(f2));
    }
}
复制代码

运行结果如下:

 

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

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

输出结果如下:

 

 

第一种输出“X+Y”是字符串进行的链接

第二种输出“X+Y”是进行了数值的计算

经过加了个括号之后:

        int X=100;
        int Y=200;
        System.out.println("X+Y="+(X+Y));
        System.out.pritln(X+Y+"=X+Y");

输出结果如下:

 

 故而要勤用括号!!!

posted @   努力学习2333  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示