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等。在做参数传递时,前者是值传递,也就是将原变量复制一份传给参数;后者是引用传递,则是将对象的引用复制一份传递给参数;这么一来就会导致一些问题,如果该方法对传入的参数做改变,值传递是不会影响原变量,但是引用传递则会影响原变量。

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

  1. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  2. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  3. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  4. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  5. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  6. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  7. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  10. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

随机推荐

  1. 存储过程如何传变量到like下

    存储过程中执行如下DDL语句create or replace procedure etl_test(v_com varchar2) is v_spname varchar2(40); com var ...

  2. leetcode-15双周赛-1289-下降路径最小和

    题目描述: 方法一:动态规划 O(N^3) class Solution: def minFallingPathSum(self, arr: List[List[int]]) -> int: n ...

  3. git常用操作命令2

    以github为例,测试本地库与远程库github之间的交互 1. 本地初始化一个git库     创建一个test文件夹,然后cd到test文件内, 执行git init命令  初始化本地库成功!! ...

  4. php str_pad()函数 语法

    php str_pad()函数 语法 str_pad()函数怎么用? php str_pad()函数用于把字符串填充到指定长度,语法是str_pad(string,length,pad_string, ...

  5. 2017 山东一轮集训 Day2 Shadow (三维凸包点在面上投影)

    在三维坐标中,给定一个点光源,一个凸多面体,以及一个平面作为地面. 求该凸多面体在地面上阴影的面积. 这三个点共同确定了一个平面,这个平面就是地面.保证这三个点坐标互异且不共线.前三行每行三个实数,每 ...

  6. Python基础教程(014)--缩进错误

    前言 学会编写格式 内容 print(“HelloWorld”) print(“HelloWorld”) ----缩进错误 print(“HelloWorld”) 错误信息: IndentationE ...

  7. css 图片 和 文本 的处理

    图片 1.css3已经可以实现 img标签 和 img内图片分开处理的功能了.类似标签的背景图.   https://www.zhangxinxu.com/wordpress/2015/03/css3 ...

  8. [CSP-S模拟测试]:Lighthouse(哈密顿回路+容斥)

    题目背景 $Billions\ of\ lighthouses...stuck\ at\ the\ far\ end\ of\ the\ sky.$ 题目描述 平面有$n$个灯塔,初始时两两之间可以相 ...

  9. (转)JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

    转:https://my.oschina.net/feichexia/blog/196575?p=3 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不 ...

  10. appium 链接真机后,运行代码,但是APP并没有启动

    要淡定,链接真机后,问题一下多出来这么多,还没有启动程序,就碰到接二连三的问题. 爽到家了.慢慢解决吧. 具体问题是这样的: # coding=utf-8from appium import webd ...