zoukankan      html  css  js  c++  java
  • 01-JAVA语言基础(动手动脑)

    一、一个JAVA类文件中只能有一个public类吗?

    01-JAVA语言基础.ppt第22页“一个Java源文件中可以写多个类,但其中只能有一个类是“公有(public)”的,并且Java要求源文件名也要与之一致。”

    测试代码一:

    1 //错误示例
    2 public class Test {
    3      public static void main(String[] args) {
    4          
    5      }
    6 }
    7 public class Test1{
    8      
    9 }

    测试结果:

    (公有类TestTwo必须定义在它自己的类文件中)

    结论:所以,一个类文件只能有一个public类。

    测试代码二:

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

    测试结果:

    (编译通过)

    其中innerClass为Test内部类。

    通过查找资料得知:

      内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。比如上面的例子,如果成员内部类Inner用private修饰,则只能在外部类的内部访问,如果用public修饰,则任何地方都能访问;如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。这一点和外部类有一点不一样,外部类只能被public和包访问两种权限修饰。(来源:Java内部类详解

    结论:

    • java源文件中直接定义的public类只能有一个,且该类名必须与源文件名一致。
    • 内部类可以理解为外部类的一个成员,成员可以用public修饰。

     

    二、main方法的声明

    java规定main方法必须严格按如下形式进行声明:public static void main( String args[] )

    void表明其不反回任何结果。

    如果将其改为int,并添加return 0:

    1 //错误示例
    2 public class Test {
    3     public static int main(String[] args) {
    4         return 0;
    5     }
    6 }

    测试结果:

      

     结论:main方法必须严格按如下形式进行声明:public static void main( String args[] )。

    三、在一个对话框中显示文本

    程序代码:

    1 import javax.swing.JOptionPane;
    2 public class Dialog {
    3     public static void main(String[] args) {
    4         String text = "Welcom
    to
    JAVA
    Programming!";
    5         JOptionPane.showMessageDialog(null,text);
    6     }
    7 }

    执行结果:

    四、为什么java规定作为程序入口点的main() 方法是静态的?

    静态方法与非静态方法本质区别:

      静态方法是在类中使用staitc修饰的方法,在类定义的时候已经被装载和分配。而非静态方法是不加static关键字的方法,在类定义时没有占用内存,只有在类被实例化成对象时,对象调用该方法才被分配内存。

      所以,非静态成员函数在执行前必须先构造并实例化该函数所在的类。若main为非静态方法,则调用它之前还须实例化main所在类。而main为程序入口点,为此,JAVA语言规定main为静态。

    五、main接收命令行参数练习

    测试代码:

    1 public class JavaAppArguments {
    2     public static void main(String[] args){
    3         int n = args.length;
    4         System.out.println("参数个数:" + n);
    5         while(n > 0){
    6             System.out.println(args[--n]);
    7         }
    8     }
    9 }

    执行结果:

      

    程序分析:通过命令行运行JavaAppArguments时将参数传给了String数组args,main函数使用这个数组实现输出。

    六、变量的作用域与同名变量屏蔽原则:

    变量的作用域:在每个大括号内定义的变量,只在它被定义后、所在大括号结束之前有效,这个区域成为变量作用域。

    测试代码一:

    1 //如果在变量作用域内定义同名变量
    2 public class Scope {
    3     public static void main(String[] args) {
    4         int x;
    5         {
    6             int x;        //报错
    7         }
    8     }
    9 }

    错误信息为Duplicate local variable x (重复定义变量x)

    测试代码二:

    //在变量作用域外定义同名变量
    public class Scope {
        public static void main(String[] args) {
            {
                int x = 1;
                System.out.println(x);
            }
            int x = 2;
            System.out.println(x);
        }
    }

    执行结果:

    结果分析:

      输入第一个大括号内的x值1之后,变量x被JVM回收,于是可以再次以x为变量名定义变量。

    测试代码三:

     1 public class Scope {
     2     static int x = 3;
     3     public static void main(String[] args) {
     4         {
     5             int x = 1;
     6             System.out.println(x);
     7         }
     8         int x = 2;
     9         System.out.println(x);
    10         f();
    11     }
    12     public static void f(){
    13         System.out.println(x);
    14     }
    15 }

    执行结果:

    结论:

      1.相同名称的局部变量作用域范围不可重叠。

      2.在同一作用域范围内下成员变量名可以和局部变量同名,在同一个作用域范围下局部变量和局部变量不可以同名。

      3.当成员变量与局部变量同名时,默认使用局部变量

    参考文章:http://www.cnblogs.com/AlanLee/p/6627949.html

    七、浮点数误差

    测试代码:

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

    执行结果:

      

    原因分析:

      浮点数值采用二进制系统表示,而在二进制系统中无法精确表示1/10。这就好像十进制无法精确表示1/3一样。如果需要在数值计算中不含有任何舍入误差,就应该使用BigDecimal类.(摘自“Java 核心技术 卷一 (第九版)  p35”)

    八、处理精度损失

    测试代码一:

    1 import java.math.BigDecimal;
    2 
    3 public class TestBigDecimal {
    4     public static void main(String[] args) {
    5         BigDecimal num1 = new BigDecimal("10.123");
    6         BigDecimal num2 = new BigDecimal("20.456");
    7         System.out.println(num1.add(num2));
    8     }
    9 }

    执行结果:

      

    测试代码二:

    1 import java.math.BigDecimal;
    2 
    3 public class TestBigDecimal {
    4     public static void main(String[] args) {
    5         BigDecimal num1 = new BigDecimal(10.123);
    6         BigDecimal num2 = new BigDecimal(20.456);
    7         System.out.println(num1.add(num2));
    8     }
    9 }

    执行结果:

      

    原因分析:

      因在计算机中浮点数值采用二进制形式存储,浮点数10.123、20.456无法精确存储,所以其为参数构造出的num1、num2也是近似值,因此得到了不精确的结果。

      而字符串的值是确定的,BigDecimal使用字符串来处理、存储数据,得到的结果是精确的。

    总结:

      在构建BigDecimal对象时应使用字符串而不是数值。

    九、自动类型转换

    测试代码:

    1 public class XY {
    2     public static void main(String[] args) {
    3         int X=100;
    4         int Y=200;
    5         System.out.println("X+Y="+X+Y);
    6         System.out.println(X+Y+"=X+Y");
    7     }
    8 }

    执行结果:

      

    结果分析:

      “+”号运算顺序为从左向右,当“+”连接两个操作数其中有一个是字符串时,“+”为字符串连接操作符。

      当“+”连接一个数值和一个字符串时,数值会自动转换为字符串进行连接。

  • 相关阅读:
    HDU 1358 Period (KMP)
    POJ 1042 Gone Fishing
    Csharp,Javascript 获取显示器的大小的几种方式
    css text 自动换行的实现方法 Internet Explorer,Firefox,Opera,Safar
    Dynamic Fonts动态设置字体大小存入Cookie
    CSS Image Rollovers翻转效果Image Sprites图片精灵
    CSS three column layout
    css 自定义字体 Internet Explorer,Firefox,Opera,Safari
    颜色选择器 Color Picker,Internet Explorer,Firefox,Opera,Safar
    CSS TextShadow in Safari, Opera, Firefox and more
  • 原文地址:https://www.cnblogs.com/lzq666/p/7630037.html
Copyright © 2011-2022 走看看