• 动手动脑及课后实验整理集合


    一个Java类文件中真的只能有一个公有类吗?

    不一定,Java类文件中直接定义的用public修饰符修饰的类确实只能有一个。但是,内部类作为一个类的内部成员,可以使用public修饰符进行修饰。如:

    1 public class Test{
    2         public static void main(String[]args){
    3         }
    4         public class InnerClass{
    5         }
    6 }

    这段代码是没有问题的。

    main方法的返回值能不能由void改为int?

    不能运行,这是Java语法规定,这么写便于JVM识别调用。

    为什么Java规定作为程序入口点的main方法为静态的?

    首先这是Java语法规定,严格记住就好。强行解释是好处很简单,不需要定义具体对象就可使用。不过c语言中也没有作特殊操作,Java里面main方法同样不需要显式调用。所以在我看来这是个拿结果当原因的问题,这就是为了配合jvm的运行才刻意为之。

    变量作用域的测试

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

    这里和C语法一样,方法内重名的局部变量可以屏蔽类属性。故程序输出2。

    Java数值计算的误差

    public class TestDouble {
    
        public static void main(String args[]) {
            System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
            System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
            System.out.println("4.015 * 100 = " + (4.015 * 100));
            System.out.println("123.3 / 100 = " + (123.3 / 100));
        }
    }

    输出结果显示是有误差的:

    原因是计算机只能识别二进制,因此所有的数值都要转换为二进制再处理。可是熟悉进制转换就可以知道,浮点数的转换非常容易出现精度缺失,因此产生奇葩结果并不奇怪。事实上,浮点数并不适合精确计算,适合科学计算。

    再看一个例子:

    import java.math.BigDecimal;
    
    public class TestBigDecimal
    {
        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));
        }
    }

    再次有奇葩结果输出:

    Java提供的BigDecmial类具有两种构造方法。一种是以double为参数,一种是以string为参数。而对double类型的四舍五入的计算和进制转换过程仍会产生精度缺失,计算机在运行程序时并不像我们这样直接计算。还是鼓励使用以String为基型来构造一个BigDecmial的实例对象。

    最后再来一个结束这次的总结:

    public class Test {
    public static void main(String[] args) {
        int X=100;
        int Y=200;
        System.out.println("X+Y="+X+Y);
        System.out.println(X+Y+"=X+Y");
        }
    }

    输出结果为:

    这样输入其实就是个操作符执行顺序的问题。第一句输出先输出字符串,Java语法规定字符串后与整形相加,整形数值会自动隐式转换为String类型,因此第一次会直接输出100200。

    第二次+先对两个整形操作,自然会计算结果再输出,然后在输出"=x+y"。

  • 相关阅读:
    Golang数组Array
    转:【专题六】UDP编程
    转:【专题五】TCP编程
    转:【专题四】自定义Web浏览器
    转:【专题三】自定义Web服务器
    转:【专题二】HTTP协议详解
    转:【专题一】网络协议简介
    转:[你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
    转:[你必须知道的异步编程]——基于任务的异步模式
    转:[你必须知道的异步编程]——基于事件的异步编程模式
  • 原文地址:https://www.cnblogs.com/messi2017/p/7628118.html
Copyright © 2020-2023  润新知