【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);
    }
}

结果为

[email protected]

这个内容不是地址,但是应该可以用于寻找ligen这个对象的地址。

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

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

时间: 2024-10-07 07:08:24

【Java学习笔记】2015.1.5的相关文章

Java 学习笔记(2015.7.13~17)

Java 学习笔记(2015.7.13~17) Java this关键字 表示本类中的属性,调用本类中的方法 class Person {        private String name;         private int age;         public Person(String name, int age) {         this.name = name;//调用本类中的属性         this.age = age;//同上} //get&set方法:    

Java 学习笔记(2015.7.20~24)

Java 学习笔记(2015.7.20~24) Java Java 学习笔记(2015.7.20~24) 1.StringBuffer与StringBuilder的区别: 2.基本数据类型包装类 3.Date.Calendar.DateFormat等与时间相关的类 1.常用类String 2.正则表达式 3.常用类 StringBuffer 代表可变的字符序列 拆箱与装箱 包装类的应用 匿名内部类 数组 day11 day12 day13 day14 day11 父类中使用public定义的方法

Java学习笔记(2015.7.27~7.31)

Java学习笔记(2015.7.27~7.31) Java 课堂 Java学习笔记(2015.7.27~7.31) 小技巧 常用方法 1.List另一个子类--LinkedList 2.数组的常用方法 3.排序 1.二分法查找 2.数组转换为List 3.可变参数Type ... param (了解) 1.容器Collection 2.自动拆装箱(了解) 3.JDK增强for循环(了解) 4.泛型(掌握) 5.iterator与for在迭代中的区别 1.概念:保存多个对象的对象. 2.JDk为什

我的java学习笔记(一篇文章不定时更新)

Java学习笔记 一.      原则战略思想 l  方法:快速原型 l  小目标:找一个pdf书籍快速有一个小项目出现 l  辅助:计时 记录各个学习环节的时间消耗. l  辅助:音乐 激情 l  您在博客园的登录用户名是:杂家随谈  [email protected] l 二.      WBS以及计时 步骤 计划时间 实际时间 搭建环境 2015/5/26 PDF 2015-5-26 小项目大框架实施 2015-6-1 三.      杂感 感觉难的时候,不妨站高点,站远一点看问题. 天下

Java学习笔记3-操作符

Java基本操作符:+.-.*./.%.=.==.!=.+=.-=. 优先级:先乘除后加减,如果是连接符+号会优先往前匹配,比如 a+++++b,会被解释称 a++ ++ +b,所以会报错,需要自行使用括号隔离为 (a++) + (++b). 对象的引用如果赋值给了对象的引用后,2 个对象将指向同一个引用,有一个对象的引用重新赋值后将同时影响到另一个对象,比如 ClassName classA = new ClassName(); ClassName classB = new ClassName

java学习笔记10--泛型总结

java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note10.html,转载

Java学习笔记_25_Collections类

25.Collections类: Collections类是一个工具类,用来对集合进行操作,它主要是提供一些排序算法,包括随机排序.反相排序等. Collections类提供了一些静态方法,实现了基于List容器的一些常用算法. Collections的一些方法列表: · void sort(List): 对List内的元素进行排序. · void shuffle(List): 对List内的元素随机排序. · void reverse(List): 对List内的元素进行逆序排列. · voi

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

java学习笔记8--接口总结

接着前面的学习: java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note8.html,转载请注明源地址. 生活中的接口: 什么是接口? 一个Java接口是一些方法特

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my