java基础-2

本文深入讲解Java面向对象编程,涵盖类与对象的概念、构造方法、this关键字、代码块、继承、多态、抽象、静态、final修饰符、接口、内部类、包、垃圾回收机制等内容,是Java学习者全面理解面向对象编程的宝贵资源。

java基础-2

面向对象

定义

面向对象是一种思维方式,相对于面向过程​面向过程注重流程中的每一步,清楚流程中的每一个细节​面向对象注重的是对象,有了对象就有对象的一届​自己动手做--面向过程,找其他人做面向对象​面向对象和面向过程各有优劣,复杂事务面向对象,简单事务面向过程​面向对象基于面向过程

类与对象的关系

类是对象的概括/抽取​通过new关键字创建对象,可以给对象的属性赋值,也可调用方法

对象的内存存储

属性存在堆中​对象存在栈中

成员变量和局部变量定义位置不同​作用范围不同​内存位置不同​生命周期不同

构造方法​特点;与类名相同没有返回值​作用;用于创建对象​可以重载

this关键字​代替本类对象调用本类中的属性和方法​代表本类在活动的对象的引用--即虚拟对象​利用this调用对应的构造方法时必须放在构造方法的首行构造代码块​初始代码块--用{}包起来的代码​无论用哪个构造方法创建对象,它都会在构造方法前执行一次局部代码块​方法中用{}包起来的代码​提高栈内存的利用率

面向对象的特征封装​权限修饰符​public​protected​默认​private​方法属性的私有化​内部类​继承​利用extends关键字​子类通过继承可以使用父类中的一部分方法和属性​java单继承​多继承比单继承更好的提高代码复用性​单继承更能明确方法的调用​单继承提高了代码的复用性,也避免了方法调用产生的混乱​super关键字​在子类中表示父类对象的引用,一个虚拟对象​子类通过super来调用父类的方法和 属性​super语句必须放在子类构造的第一行​多态​编译时多态​方法的重载是行为的多态​重载指的是在同一个类中存在方法名一致而参数列表不同的方法。参数列表不同指的是参数的 个数或者是参数类型不同。重载只和方法签名有关,和修饰符、返回值类型、异常都没有关系。重载本身是一种编译时多态。​运行时多态-基于继承​向上造型​方法的重写​在父子类存在方法签名一致的非静态方法​两等两小一大​重写指的是在父子类中存在方法签名相同的非静态方法。在构成重写的时候,子类方法的权限修饰符的范围要比父类权限修饰符的范围大或者保持一致。子类在重写父类方法的时候,如果父类方法返回值类型是基本类型或者是void,那么子类方法的返回值类型要保持一致。如果父类方法返回值类型是引用类型,那么子类方法返回值类型要和父类一致或者是父类方法返回值类型的子类。子类在重写方法的时候所抛出的编译时异常不能超过父类编译时异常的范围。重写本身是一种运行时多态。​抽象​abstract修饰符​修饰方法;抽象方法,子类继承后必须重写抽象方法​可以被重载​不能被static/final/private修饰​如果抽象方法用默认权限,那么子类必须与父类同包​修饰类,抽象类;抽象方法存在的类必须是抽象类​不能创建对象​有构造方法​不能用final修饰​可以有其他方法和属性,不一定有抽象方法

static-静态​静态变量/类变量​类是加载到方法区中​类在第一次使用时加载到方法区,加载之后不会移除​静态方法/类方法​随着类加载到方法区中,先于对象存在​用类名调用静态方法​在静态方法中不可以直接使用本类中的非静态属性和方法​不可以定义静态变量-静态方法调用才在栈中执行​可以重载​可以继承​不可以被重写​父子类方法中可以存在方法签名一致的静态方法-构成隐藏​父子类中方法签名一致时要么都是非静态(重写),要么都是静态(隐藏)​静态代码块​用static{}定义的代码块​在类加载的时候执行一次​执行顺序:父类静态->子类静态->父类非静态->子类非静态​所有的静态只能定义在类中不能定义到代码块中

final修饰符​修饰数据; 常量定义之后不可改变​修饰方法;最终方法,不能被重写/隐藏,可以重载,可以被继承​修饰类;最终类,不能被继承

接口​一个类的方法都是抽象方法,就可以将这个类声明为一个接口​用interface定义--jdk1.8之前接口中都是抽象方法​接口不是类--不能创建对象,也没有构造方法​通过implement关键字让类实现接口-类实现接口要重写接口中的所有抽象方法​java中单继承多实现-一个类只能继承一个父类,可以实现多个接口​接口可以继承多个接口,接口之间多继承​jdk1.8对接口的改进​接口中的默认方法​允许定义实体方法-默认方法和静态方法​实体方法要用default修饰​lambda表达式​当接口中只要一个抽象方法时可以用lambda表达式创建接口对象​(参数列表)->{方法体}​方法体只有一句,可以省略{}可return不写,这一句的执行结果默认为返回值​定义表达式的时候参数类型可以省略不写​如果一个接口在只有一个抽象方法,那么这个接口可以用@FunctionalInterface 声明为函数式接口

内部类​方法内部类​成员内部类​静态内部类​匿名内部类​在类中定义类和接口,在接口在定义类和接口

​package​import​java.lang默认导入​定义包的时候尽量不要使用java/javax/org

垃圾分代回收机制​垃圾回收针对堆内存​垃圾回收是自动的由垃圾回收器GC在堆内存使用率超过70%时自动回收​堆内存​新生代​伊甸园区​幸存区​minor GC初代回收​老生代​full GC完全回收

转载于:https://www.cnblogs.com/Striverchen/p/10519483.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值