课后实验

         

1.质疑

     一个Java源文件中最多只能有一个public类(最外部接口),当有一个public类时,源文件名必须与之一致,否则无法编译,但是在public类内部可以定义内部类(成员或局部),它可以是public型的。main()不是必须要放在public类中(最外部)才能运行程序。

2.main的返回值修改问题(动手实验)

          主类main函数的返回值 如果设为int,报错

    

 

    因为main返回任何值对程序都没任何意义,所以设计成void,意味着main不会有任何值返回。

3. 为什么main方法是静态的(static)(思考)

   正因为main方法是静态的,JVM调用这个方法就不需要创建任何包含这个main方法的实例。如果main方法不声明为静态的,JVM就必须创建main类的实例,因为构造器可以被重载,JVM就没法确定调用哪个main方法。

   静态方法和静态数据加载到内存就可以直接调用而不需要像实例方法一样创建实例后才能调用,如果main方法是静态的,那么它就会被加载到JVM上下文中成为可执行的方法。

4.同名变量的屏蔽原则(课后练习)

      因为在java中,局部定义的变量能够覆盖全局范围内的变量。在局部使用某个变量的时候JVM会优先找和当前使用位置"近"的变量的的定义!如果在局部定义了和全局变量一样的名字,我们使用的过程中,调用全局变量的话,会使用this关键字辅助但是this变量不能在静态函数类型中使用

代码:(有更改)

  public class Test3 {
      private static int value=1;//全局变量,作用域:整个类
      public void showValue()
       {
       System.out.println(value);
       }
  public static void main(String[] args) {
  Test3 t=new Test3();//对象实例化
  t.showValue();
  int value =2;//局部变量,作用域:从定义到函数体结束
  System.out.println(value);
  t.showValue();
  }
  }

输出结果:

       

5.Java中的类型转换(动手动脑1)

  无精度损失

 有精度损失  

     1.char  8位  取值范围为  -128~127

   2.byte  8位  取值范围为 -128~127之间的任意整数

    3.Short 16位 取值范围为 -32768~32767之间的任意整数

    4.Int 32位  取值范围为 -2的31次方到2的31次方减1之间的任意整数(-2147483648~2147483647)

    5.float 32位 取值范围为 3.402823e+38 ~ 1.401298e-45

     6.long 64位 取值范围为 -2的63次方到2的63次方减1之间的任意整数(-9223372036854774808~9223372036854774807)

     7.double 64位 取值范围为 1.797693e+308~ 4.9000000e-32

所得出的结论:不同的数据类型进行转换时可能会有精度的损失。在整数之间进行类型转换时,数值不发生改变,而将整数类型转换成小数据类型时,由于存储方式不同,可能存在数据精度的损失。
        注:1.两个char型运算时,自动转换为int型;当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换

      2.如果一个操作数为double型,则整个表达式可提升为double型。

      3.满足自动类型转换的条件

             *两种类型要兼容(数据类型互相兼容)

            **目标类型大于源类型(double>int)

       4.强制类型转换

          格式:(类型名)表达式

6.TestDouble

    因为计算机中的数字表示的方式原因(所有的数值都需要转换成二进制表示),0.05不能被精确的表示为一个double(默认情况下,小数类型数据为double类型),而是被表示为最接近它的double值。因此,对于需要精确运算结果的地方,请勿使用double或者float类型的数据来表示。可以转换为,引用大数类包操作字符串。

7动手动脑2

  

  public class Test {
public static void main(String[] args) {
int X=100;
  int Y=200;
  System.out.println("X+Y="+X+Y);//字符串+int时int会转化为字符串类型参与运算,所以此时+起连接作用
  System.out.println(X+Y+"=X+Y");//int+int可实现为三百再与字符串进行上面相同操作
}
}

 输出结果:

       

在System.out.println()中,如果string字符串后面是+和变量,会自动把变量转换成string类型,则加号起连接作用,然后把两个字符串连接成一个新的字符串输出;如果先有变量的加减运算再有字符串,那么会从左到右先计算变量的加减,然后再与后面的string结合成一个新的字符串。

 

原文地址:https://www.cnblogs.com/zhao-teng-ass/p/7624852.html