- 类与对象
1.类与对象:类是具有相同属性和方法的一组对象的集合,类是一组对象的高度抽象,对象是类的一个具体的实现。
2.所有类都可以抽象为顶级类Object
3.权限设置
- 类的方法
1. 结构
[权限修饰符] 返回值 方法名(参数列表,.....){}
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
ex:
public String sayHello(String name,int age){
return "Hello,"+name+age;
}
//返回自己定义的类型
public Userinfos getUser(int age){
Userinfos u = new Userinfos();
u.age =age;
return u;
}
//无返回值
public void printer(String name){
System.out.println(name);
}
2. 传值和传址
1. 作为方法的参数,一般称为形参,而传入的数据一般称为实参
2. 如果形参的类型是基本类型和String类型,那么实参实际传入的只是一个复制过的值,形参修改不会影响到实参,除此以外所有其他的类型,在传递的时候实际传递的是地址,会造成实参和形参实际上是同一个对象,所有形参修改会影响到外部实参。
3. 初识重写和重载
1. 重写:在子类中重新覆盖父类中的方法,要求是方法名一致,参数列表一致,返回值一致,权限子类大于或等于父类的权限(简称:方法原形一致)而方法内容重新修改.
2. 重载:在同一个类中,方法名相同,参数列表不相同(包括3种情况:1.参数类型不同 2.参数个数不同3.类型次序不同) ,与权限和返回值无关
3. 重载的优点:减少用户记忆多种不同的方法,要求同一类型的行为才可以设置为一系列同名的方法
//重写(原形与父类一致,权限>=父类权限)
public String toString() {
return id+code+name+pwd+age;
}
//重载(注意参数与同类的其他同名方法不能一样)
public String toString(String s){
return id+name;
}
public String toString (int i){
return name+pwd;
}
public String toString(int a,String b){
return "111";
}
//重载与权限和返回类型无关
int toString(String a,int b){
return 333;
}
- static和this
1.static 静态关键字
static可以使用在属性和方法的前面,代表该属性或方法是属于类的方法和属性,在内存的表现上使用该关键字的属性和方法,都只有唯一的一个副本,调用static定义的属性和方法,一般只需要用类名.属性(方法名)就好,不需new
//静态属性
public static int i=10;
//静态方法
public static String eee(){
return "123";
}
//静态方法或属性的调用方法
类名.属性(方法名)
ex:
Demo.i;
Demo.eee();
2. this关键字
this关键字代表的是当前对象,实际上是由JVM(java虚拟机),从方法的第一个参数位置,使用隐藏形式,传输进去,所有该关键字只能在方法的内部使用。
PS:
1.非静态方法调用静态的方法或属性可以直接调用
2.静态方法不能直接调用非静态的属性和方法
3.静态的方法中不能使用this关键字
4.使用this()调用其他构造器时,必须把该代码放在构造器的第一句位置上
3. 构造器
1. 构造器又称为构造方法,构造方法作用是用于数据初始化.
2. 构造器写法要求:与类同名\没有返回值
public class Demo{
public Demo(){
}
}
3.构造器在用户new的时候,JVM会自动调用.用户自己不能调用
4. 在用户不建造构造器时,JVM会给类自动建立一个无参的构造器(同上例),但是用户一旦定义了一个构造器,那么JVM就不再会建造无参构造.
- 继承和多态
1. java中的继承使用关键字extends
public class Admin2 extends Admin{
}
2. java中的继承是单根继承
3. java中父类的构造器,子类无法继承. 父类的私有方法 虽然子类可以继承,但无法使用
4. 父子构造器运行顺序: 首先父类的静态属性>父类静态块>子类静态属性>子类静态块>父类的成员变量>父类构造>子类成员变量>子类构造
5. 静态块 在代码中只会执行一次
6. 在一个类中,如果多个(两个或两个以上)方法有相同的代码,则抽出编写共享方法.如果再多个(两个或两个以上)类中有相同的方法或属性则提取父类.
7. super关键字代表父类
1. super.[方法或属性] 在子类中调用父类的属性和方法
2. super() 从子类中向父类的构造器传参
8. 多态:
1. 多态形式: 重写和重载
2. 多态使用:通常我们把父类作为方法的参数,而把任意的子类作为实参传递给该参数,JVM会自动根据传入的子类,执行子类中的方法
3. 上转型:把子类填充到父类中,只可调用子类与父类重叠的部分代码称为上转型
4. 下转型:把填充了子类的父类,再转回带该子类的过程称为下转型
ps:
1. 上转型后看到的虽然是父类,实际上JVM知道该类还是子类
2. 下转型必须是转型前的子类类型,否则会造成ClassCastException异常
Father fat = new Son();//上转型
Son son = (Son) fat;//下转型
- 抽象和接口
1.抽象类的关键字是abstract
2. 抽象类格式:
public abstract class Father {
public Father(){
System.out.println("父亲");
}
public abstract void eat();//希望子类实现的抽象方法
protected void money(){
System.out.println("传给儿子");
}
}
3. 抽象类中的抽象方法是希望子类能够重写该抽象方法
4. 抽象类由于有部分方法没有实现所以不能new 但是由于抽象类可以被继承 所以抽象类可以有自己的构造方法
5. 抽象类中可以没有抽象方法(但是没有什么意义) 抽象类中可以所有方法都是抽象方法(一般代码开发中不会这么写,代码会转为interface)
6. 接口关键字 interface ,子类实现接口使用关键字implements
7. 接口中的所有方法 都是公开的(public) 接口中不能有任何方法的实现,空实现也不可以
8. 接口的主要作用有两个:
1. 解耦 在代码开发时,所有的功能实现一般都有自身的实现时间,但考虑到大型项目开发时,如果有先后开发次序会大幅降低开发进度,使用接口可以将各个程序之间的关联关系斩断,实现各个代码独自编程,不会影响其他程序开发。而接口开发中最难的就是先期对接口的定义
2. 多重继承
9. 接口可以默认认为也是一个特殊的父类,但是接口不能new 同时由于接口与子类是实现关系,所以接口中也没有构造器的存在,同时接口开发中可以使用上下转型的概念(多态)
- 接口
1. 接口可以继承接口,但不能implements接口
public interface 川菜厨师接口 extends 厨师接口 {
public void 麻婆豆腐();
}
2. 接口开发中可以在父类接口中写入所有子接口共有的方法,而每个子接口中写自己独有的方法原型,我们将这种情况称为接口隔离
3. 接口中有属性的存在,但是所有定义的属性都是常量,全部公开静态.
4. 常量的运用场合
1. 可以接口中定义常量 也可以在任意类中定义常量
2. 通常定义常量的目的是为了方便用户记忆对应输入值的各种类型
public interface IDvdHandler {
public static final int NULLVAL=0;
public static final int BYDVDNO=1;
public static final int BYDVDNAME=2;
public int findPos(int type,Object val);
}
5. 接口抽出方法
1. 当两个或两个以上的类中有共同的行为(原型相同) 则提取接口
- 异常
1. Throwable是所有Error和Exception的父类
2. Exception是所有异常的顶级父类
3. 异常的作用是为了防止程序由于输入的信息有问题造成程序不能够顺利执行时,程序猿采用异常机制对该类错误进行处理,保证程序继续运行下去,而错误程序猿不能进行处理
4. 被动捕获异常通常使用try{}catch(){}finally{}
5. 三个单词能够组合情况
1. try...catch
2. try...catch...catch
3. try...finally
4. try..catch..finally
6. throw和throws 作用是主动抛出异常,通常使用如下格式:
try {
System.out.println(mt.sayHello(sss));
System.out.println("需要捕获异常的代码块");
} catch (Exception e) {
System.out.println("只有try代码中出现该类型的异常才执行的部分");
}finally{
System.out.println("不管是否有异常都一定要执行的部分");
}
public String sayHello(String name) throws Exception{
if(name.equals("123")){
throw new NullPointerException("兄弟不要乱输入");
}
return name+",Hello!";
}