博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动手动脑及课后实验整理集合
阅读量:6853 次
发布时间:2019-06-26

本文共 2522 字,大约阅读时间需要 8 分钟。

一个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"。

 

转载于:https://www.cnblogs.com/messi2017/p/7628118.html

你可能感兴趣的文章
设计模式之备忘录模式
查看>>
hadoop之 HDFS fs 命令总结
查看>>
快速实现DEDECMS织梦系统伪标题采集
查看>>
去除Html标签
查看>>
目的节点序列距离矢量(DSDV)协议
查看>>
iOS之核心动画
查看>>
Linux问题集
查看>>
parent
查看>>
JNI Hello World
查看>>
LindDotNetCore~Ocelot实现微服务网关
查看>>
数据结构之队列——回文字判断
查看>>
消息队列
查看>>
链表的遍历
查看>>
微信小程序中的图形验证码
查看>>
数字转罗马数字
查看>>
CNN网络架构演进
查看>>
windows上安装Ipython notebook
查看>>
选择屏幕加功能码
查看>>
UIImagePickerController 视频录制操作,视频大小,时间长度
查看>>
Python Tuples
查看>>