初学java 之 环境变量配置win7 and linux
首先我们了解一下我们要配置的各个变量的含义: bin 可执行文件; lib 是sun官方库文件; src.zip 源代码
JAVA_HOME 配置安装目录
CLASSPATH lib 目录主要为java 查找类服务
PATH 可执行文件的路径,lib 目录可执行文件在所有目录下都能欲行
下面我们讲讲具体的配置过程:
首先打开我的电脑属性 如下图:
点击环境变量:
上面的用户变量只知针对当前用户的变量!建议修改下边的系统变量!
首先新建 JAVA_HOME 在值里面写上你的jdk 的安装路径 譬如我jdk 安装在f 盘 F:\Program Files\Java\jdk1.6.0_10
PATH 里面 F:\Program Files\Java\jdk1.6.0_10\bin;
新建CLASSPATH .;F:\Program Files\Java\jdk1.6.0_10\lib; 注意 前面的 . 表示当前目录 不同的变量之间 用分号隔开
linux 严格区分大小写
在终端输入 vi. bash-profile
进入vi 配置和 win7 的一样 注意的是 不同变量之间 用 冒号 隔开 后跟 $path
保存退出即可
可以用 java-version /javac 来验证是否配置成功!
为什么静态成员不能访问非静态成员
首先static的成员是在类加载的时候初始化的,JVM的CLASSLOADER的加载,首次主动使用加载,而非static的成员是在创建对象的时候,即new 操作的时候才初始化的;
先后顺序是先加载,才能初始化,那么加载的时候初始化static的成员,此时非static的成员还没有被加载必然不能使用,而非static的成员是在类加载之后,通过new操作符创建对象的时候初始化,此时static 已经分配内存空间,所以可以访问!
简单点说:静态成员属于类,不需要生成对象就存在了.而非静态需要生成对象才产生.
所以静态成员不能直接访问.
下面说说静态的特点:
1.随着类的加载而加载
也就是,说静态会随着类的消失而消失,说明静态的生命周期最长
2.优先于对象的存在
明确一点:静态是先存在的对象是后存在的
3.被所有对象共享
4.可以直接被类名多调用
实例变量和类变量的区别
1.存放位置
类变量随着类的加载存在于方法区中,实例变量随着对象的对象的建立存在于堆内存里
2.生命周期
类变量生命周期最长,随着“类”的加载而加载,随着类的消失而消失
实例变量随着“对象”的消失而消失
静态的使用注意事项:
1.静态方法只能访问静态成员(包括成员变量和成员方法)
非静态方法可以访问静态也可以访问非静态
2.静态方法中不可以定义this,super关键字
因为静态优先于对象存在,所以静态方法中不可以出现this,super关键字
3.主函数是静态的。
静态的利弊
利:对 对象的共享数据进行单独空间的存储,节省空间,没有必要没一个对象中都存储一份
可以直接被类名所调用
弊:生命周期过长,访问出现局限性(只能访问静态)
重写与重载常见问题
通常,派生类继承基类的方法,因此,在调用对象继承方法的时候,调用和执行的是基类的实现.但是,有时需要对派生类中的继承方法有不同的实现. 例如,假设动物类存在"跑"的方法,从中派生出马和狗,马和狗的跑得形态是各不相同的,因此同样方法需要两种不同的实现,这就需要"重新编写"基类中的方法
重写只能用于父类与子类之间!
重写的规则: 子类中的方法必须与父类中的方法一致,并且范围只能扩大不能缩小,例如父类中定义的方法是 public 型的 子类中的就不能写成protected 型否则会报编译错误!父类中的定义为protected 型的子类中的可以定义为public型的
重载,在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表不同,Java就会将它们看做唯一的方法。简单的说,一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。
重载是可使函数、运算符等处理不同类型数据或接受不同个数的参数的一种方法
重载的规则: 重载只发生在同类之中,并且只有参数列表不一样(包括参数列表的顺序 、 类型、个数)才可称之为重载,返回值类型不一样参数列表一样不能称之为重载!且 重载的返回值类型可以不一样
下面是重载和重写常见问题:
[java] view plaincopy
1. package test;
2.
3. public class OverLoadDemo {
4.
5. /**
6. [email protected]
7. */
8. public static void main(String[] args) {
9. OverLoadDemo o = new OverLoadDemo();
10. o.method(1, 's');// 没有 与参数一致的方法,这个时候就会有隐式转换 转换时 有就近原则 像 char 转化为 int 更方便故输出woainitingzai
11. }
12. public int method(int a,long b){
13. System.out.println("helloword");
14. return 0;
15. }
16. public long method(int a,short b){// 重载只是看参数列表的顺序 、类型 、个数 是否不一样 才算是重载
17. System.out.println("tingting");// 如果是返回值类型不同 方法名不同等等 都不能算是重载
18. return 0;
19. }
20. public int method(int a,int b){
21. System.out.println("woainitingzai");
22. return 0;
23. }
24. // public short method(int a,int b){ 不是重载编译错误
25. // System.out.println("我爱你婷!");
26. // return 0;
27. // }
28. }
29. class T extends OverLoadDemo{
30. // public long method(int a,long b){编译错误 如果子类的参数列表和父类的参数列表一样 且返回值类型不一样则会报编译错误
31. // System.out.println("hello");
32. // return 0;
33. // }
34. public int method(int a,char c){// 无编译错误也并不是覆盖 覆盖 就是 和父类的方法一样 返回值类型 方法签名都必须一样
35. return 0;
36. }
37. // private long method(int a,short b){//编译错误 如果把父类的这个方法改为private型的就无编译错误
38. // return 0;
39. // }
40. // long method(int a,short b){//缩小了父类的范围编译错误
41. // return 0;
42. // }
43. // protected int method(int a,long b) {//缩小了父类的范围 编译错误
44. // return 0;
45. //
46. // }
47. }
展开阅读全文