zoukankan      html  css  js  c++  java
  • 【Java学习笔记】2015.1.5

    1.classpath中的“.”表示当前的路径,所以配置classpath时要注意不能忘了“.”。如果不注意,会出现cmd下运行程序时,.java文件可以编译但是不能运行;
    一般的classpath配置如下:
    .;%JAVA_HOME%/lib/tool.jar;%java_home%/lib/rt.jar

     之所以提到这个,是因为在做后面程序的测试时,犯了这个错误,我在配置classpath时忘掉了“.”,于是一直报 NoClassDefFoundError的错误,然后发现是自己没有把当前路径加入到java的classpath,jvm当然找不到我编译好的class。

    2.关于Java主类中main方法里args的作用:
           args这里同样是用于传递参数,举例说明。假设我们的demo是Member_and_local.java,代码如下:
    public class Member_and_local {
      public static void main(String[] args){
        //测试main函数传参
            System.out.println( "第1个参数是"+args[0]+" 第2个参数是"+args[1]+" 第3个参数是"+args[2]);
        }
    }

      在我们用cmd命令行运行java程序时,一般情况下,首先 javac Member_and_local.java 编译,然后 java Member_and_local 运行,其实args给我们提供了一个传递参数的接口。只要我们代码中有相应的处理,可以在后面加上参数运行,例如图1中,我们执行java Member_and_local 李根 1 232,这样我们在程序中就可以通过args[0]来访问字符串“李根”,args[1]来访问“1”,args[2]来访问“232”

           图1.args使用测试          

    运行结果如上,第一次运行没有添加参数,程序报错,原因是:在没有参数输入时,我在程序中调用了args[0]、args[1]、args[2],当然指针溢出,而添加参数后,正常输出。
    另外,我们可以设置不同的参数类型,比如把String换成int,可以获得int型的参数;
    Public static void main( String[] int[] args){}
    综上,args是便于程序员做传参的一种方法。
     
    3.局部变量和成员变量
    我不知道java里怎么准确定义这两种变量,但是我的理解如下:
    局部变量:是指在所有方法中定义的变量(包括main方法),它只在方法执行过程中有效,存在于栈中,必须先做初始化才能调用,方法结束后,会被清空。
    成员变量:也叫全局变量,是指在类中定义的变量,存在于堆中;它在整个类中都有效,只要类不被回收,它就一直存在,并且会自动初始化。
    成员变量又可分为:类变量和实例变量
      (1)类变量:又叫静态变量,用static修饰,它可以直接用类名调用,也可以用对象调用,而且所有对象的同一个类变量都是共享同一块内存空间的。
      (2)实例变量:不用static修饰,它只能通过对象调用,而且所有对象的同一个实例变量是共享不同的内存空间的。
     
    下面举例说明:
    a.局部变量要初始化,成员变量会自动初始化
    public class Member_and_local {
        public static void main(String[] args){
            //测试局部变量
            //error: local variables must be initialed
            String name;
            int age;
            boolean sex;
            System.out.println( name+age+sex);
        }
    }

    此段程序会报错,因为name,age,sex是main方法中的局部变量在不初始化时会编译不通过,因为它未初始化

    而成员变量则不同,我们用如下代码测试:

    public class Member_and_local {
        public static void main(String[] args){
            Human ligen = new Human();
            ligen.getInfo();
        }
    }
    class Human{
        public static int population;
        private boolean sex;
        private String name;
        private int age;
        private Human partner;
        private double height;
        public void getInfo(){
            System.out.println( this.population+" "+this.sex+" "+this.name+" "+this.age);
            System.out.println( " "+this.partner+" "+this.height);
        }
    }    

    我们定义了一个Human类,并且定义了6种不同类型的成员变量,他们均未初始化,但是我们使用getInfo()方法直接访问成员变量,结果并未出错,而是如下

    0 false null 0 null 0.0
    那么可以看出各个类型的默认值如下表:
    类型(Type) int double String(Object) Human(Object) boolean
    默认值(default) 0 0.0 null null false
    其他类型可以在使用时具体查询,但是这里我们还是养成良好的习惯,将成员变量自动初始化。
     
    b.类变量可以用类名或者对象实例访问,实例变量只能用对象实例访问(类方法,实例方法同理)。用static关键字标注。
    public class Member_and_local {
        public static void main(String[] args){        
            //测试类变量和实例变量
            System.out.println(Human.population);
            Human ligen = new Human();
            System.out.println(ligen.population);        
        }
    }
    class Human{
        public static int population;
        public Human(){
            this.population += 1;
        }
    }

    结果为0 1;说明类变量可以同时被类对象,实例对象访问。

    4.引用中存放的不是对象地址,但是存放的内容可以找到对象的堆地址;

    public class Member_and_local {
        public static void main(String[] args){
            //查看引用中存放的是什么
            Human ligen = new Human();
            System.out.println(ligen);
        }
    }

    结果为

    Human@459189e1

    这个内容不是地址,但是应该可以用于寻找ligen这个对象的地址。修正:准确是 ligen.getClass().getName() + "@" + 16进制哈希码。

    5.java参数的值传递和引用传递

    java中方法的参数有可能是基本变量int,long,boolean等,也可能是普通包装类对象String,Object等。在做参数传递时,前者是值传递,也就是将原变量复制一份传给参数;后者是引用传递,则是将对象的引用复制一份传递给参数;这么一来就会导致一些问题,如果该方法对传入的参数做改变,值传递是不会影响原变量,但是引用传递则会影响原变量

  • 相关阅读:
    周星驰影片经典台词之《大话西游》
    周星驰影片经典台词之《唐伯虎点秋香》
    “喝酒脸红”并不是能喝酒的表现
    hereim_美句_2
    sql查询表N到M行的数据,查询表内最新标识列
    CSS半透明背景 文字不透明
    jquery最简单的右侧返回顶部代码(滚动才出现)
    大渝网招聘页面用到的 滚动后固定代码
    OFBiz应用https与http方式访问切换
    [ofbiz]解决load-demo花费过长时间的问题
  • 原文地址:https://www.cnblogs.com/jugg1024/p/4204474.html
Copyright © 2011-2022 走看看