javacore

本文详细介绍了Java中的多态概念,包括父类引用指向子类对象、向上转型和向下转型。此外,还讲解了抽象类和抽象方法的使用,强调了抽象类不可实例化和子类必须重写抽象方法。接口作为定义标准的工具,其特性如多态性和方法的抽象性也得到了阐述。异常处理部分,重点讨论了try-catch-finally的使用和异常的捕获。最后提到了日志记录工具log4j的基本使用和意义。
摘要由CSDN通过智能技术生成

Ⅰ.javacore

多态

多态就是 父类引用指向子类的对象
向下转型:父类对象的引用赋值给一个子类对象,也就是把父类转换成子类。此时必须进行强制类型转换。
向上转型:就是把子类转换成父类,这符合继承中的is-a(狗是宠物),这是自动的类型转换。

如果Pet是父类 那么它就可以指向一切它的子类
例如:

Pet pet = new Dog()//new Cat。。。。

注意:这个对象只能调用父类和子类共有的方法,即子类重写的父类的方法,而不能调用子类独有的方法
总之: 如果想调用某个类独有的方法,那么就自己new自己
如果需要更大的扩展性,就父类引用指向 子类 来创建对象
向下转型只允许强转为指向自己的类型,不能转为其他子类

增强了程序的扩展性

抽象类和抽象方法

​ 使用abstract修饰的类称为抽象类,抽象类不可以实例化,更符合父类的用途
​ 使用abstract修饰的方法称为抽象方法,抽象方法没有方法体,且所有子类必须重写父类的抽象方法
​ 抽象方法一定是抽象类
​ 抽象类不一定有抽象方法

接口

接口使用interface来修饰,接口中所有的方法都是抽象方法
接口遵循多态的特性,即接口可以指0向它的所有实现类
接口中所有的方法都是抽象方法,无需显式的使用abstract来修饰
接口中所有的方法都是公用的

接口实际上就是定义了标准,如果需要某个操作,那么就实现某个接口
接口不可以被实例化,也没有构造方法
接口中所有的成员都是公共的 静态的 常量
接口可以继承接口,普通类只能实现接口

抽象类和接口都可以实现多态的特性,但是思想不同,抽象类更关注于本质,而接口更关注于操作

面向接口编程步骤:

​ ①找出操作相同,但操作内容不同的方法,创建接口
​ ②创建实现类,去实现不同的操作(黑白/彩色 打印机)(声卡/ 网卡)
​ ③编写设置不同操作的方法(更改打印机,更改网卡和声卡),注意:参数要定义为接口,而不是具体类
​ ④就可以按照需要去向③步骤中的方法传递参数

异常处理和log4j

①程序的运行分为三种情况:

正常运行 只会执行try体中的代码,不执行catch
出现异常 并且和catch中的异常类型相匹配,执行catch ,并打印堆栈信息
出现异常 但是和catch中的异常类型不匹配,不会执行catch

②finally

无论如何都会执行的代码。一般用于流关闭的操作。

③一般来说我们采取的做法都是在catch块中添加Excaption,也就是总异常。

他是所有异常的父类,可以抓取所有的异常,避免由于异常类型不同而抓取不到的情况
在catch块中,我们使用的是printStackTrack(),即打印堆栈信息,这个显示的较为全面
有利于排错,而另一个方法,getMessage只会显示出错信息,不太常用。

④如果方法内部有异常抛出throw

那么此方法必须要在参数列表之后声明抛出的异常,throws如果有其他方法调离此方法,那么可以选择处理这个异常(try catch)或者继续抛出throws

⑤程序运行过程中

我们需要在某些地方加入程序运行的记录,以便对于程序的监视和排错,那么log4j就可以做这个工作。

⑥log4j使用方法:

​ 1.将log4j的jar包放在项目工程下面,然后选中jar包,右键add as library
​ 2.将资源文件log4j.properties 放在src根目录下面
​ 3.在需要记录的类中可以创建Logger对象,注意包的路径不要导错
​ 4.可以根据自己的调试级别来决定日期的打印频率,如果设置为log4j.rootLogger=error,那么只有错误的时候才会计入日志
​ 如果设置debug,那么所有的日志都会被记录。

静态代码

①执行顺序:

​ 静态变量》静态代码块》实例变量》代码块》构造方法

②final

final修饰的实例变量的值不能改变,这就意味着在实例化具有fianl变量的多个对象时,每个对象都会有相同的final变量值,这种
实例变量反而使用静态变量会更符合设计规划,因此经常将final变量同时定义为静态的(static final);

final修饰不同变量的结果:
final修饰变量,那么这个变量就会变为常量,即不可改变的量
final修饰类的话,指定该类为最终类不可被继承;
final修饰方法的话,指定该类不允许被重写(覆盖);

包装类和匿名类、Object类

1.包装类

①Integer整形
int i = 10;
Integer in = new Integer(i);	//将int类型的i转换为Integer类型
int a =in.intValue() ;			//将Integer类型的对象转换为int类型 
int b =Integer.parseInt("123");	//将字符串转换为整型
②自动拆装箱

即系统将自动进行基本数据类型和对应包装类型的转换。

基本数据类型:

int,double,float,long,short,char,byte,boolean

装箱:

基本数据类型转换为引用数据类型

拆箱:

引用数据类型转换为基本数据类型

//int类型将自动转换为Integer类型——————————装箱
int m = 12;
Integer in = m;
//Integer类型将自动转换为int类型——————————拆箱
int n = in;

2.匿名类

特点:

类不取名字,而是直接采用其父类的名字 或者他所实现的接口的名字来构造

类的定义与创建该类的一个实例同时进行,即类的定义前面加一个new。不使用class关键字,同时带上()表示创建对象,即:

public class TestInner {
    public static void main(String[] args) {
        Object object = new Outer().makeTheInner(44);
        System.out.println(object);

    }
}
public class Outer {
    private int size = 6;
    public Object makeTheInner(final int localVar){
        return new Object(){
            @Override
            public String toString() {
                return "interSize:"+size+",localVar:"+localVar;
            }
        };
    }
}

new 类名或接口名(){…}

类名前不能有修饰符

类中不能定义构造方法,因为他没有名字。

3.Object类

特点:

是所有类的父类

可以和任意类型的对象匹配

方法说明
protected Object clone()生成当前对象的一个备份,并返回这个复制对象
public boolean equals(Object obj)比较两个对象是否相同,是则返回true
public final Class getClass()获取当前对象所属的类信息,返回Class对象
protected void finalize()定义回收当前对象时所需完成的清理工作
public String toString()返回当前对象本身的有关信息,按字符串对象返回
public final void notify()唤醒线程
public final void notifyAll()唤醒所有等待此对象的线程
public final void wait()等待线程
①==与equals

如果使用此方式比较,当name为null时会出现空指针异常

name.equals("admin")

更换为此方法可以避免空指针异常

“admin”.equals(name)
class TestEqualsString{
    public static void main(String[] args){
        String name1 = new String("张三");
        String name2 = new String("张三");
        System.out.println(name1==name2);//两个对象的引用,false
        System.out.println(name1.equals(name2));//内容相等,true
        
        String name3 = "李四";
        String name4 = "李四";
        System.out.println(name3==name4);//相同常量的引用,true
        System.out.println(name3.equals(name4));//内容相等,true
        
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值