JAVA语法基础(课堂ppt问题总结)
一:运行源代码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};
结果截图:
枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中。而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义相似。不过相比较常量类型,枚举类型可以为申明的变量提供更大的取值范围。
二:原码,反码,补码的区别辨析
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值,
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
示例程序:
public class qq { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(0xffffffff); } }
得到结果为-1
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));
}
}
结果截图为:
![](data:image/png;base64,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)
四:Java变量遵循“同名变量的屏蔽原则”
Java变量是有作用域的。如果两个作用域完全不同的变量同名,不会引起冲突。
举一个简单的例子:一班有一个学生叫小明,二班也有一个学生叫小明,在一班和二班分开上课的时候,点名就不会有冲突。
验证代码:
public class qq { /** * @param args */ private static int code=12; public static void main(String[] args) { // TODO Auto-generated method stub int code=-10; System.out.println(code); } }
结果截图:
五:为什么double类型的数值进行运算得不到“数学上精确”的结果?
这个涉及到二进制与十进制的转换问题。
N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4=1×10²+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次方)。
六:java中输出格式
源代码如下:
public class qq { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int X=100; int Y=200; System.out.println("X+Y="+X+Y); System.out.println(X+Y+"=X+Y"); } }
结果截图:
因为+X+Y表示只是输出X和Y的值,X+Y表示输出X+Y的值。