java00*0521
第一章:Java面向对象编程概述
抽象:我们在认识事物的时候只关注其中一部分而忽略次要部分。
面向对象:一种认识事物的方式,注重对事物整体的认知,更符合人类自然的思维习惯。
类:具有相同属性和行为的一组对象的集合。类是对象的抽象,对象是类的实例。类是一个模板,对象则是这个模板的具体实现。
面向对象的主要特征:继承、封装、多态。
继承的特点:具有层次结构,子类继承了父类的属性和方法。提高代码的重用性。
第二章:类
类 = 属性 + 行为
类是具有相同行为的一组对象的集合。
类是由数据和方法组成
属性:即成员变量(全局变量),定义在类里,并且在方法外。 属性的访问通过对象.(的)方式访问。
属性的特点:包含在对象之中,它的值发生变化,不会影响其他对象。
常量:作用1、见名知意 2、方便修改
常量在声明的同时必须进行初始化 静态类成员: static修饰的全局变量叫静态变量,也叫类变量。
类变量的值为所有对象所共享
引用类变成员(类变量和方法)不需要创建实例,可以通过className.variableName的形式直接引用。
静态变量的特点:1、唯一性 2、对象之外存放 2、加载时机在对象之前
静态变量是在类加载时产生,所以产生的时机在对象之前。静态方法产生于对象之前,所以不能直接访问非静态变量。
变量:命了名的内存空间,并且它的值可变化
垃圾回收站收集没有被变量指向的对象,回收堆内存中的对象。
构造方法特点:1、构造方法的名称必须要与类名相同
2、构造方法没有任何返回类型
构造方法的作用: 1、为对象分配内存
2、创建并初始化变量
3、初始化成员变量
4、返回引用
如果一个类里没有构造方法,系统会分配一个默认的无参构造方法。如果一个类有一个有参的构造方法,默认无参的构造方法就不存在。
第三章:继承
一个新类可以从现有的类中派生,这个过程称为类继承。现有类称为新类的父类(基类),新类称为现有类的子类(派生类)
继承可提高代码的重用性,使用extends关键字来实现。父类的方法和属性部分被子类的对象继承
如果一个类被申明成final修饰符,那么这个类就不能被继承了。
private修饰符的属性只能由本类调用,缺省成员可以由本类和同包内的其他类调用,protected成员可以由本类、同包内的其他类,以及不同包的子类访问。而public修饰符成员可以被所有的类访问。
父类的构造方法不能被它的子类继承.
子类对象构建时,会先去调用父类的构造方法。(没有父亲,哪来的儿子),并且子类需要通过父类构造方法的调用来完成从父类继承下来的属性初始化。
可以使用super()显式地调用父类的构造方法,如果父类构造方法有参数,也可以在括号中跟参数。
构造方法一旦有显示的申明,则隐式的构造方法就不存在了。这样,如果父类有显示、带参数的构造方法,则子类必须使用super(参数)显示的调用父类的构造方法
如果子类没有定义构造方法,系统会默认地添加一个无参的构造方法,并在第一句自动调用父类不带参数的构造方法super()。
在JAVA中,类的继承是单根继承,就是说一个类如果继承了另一个类之后,就不能再继承其他类了。
多态概念:允许一个父类变量引用子类,允许一个接口类型变量引用实现类对象。反过来却不行。具体表现为重载和重写。
使用instanceof的用于判断一个对象的实际类型,这个运算符用于判断一个对象是否是指定的类型。返回一个布尔值,是true表示匹配该类型,是false表示不匹配该类型。
子类重写父类的方法,访问修饰符必须和父类的访问修饰符相同,或比父类访问修饰符更大。
子类重写父类的方法后,在调用时优先调用子类的方法。子类没有该方法时,才去调用父类的方法。
第四章:接口
接口是抽象类的特例,在抽象类中的方法可以实现,也可以用抽象方法定义,但在接口中就只能是定义,不能有实现。
定义接口,使用关键字interface
接口里的方法都是public公有方法,即使不写,默认也是pubic的。其他的修饰符都无效。
接口定义出来,是要被类所实现的。定义一个类实现接口,就得实现接口里定义的所有的方法。使用关键字implements
接口是Java编程一项重要的技术,通过它可以实现多态,同时它也弥补了Java单一继承的不足。之前说到类是单根继承,一个类继承了另一个类之后,就不能继承其他类了。但现实生活中很多事物都同时拥有很多类的特性。为了解决这个问题,在JAVA中使用接口来进行描述这些事物不同的行为,在JAVA中一个类可以实现多个接口。这样的话,这个类就得实现每个接口所定义的方法。
接口中可以定义变量,但接口中的变量是公共的静态的常量。(public static final)
接口可以继承接口,继承之后会拥有父接口所定义的方法。集合框架JCF就是一个例子。Conllection是父接口,List和Set是子接口。接口可以是多继承。
一个类要实现一个接口,那么就得实现这个接口和这个接口父接口所定义的所有方法。
当一个类实现接口时,可以使用这个接口的变量去指向这个类的对象。
接口是在调用和实现中间加了一层。将调用和实现分离开来,增加程序的灵活性、扩展性和可维护性。
抽象类和接口区别:
1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
2、抽象类要被子类继承,接口要被类实现。
3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
6、抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。
7、抽象类里可以没有抽象方法
8、如果一个类里有抽象方法,那么这个类只能是抽象类
9、抽象方法要被实现,所以不能是静态的,也不能是私有的。
10、接口可继承接口,并可多继承接口
第五章:异常处理
什么是异常:异常是程序正常执行过程中出现的不正常的情况。
异常捕获的顺序:当一个异常发生或抛出。那么正常的程序执行序列将被终止,程序将对异常进行处理,我们称之为抛出异常被捕获。JAVA中通过使用try-catch语句把可能抛出异常的语句包起来。
所有异常类的超类是Throwable。在Throwable下有两个子类,一个是Error,另一个是Exception。Error是错误,程序员无法控制,Exception是异常,程序员可以通过异常捕获加以控制。例如:电脑运行中中毒了,我们可以通过杀毒软件来处理,处理完了以后可以继续使用,这叫异常,我们可以控制。但电脑出现了蓝屏或死机的时候,我们就不能进行任何操作了。这就是错误,我们无法控制。
怎样捕获一个异常:
a、 把正常运行的代码放在try块里。
b、 如果程序中出现了异常就把异常抛出在catch中,如果catch中能捕获抛出的异常。那么就会进行处理。处理的代码写在catch块中。
try程序块里面的语句是按顺序执行的语句
当try程序块里面的语句抛出一个异常的时候,程序的控制转向了相匹配的catch程序块,catch程序块里面的语句被执行。
当异常发生后,程序执行将忽略try程序块中剩余的语句,继续执行程序块后面的语句。
如果在try程序块中没有抛出异常,那么catch块将被忽略。程序将继续执行try-catch下面的语句
如果有一块代码不管是否发生异常抛出都要被执行,我们使用关键字finally。这样的机制有助于我们进行系统资源的回收。
第六章:数组
JAVA中,数组是一个具有相同类型数值的索引集合 关键字:相同类型 索引 集合
数组应用的范围:方便我们对具有相同类型数值进行排列和值的操作
数组的2种声明方式:
申明的方式有两种:int[] array; int array[]
在Java语言中, 一个数组是一个引用数据类型。也就是一个对象。所以在进行数组赋值时,也必须得使用new 修饰符,通过产生对象的方式为数组分配一个连续的内存空间。
语法如下:
int[] array=new int[5];//将数组变量array指向一个分配了5个元素大小的数组对象。
数组特点
数组名称引用整个数组所占的整片内存空间
每个空间所包含的值称为数组元素
通过下标(索引)引用数组中的每一个元素,从下标从0开始
数组的长度length(public 修饰符) 注意和String的length()方法区别
int array[]=new int[5];
System.out.println(array.length);//求出数组长度
结果是5。但最大下标是4,因为数组下标从零开始,最大下标等于数组长度减1
对于指定了长度的数组要初始化的化需要通过下标一个个的赋值很麻烦
int array[] =new int[5];
array[0]=9;array[1]=19;……
因此我们可以在声明数组的同时就初始化而不需要指定长度,长度默认是初始化元素的个数。元素之间使用逗号隔开
String[] array=new String[]{“41”, “62”, “35”,“54”};//数组长度为4
String[] array={“41”, “62”, “35”,“54”};
那么,注意这2种方式的区别:
在内存行为里的区别(指定长度的方式虽然在内存里开辟空间但是里面还没有放东西而另一种是开辟的同时往里面放入了值)
数组一旦创建,那么数组的长度就固定下来了,指定长度的方式可能会造成内存空间不足或空间浪费