Java-------->>类与对象

(一)重要知识点

内存分析:

 

内存分析:运行原理:首先将.class将代码加载到code segment,然后解析code,此时会牵扯到其他三块的内存区域
code segment:
data segment:静态static变量,字符串常量
stack:局部变量
heap:new出来的对象
引用(即对象)和new出来的存储可能不同,引用(局部变量)在栈中,new出的存在堆中

案例:

内存分析:
从main方法开始:
关键点基本类型是值传递,而引用类型是地址传递
方法结束,如果是void传递结束,形参在栈的存储空间消失
如构造方法:public Date(int year,int month,int day){
this.year=year;
this.day=day;
this.month=month;
}
main{ Date date=new Date(1111,11,11);}
内存变化:
date为引用变量存在栈中并同时在堆中申请一块内存有new的东西(属性等),调用Date的构造方法,形参year,month,day为局部变量存在栈中,然后将1111,这些值赋给形参,并形参
的值给堆中的实参,方法结束,这些形参在栈内存中消失。mian结束,对象消失,栈中date引用对象和new 出实参值消失

 

Static用法:

1,static 作用于方法时:该方法属于类方法,无需本类的对象即可调用此方法(可以直接通过类来调用),局限性:只能调用static 方法和数据,且不能以任何方式引用this和super关键字。

2,static作用于变量:相当于全局变量,static以最后一个调用为准(可统计方法被执行的次数),static{}这类静态块优先执行,不论顺序,静态变量只会需要要初始化一次,即未其分配好了内存,而如果普通的全局变量每调用该类,都会被执行一次。

3,static作用于类时:即内部静态类,可以直接做为普通类来new 出来   详细见这里

变量对比分析:

static(类)变量和全局(实例)变量,局部变量:
1,类变量被多个对象共享,生命周期跟类一样,存储在共享方法区中,类加载的时候产生
2,全局(实例)变量,是单个对象变量,不共享,生命周期跟类一样,存储在堆内存中,对象实例时出现,通过访问控制符来设置子类访问权限。
3,局部变量没有默认值,所以局部变量被声明后,必须经过初始化(不一定),才可以使用。存储在栈中,和方法共生命

This用法:

1,调用本类中的属性;2,调用本类中的其他方法(静态方法不能)3,返回对象的值(如:return this)

参数的传递

传递方式:值传递(实参传入给形参),而非对象传递,在传递的参数区分好是基本类型(传值)还是引用类型(形参为地址值)

传递多个同类型的参数 如test(int i ,String ...books)

Super方法:调用父类的方法,如super.成员变量,super(方法参数)

Final关键字:

1,final修饰基本类型和引用类型区别:基本类型:值不变,引用类型:引用地址不变,对象内容可以改变。

2,final修饰的方法不能被重写

3,final修饰的类不能有子类

方法的重载:方法名相同和参数列表不同,与返回类型等无关

方法的重写:两同两小一大

1,方法名相同,参数列表相同

2,方法返回类型小于或等于父类,子类抛出的异常小于等于父类

3,方法访问权限大于等于父类

变量说明:

    

访问权限:

 

 包的分类:

    

==与equal一些易忘点:

    1,对于基本类型变量,只要两个变量都是数值类型且值相等,则==成立如(3==3.0F)true;和(65=='A’)true,对于对象,要求引用类型指向同一个对象,则返回True

    2,字符串常量池,如String a="23";String b="2",String c="3";String d=b+c; a==d false;a=b+"3" false;//因为在编译时无法确定(在赋值时不能直接识别类型。)

抽象类和抽象方法的特点:

1,抽象类和抽象方法必须用Abstract修饰,且抽象方法没方法体,如public abstract String test();即可无括号

2,抽象类无法被实例化(即new)

3,抽象类中可以包含成员变量,方法体(抽象方法和普通方法),构造器,初始化块,内部类(接口,枚举)

4,含有抽象方法的类只能定义为抽象类

接口:

1,抽象类中可以包含成员变量,方法体(抽象方法和默认方法(default),类方法(static)(Java8允许的)),内部类(public static修饰)

2,成员变量默认public static final ;方法默认是public abstract

3,接口支持多继承,

内部类:

1,内部类有(private,protected,static)三个权限访问,内部能访问外部变量,而外部不能直接访问内部成员(可以借用对象)。

2,非静态内部类不能含有静态变量,方法,初始块

3,静态内部类:静态类不能访问实例成员(即非静态)

4,局部内部类:声明在方法中,不能设置static和访问权限,

5,匿名类:1,不能为抽象类;2,不能定义构造方法(匿名类没有类名);

枚举类与普通类区别:

 垃圾回收机制:

    

 

 

 

 

 

 

其中堆内存对象的三种状态转换:

Jar文件常用命令:

1,创建jar:jar cvf hello.jar hello//c:创建  f:文件信息  v:详细过程报告

2,解压jar:jar xvf hello.jar //x:解压

3,往jar中添加文件:jar uf hello.jar HelloWorld.java //u:添加

4,显示jar内容:jar tvf hello.jar 

posted @ 2017-04-22 10:15  DamonDr  阅读(241)  评论(0编辑  收藏  举报