1、类和对象
什么是类
类是从一组对象中抽象出来的,类是模版,是抽象的概念;定义了对象将会拥有的特征(属性)和行为(方法)
关系
类是对象的抽象(类型),对象是类的实例
使用
定义类:使用class关键字
创建类的对象:使用new关键字,调用构造方法
引用对象的属性:对象名.属性;引用对象的方法:对象名.方法名()
2、类的无参、带参方法
语法
[访问修饰符] 返回值类型 方法名(参数列表){<br> 方法体<br>}
访问修饰符(可见性)
本类 同包 子类 其他<br>public Y Y Y Y<br>protected Y Y Y Y<br>默认 Y Y <br>private Y <br>注:Y代表可见
返回值类型
无返回,使用void;有返回值,可以是基本数据类型,引用数据类型,必须有return
返回值类型
无返回,使用void;有返回值,可以是基本数据类型,引用数据类型,必须有return
参数列表
语法:数据类型 变量名。多个参数使用“,”分隔;
方法定义时的参数列表称为形参;调用方法时,传入的参数称为实参。正确调用方法,参数的类型、个数、顺序需一致
无返回值(void),无参
void eat(){<br> //方法体<br>}
无返回值,有参
void eat(String str){<br> //方法体<br>}
有返回值,有参
String eat(String str){<br> //方法体<br> <font color="#c41230">return</font> “”;<br>}
方法执行需要“外部“传入数据,则定义参数列表;方法执行需要有反馈,则定义返回值类型,必须有return,且return的是返回值类型的值。
方法调用
同类,直接写方法名,或this.方法名
不同类,必须先新建对象,在通过对象名.方法名的方式
成员变量
定义在类中,方法外,在整个类中可用,不赋初始值时,系统默认赋相应类型的初始值
局部变量
定义在方法中,在方法中有效,必须赋值才能使用,系统不赋初始值。
成员变量和局部变量同名时,使用局部变量
方法重载
同一个类中,方法名相同,参数列表不同(参数的类型、个数、顺序),与访问修饰符和返回值类型无关
3、对象和封装
构造器
语法:访问修饰符 方法名(参数列表){<br> 方法体<br>}
方法名需与类名相同
无返回值类型
作用:初始化对象
系统默认添加无参构造;自己添加后,系统不提供无参构造。
static
修饰成员变量,静态变量
增加一种调用方式,可通过,类名.变量名。不允许修饰局部变量
被所有的对象所共享,在内存中只有一个副本,当且仅当在类初次加载时会被初始化,属于类
修饰成员方法,静态方法
类名.方法名
静态方法中不能访问非静态成员变量和方法,因为他们依赖于对象;反之,可以。
修饰代码块,静态代码块
类初次被加载时,按static块的顺序来执行,只执行一次
static{<br>}
误区
1.static关键字会改变类中成员的访问权限吗? 不会
2.能通过this访问静态成员变量吗? 可以
封装
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作盒访问
好处:
隐藏类的实现细节
只能通过规定方法访问数据
提高复用性
代码逻辑更安全
三步走
修改属性的可见性,private
创建公有的getter/setter方法
在需要的地方,加入控制语句
this
指当前对象本身
调用属性
调用方法
调用构造方法
this(),需在构造方法中的第一句
4、继承
父类的由来:其实是由多个类不断向上抽取共性内容而来的。
只支持单继承
subClass <font color="#c41230">extends</font> supClass
super
代表父类对象;只能出现在子类的方法和构造方法中;
调用父类属性,super.name
调用父类方法,super.print();
调用父类构造方法,super()
子类构造中,需第一句
不能被继承的父类成员
private成员
子类与父类不在同包,使用默认访问权限的成员
构造方法
何时使用继承
符合is-a关系的设计,藏獒是一种狗
方法重写
子类中,方法名相同,参数列表相同,返回值类型相同或是其子类,访问修饰符不能比父类严格
Object类
所有类的父类
toString()返回当前对象本身的有关信息,按字符串对象返回 <br>
equals()比较两个对象是否是同一个对象,是则返回true <br>
hashCode()返回该对象的哈希代码值
getClass()获取当前对象所属的类信息,返回class对象
abstract
抽象方法
没有方法体
必须在抽象类里
抽象方法必须在子类中被实现,除非子类是抽象类
final
修饰的类,不能再被继承
修饰的方法,不能被子类重写
修饰的变量变成常量,只能在初始化时进行赋值
5、多态
定义:同一个引用类型,使用不同的实例而执行不同操作。(同一种操作,优于条件不同,产生的结果也不同)
三要素
具有继承关系(继承是多态的基础)
子类重写父类方法
使用父类的引用指向子类的对象
Pet pet = new Dog();
实现的两种方式
使用父类作为方法形参实现多态
使用父类作为方法返回值实现多态
instanceof
对象 instanceof 类或接口
通常和强制类型转换结合使用
6、接口interface
成员修饰符
成员常量
public static final
成员函数
public abstract
特点
是对外暴露的规则
是程序的功能扩展
可以用来多实现
类和接口之间是实现(implements)关系,类可以实现多个接口
接口和接口之间可以有继承关系
新特性
1.8中,允许有静态方法
public interface NewInterface {<br> static void staticMethod() {<br> System.out.println("staticMethod");<br> }<br> default void defaultMethod() {<br> System.out.println("defaultMethod");<br> }<br>}
允许有default方法
调用
静态方法:接口名.方法名
default方法:
需实例化实现类,再调用方法;
7、异常
定义:在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序 <br>
关键字
finally
无论是否发生异常,代码总能执行
注:不执行的唯一情况,catch块中,System.exit(1);中断程序,退出java虚拟机
通常用来做资源释放操作:关闭文件,关闭数据库连接等
throw
手动显式的抛出一个异常。throw语句的后面必须是一个异常对象。
throws
声明方法可能要抛出的各种异常
将函数中可能出现的异常向调用者声明,而自己则不具体处理。
Object
Throwable
Error
Error类以及他的子类的实例,代表了JVM本身的错误
VirtulMachineError
StackOverFlowError
OutOfMemoryError
AWTError
Exception
RuntimeException
ArithmeticException
MissingResourceException
ClassNotFoundException
NullPointerException
ArrayIndexOutOfBoundsException
IllegalArgumentException
UnKnowTypeException
IOException
EOFException
FileNotFoundException
分类
非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常
检查异常(checked exception):除了Error 和 RuntimeException的其它异常。javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)
异常处理的9个最佳实践
1、在 Finally 中清理资源或使用 Try-With-Resource 语句
2、抛出更具体的异常
3、为你的异常编写文档
4、将描述信息与异常一同抛出
5、优先捕获具体的异常
6、不要捕获 Throwable
7、不要忽略异常
8、不要同时打印并抛出异常
9、包装异常但不要丢弃原始异常
http://www.importnew.com/29603.html