Java学习(三)
Java学习(三)
面向对象编程
-
面向对象的本质:以类的方式组织代码,以对象的组织(封装)数据
-
三大特性:1.封装
2.继承
3.多态
-
理解类和对象:先有类,后有对象,类是对象的模版
注:一个项目里面只有一个Application里面有main方法,其他都是类,类里面包括了属性和方法
this关键字
- this表示本对象
- 用于访问类中的成员变量
- 用来区分局部变量和成员变量的问题(重名问题)
类与对象
构造方法
- 没有返回值,与类名相同的public方法
- 一个类即使什么也不写,也会有构造方法(无惨构造)
- 使用new关键字本质就是调构造方法,必须有构造方法
- 需要自己写一个有参构造
- 如果写了有参构造,必须将无参构造写出来
- 快捷键(mac:command+n)
public class Person {
String name;
int age;
//无参构造
public Person() {
}
//有参构造
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
封装
- 属性私有,get/set
- 统一接口
- 系统可维护增加
- 隐藏代码的实现细节
- 提高程序的安全性
Private关键字
- 属性私有(不能对属性随便操作了,得通过get/set)
- 属性私有后,需得为属性写get和set方法
继承
- 对一批类的抽象
- extends:继承就是子类对父类的扩展
- 子类继承父类的公有方法并有自己私有的方法
- 私有的东西无法被继承
object
- Java只能单继承
super和this的区别
-
super调用构造方法,必须在构造方法的第一个
-
super必须出现在子类的构造方法和方法当中
-
super和this不能同时调用构造方法
-
this没有继承也可以使用,super只能用于继承条件下
-
this()表示本类的构造,super()表示父类的构造
-
super表示的是父类,比如super.name指的是继承的父类里的name属性
-
this表示的是当前类,比如this.name指的是当前类里面的name属性
-
父类的引用指向了子类
方法的重写
-
都是方法的重写和属性无关,重写和非静态方法有关
-
在mac系统下要重写父类的方法是:control+回车键选中override
-
静态方法和非静态方法:有static的时候调用的是类的方法,没有static的时候调用的是对象的方法
-
静态方法的调用只和左边类型有关
-
非静态方法的调用和右边的new的类型有关
-
重写的时候不能是private限制
-
以下几种方法不能重写: static方法它是属于类
final属于常量 private属于方法的私有
补充
- 修饰符范围可以被扩大,但是不能被缩小。 public>protected>default>private
- 抛出异常范围可以缩小但是不能扩大。 ClassNotFoundException-------->Exception(大)
多态
-
父类引用类型指向子类,下面代码示例
-
多态是方法的多态而不是属性的多态
-
对于引用子类对象的父类引用对象,如果子类重写了父类的方法,则运行时父类引用对象会调用子类的方法;如果子类继承了父类的方法(未重写),则运行时父类引用对象会调用父类的方法
-
一般系统自动是由低转高类型
多态的使用条件
- 继承:多态中必须存在有继承关系的子类和父类
- 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法
- 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法
Father father = new Son(); //向上转型
抽象类
- 用abstract关键字来修饰的类
- 用abstract关键字来修饰的方法称为抽象方法,只有方法的名字没有方法的实现
- 毕竟是个类,只能单继承,不能多继承(一个类只能继承另一个类,一个孩子只有一个父亲)
- 抽象类不能new出来只能靠子类去实现它
- 抽象类中也可以写普通方法,但抽象方法必须写在抽象类中
public abstract class Test {
//抽象方法
public abstract void say();
//普通方法
public void go(){
System.out.println("go!!");
}
}
接口
- 关键字不再是class而是interface
- 接口中所有定义的都是抽象的,默认都是public的
- 接口都需要实现类(Impl)
- 实现了接口中的类都需要重写所有的方法
- 接口可以多继承
public interface Method {
void test(); //public是默认的
}
异常
错误和异常的区别
- 错误(Error)是灾难性的,是程序无法控制和处理的
- 异常(Exceotion)是可以被程序处理的,并且在程序中应该尽可能的去处理
异常处理机制
抛出异常
- 主动抛出异常一般在方法中使用
捕获异常
- 通常用try···catch····(finally)
- 快捷键:command+option+t
public class Application {
public static void main(String[] args) {
int a = 0;
int b = 1;
try { //监控异常区域
System.out.println(b/a);
} catch (Exception e) {
//catch(想要捕获异常的类型) 捕获异常
System.out.println("exception");;
} finally {
//处理善后工作
System.out.println("finally");
}
}
}
异常处理的五个关键字
- try:监控区域
- catch:捕获异常,catch括号里放的是捕获的异常类型。
- finally:处理善后工作
- throw
- throws
异常小结
- 在处理异常的时候时,采用逻辑合理去规避辅助try····catch····
- 在多重catch块后面,加一个catch来处理异常
- 对于不确定的代码,可以加上try···catch···处理潜在的异常

浙公网安备 33010602011771号