---恢复内容开始---
第一部分:
1、面向对象的程序单位:类,面向结构编程的程序单位:函数
2、面向对象的语言特点:继承、多态、封装。java只支持单继承。
3、类定义 = 成员变量(状态数据、Field)+方法(行为)
4、java是强类型语言:1.所有变量必须先声明后使用2.指定的变量只能接受与之匹配的值。编译时检查语法。
5、java支持类型两类:基本类型(boolean类型+数值类型)和引用类型。
基本类型:boolean(值只能是true或false,不是0,1) + 数值类型(整数类型(byte:一个字节、short(2)、int(4)、long(8)、char(2))+浮点类型(float(4)、double(8)))
引用类型(对一个对象的引用包括实例和数组,实际是个指针,但java不使用指针说法):类+接口+ 数组类型+null类型(这种类型没有名称)
6、数值类型转化:自动类型转换:范围小----》范围大的,否则为强制类型转换。
转换:基本类型-----》字符串类型: 基本类型+“”;
强制类型转换方法:(要转换的类型)基本类型变量
表达式类型自动提升:所有byte、short、char---->int,表达式中类型提升为表达式中最高的。
7、直接量的赋值:string、null、boolean,存储在常量池,常量池在编译期被确定,并被保存在已编译的.class文件的一些数据,包括类、方法、接口中的常量,字符串直接量。String类型是不可改变的类,对象被创建后不能被改变。
8、数组类型:是引用类型。
type[] arrayName;仅仅定义一个引用变量,没指向任何有效内存,因此不能指定数组的长度,也不能使用。初始化后才能用。初始化就是给数组元素分配内存空间。
初始化:静态:指定每个数组元素的初始值,系统决定长度 int[] a = {5,7,20}
动态:指定数组长度,系统分配数组初始值,如0。 int[] b = new int[4];
访问:foreach,不用知道数组元素个数。
数组是引用数据类型,数组元素和数组(引用)变量在内存中分开存放的,引用变量可以指向任何有效的内存.定义并初始化一个数组后,在内存中分配了两个空间,一个存数组的引用变量,一个存数组本身。
1)基本类型数组初始化过程如下:b = a;后
2)引用数组类型: 数组元素存储的依然是引用
当一个方法执行时,会建立自己的内存栈,方法内定义的变量(局部变量),逐个放入栈内存,方法结束,内存栈销毁;在创建一个对象时,对象保存在数据区(堆内存),以便反复利用,对内存的数据区不会随方法结束而销毁,直到一个对象没有任何引用变量引用时,系统垃圾回收机制回收。
第二部分:类
继承
组合
类的组成:构造器+ 成员变量(Field)+方法+初始化+内部类
无构造器的类,无法创建实例,若不写,默认提供一个构造器。
关键字:
1.static 修饰的变量和方法为类变量(静态变量)和类方法(静态方法),属于类,既可以用类调用,也可以用实例调用。普通成员和方法(实例变量和方法、非静态变量和非静态方法)属于单个实例。静态成员不能访问非静态成员,只能用实例调用。
2.构造器:通过new关键字来调用某个类的构造器,即可创建这个类的实例。
实例创建过程: 堆内存中的对象,只能通过对象的引用操作对象,不允许直接访问。Person p = new Peoson();p.name='';p.age= ‘’;
3.this:指调用该方法的对象,让类中的一个方法访问另一个方法,static修饰的方法中不能有this。this一般可省,但类中有同名的成员变量时,this省略时,局部会替代成员变量,用this可表示成员变量。
4、java方法中参数传递方式:值传递(复制品,复制品的改变不会对原参数带来影响)
1)传基本类型参数
工作原理
2)传对象
原理:传的是对象的引用,现在形参实参都是只统一地址。
若最后在swap里声明dw = null.则swap战区的dw失去对该地址的引用,然后返回结果a,b不变。
5、可变形参数:(String...books)三个冒号
6、方法重载:同一个类中,同名方法,参数不同,其他无限制。
7、变量分类:
类变量:作用域是整个类的生存空间,从类准备阶段起就存在
实例变量:从实例被创建到实例被销毁
8、成员变量的初始化和内存中的运行机制:类加载时或者创建实例时,系统自动为成员变量分配内衬空间,是堆内衬,被类共享,一个实例改过,其他的实例也生效。
局部变量:尽量缩小范围。
9、访问控制符: private -->default--->protected--->public(级别有小到大),用于控制成员,局部变量不需要访问控制符修饰,通过访问控制符实现封装。
private:类内部,default:包,protected:包,或不同包的子类,希望子类重写方法。public:所有类访问。源文件名必须与public修饰的类的类名相同。
private修饰的方法(工具方法)要提供get,setter方法。
protected:希望被子类重写,不想被外界直接调用。
包package name :是为了解决类的命名冲突,类文件关联。javac -d . hello.java,-d将类文件放在包指定的目录下。
10.java的常用包:java.lang包含核心类,如String、math、system和Thread。无需导入,系统会自动导入
java.util 包含大量的工具类/接口和集合框架类
11、构造器:调用构造器之前,系统已经为对象分配内存,并对这个对象进行默认初始化,对象已经产生啦,但是不能被外部对象访问,只能在构造器里通过this引用,当执行完构造器后,这个对象作为构造器的返回值返回,外部可以访问该对象。
构造器重载与方法重载类似,参数不同,构造器里可以使this调用另一个重载的构造器,并且作为第一条语句。
12、继承:子类扩展了父类,有时会需要重写父类的方法。如果需要在子类的方法中调用父类被覆盖的方法,用super(被覆盖的实例方法)或父类类名调用父类被覆盖的方法,super不能用在static修饰的方法里。
13、构造器:在创建对象时进行初始化,构造器不能直接被调用,必须用new关键字调用。系统默认初始化,把所有基本类型的实例变量赋值为0,false,把所有引用类型的实例变量赋值为null.
但通过new关键字调用构造器时,构造器返回对象,但对象不完全是构造器创建的。在构造器执行前,系统就创建了对象,只是不能被外界访问,只能在构造器种this来引用。构造器执行后,对象作为构造器的返回值返回,附给另一个引用变量,从而外部可以访问。
super:限定来调用父类被覆盖的实例方法。
重载:
1)方法重载:同个类,同个方法名,不同参数,也存在子类重载父类的方法。
2)构造器的重载
如果两个同名方法有相互包含的情况,一个方法如何调用另一个方法:
1)普通方法可以直接在一个方法调用另一个方法。可直接在B中调用A方法。this.A().
2)一个构造器调用另一个构造器,this(参数).
重写:子类里重写父类的方法,方法名相同。两同(方法名和形参)两小(子类返回类型和抛出异常要小或等于父类)一大(子类方法的访问权限要大于父类)。f
super关键字:用来限定对象从它父类得到的实例变量或方法。被覆盖的方法必须同为类方法或实例方法。
某个方法访问a的成员变量,但没有显示指定调用者,则系统查找a的顺序
1)方法种
2)当前类、
3)a的直接父类,依次上溯
当创建一个子类的对象时,系统不仅为该类定义的实例变量分配内衬,也为从父类继承的实例变量分配。
构造器的调用顺序:从java.lang.object一直到父类再到子类
java引用变量有两类,编译时(声明该变量时的类型决定)和运行时(实际付给变量的对象觉得)。
多态:编译时类型和运行时类型不一样,出现多态。相同类型变量,调用同一个方法时呈现多种不同的行为特征。只有方法存在多态性,实例变量不存在,表现为父类的实例变量。
列:BaseClass p = new SubClass;编译类型Base,运行类型SubClass,调用方法时,子类覆盖父类的方法,实际调用的是子类的方法。向上转型,系统自动完成。不能调用父类不存在的方法。
---恢复内容结束---