9月27

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

在Java中,基本运行单位是类。

2、类由什么组成?

属性、方法、构造方法、嵌套类和接口、初始化块、静态成员
3、变量的类型,相互之间可以转换吗,浮点数?

Java中变量的类型主要分为基本数据类型和引用数据类型。基本数据类型包括八种:byte、short、int、long、float、double、char、boolean。引用数据类型包括类、接口和数组。
不同类型的变量之间是可以相互转换的,通常分为以下两种:
隐式转换(自动类型转换): 小范围类型可以自动转换为大范围类型。例如,int可以自动转换为long,float可以自动转换为double。
显式转换(强制类型转换): 大范围类型转换为小范围类型时需要强制转换,例如将double强制转换为int。
浮点数转换: float可以自动转换为double。但是从double转换为float时需要进行显式转换。
4、String是一个数据类型吗?

String是一个引用数据类型,而不是基本数据类型。它在Java中用于表示和操作字符串。String类在java.lang包中定义,并且提供了多种方法用于字符串的处理和操作。
5、static代表的含义?

static关键字用于修饰类的成员(变量和方法),表示这些成员属于类而不是类的实例(对象)。也就是说,无需创建对象实例就可以访问它们。主要含义包括:
静态变量(类变量): 由类的所有实例共享,存储在静态存储区。
静态方法(类方法): 不依赖于实例对象,可以通过类名直接调用。静态方法中不能直接访问非静态成员。
静态代码块: 在类加载时执行,用于初始化类级别的资源或进行某些操作
6、仔细阅读示例: EnumTest.java,运行它,分析运行结果?
你能得到什么结论?你掌握了枚举类型的基本用法了吗?
public class EnumTest {

public static void main(String[] args) {
	Size s=Size.SMALL;
	Size t=Size.LARGE;
	//s和t引用同一个对象?
	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()){
		System.out.println(value);
	}
}

}
enum Size{SMALL,MEDIUM,LARGE};
结论:1.枚举类型在 Java 中是引用类型,而不是原始类型。
2.不同的枚举常量是不同的对象,即使它们在同一个枚举类型中。
3.可以使用 valueOf 方法从字符串表示中获取相应的枚举常量。
4.枚举类提供了一个 values 方法,可以列出所有定义的枚举常量
7、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));
}

}
运行以上代码并输出
0.05 + 0.01 = 0.060000000000000005
1.0 - 0.42 = 0.5800000000000001
4.015 * 100 = 401.49999999999994
123.3 / 100 = 1.2329999999999999
0.05 + 0.01 = 0.060000000000000005

这个计算应该得到的数学结果是 0.06。但是,由于浮点数在计算机内存中是以二进制表示的,某些十进制小数无法被精确表示。结果显示了精度问题。
1.0 - 0.42 = 0.5800000000000001

数学结果应为 0.58。相似地,0.58在二进制浮点数表示中不能被完全精确表示,导致了轻微的误差。
4.015 * 100 = 401.49999999999994

数学结果应该是 401.5。由于 4.015 的二进制表示的不精确性,乘以100后产生了误差。
123.3 / 100 = 1.2329999999999999

数学结果应该是 1.233。同样,由于浮点数表示的局限性,产生了轻微的误差。
8、什么double类型的数值进行运算得不到“数学上精确”的结果?
1.二进制表示
浮点数在计算机中使用 IEEE 754 标准表示,这是一种二进制科学计数法。大多数十进制小数不能被精确地表示为二进制分数。例如,十进制的小数 0.1 在二进制中是一个无限循环的小数(0.00011001100110011…)。

  1. 有限的精度
    双精度浮点数(double)有 64 位,其中 1 位用于符号,11 位用于指数,其余 52 位用于尾数。由于位数是有限的,所以表示的数字也是有限的。对于那些不能被完全表示的十进制数,计算机会选择最接近的二进制表示,从而引入了微小的误差。

  2. 舍入误差
    当我们进行浮点数运算时,可能会遇到舍入误差。舍入误差累积使得最终结果和数学上的精确值存在差异。例如,在加减乘除等运算中,这些误差会逐渐累积和放大。

  3. 符号与指数操作
    浮点数的表示不仅包括一个尾数,还包括一个指数。指数表示数字的大小范围,但是指数和尾数之间的交互也可能引入精度问题。尤其是在进行减法运算时,如果两个数值之间的差异非常小,会导致有效位数的丢失,从而引入误差。
    9、以下代码的输出结果是什么?
    int X=100;
    int Y=200;
    System.out.println("X+Y="+X+Y);
    System.out.println(X+Y+"=X+Y");
    为什么会有这样的输出结果?
    X+Y=100200
    300=X+Y
    这里,首先进行字符串和整数的拼接。如果在Java中使用+操作符连接一个字符串和一个其它类型的值,Java会将其它类型的值转换为字符串,然后进行连接。
    具体步骤如下:
    "X+Y=" 是一个字符串。
    X (值为 100) 被转换为字符串并连接到 "X+Y=",结果是 "X+Y=100".
    Y (值为 200) 也被转换为字符串并连接到 "X+Y=100",结果是 "X+Y=100200".
    所以输出结果是:X+Y=100200.

posted @ 2024-09-27 23:54  杨家兴  阅读(2)  评论(0编辑  收藏  举报