.;%JAVA_HOME%/lib/tool.jar;%java_home%/lib/rt.jar
之因此提到这个,是由于在作后面程序的测试时,犯了这个错误,我在配置classpath时忘掉了“.”,因而一直报 NoClassDefFoundError的错误,而后发现是本身没有把当前路径加入到java的classpath,jvm固然找不到我编译好的class。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使用测试 jvm
Public static void main( String[] int[] args){}
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()方法直接访问成员变量,结果并未出错,而是以下this
0 false null 0 null 0.0
类型(Type) | int | double | String(Object) | Human(Object) | boolean |
默认值(default) | 0 | 0.0 | null | null | false |
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;说明类变量能够同时被类对象,实例对象访问。spa
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进制哈希码。code
5.java参数的值传递和引用传递
java中方法的参数有多是基本变量int,long,boolean等,也多是普通包装类对象String,Object等。在作参数传递时,前者是值传递,也就是将原变量复制一份传给参数;后者是引用传递,则是将对象的引用复制一份传递给参数;这么一来就会致使一些问题,若是该方法对传入的参数作改变,值传递是不会影响原变量,可是引用传递则会影响原变量。