20210726 java基础复习

编译型语言:

需要编译,把源码编译成为机器语言的文件。运行时不需要重新翻译,直接使用编译的结果就行了。

解释型语言:

编译型语言域解释型语言更快:

就好比现场翻译比书面翻译更快。

解释器是儿子,编译器是女儿

(解释器是一条一条的解释执行源语言。比如php,postscritp,javascript就是典型的解释性语言。

编译器是把源代码整个编译成目标代码,执行时不在需要编译器,直接在支持目标代码的平台上运行,这样执行效率比解释执行快很多。比如C语言代码被编译成二进制代码(exe程序),在windows平台上执行。)

封装:

类、对象、方法、属性:
创建类(其中包含类的属性、方法)—实例化对象(实例化一个对象,输出属性值、调用对象的方法)

类:抽象概念(猫)

对象:类的具体体现(田园猫)

方法:能做什么(跑,叫)

属性:毛色,年龄,品种

属性不加任何修饰符时默认伟default,即只能跟这个类在同一个包中的类来访问

方法重载:

1、同一类中

2、相同方法名,不同参数列表(顺序,个数,类型)

3、不限制返回值和访问修饰符

4、只关注传入参数的类型,与属性名无关。

方法重载:

外壳不变,核心重写。

1、有继承关系的子类中

2、相同方法名,参数列表相同(参数类型、个数、顺序),返回值相同

3、访问修饰符

4、与方法传入的参数名无关

单一职责原则(单一功能原则):

面向对象的原则,一个类中有且只有一个功能。

一个类的承载功能越多,耦合性越高,复用性越低。

尽量把不同的职责放在不同的类中。

实例化对象的过程:Cat one = new Cat();

声明对象 Cat one (在栈中)

实例化对象 new Cat() (在堆中)

两个不同的内存区域如何关联:

= 用赋值符号 ,将声明的对象指向具体的实例化空间.

堆和栈的区别:

1、堆栈空间分配

栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

2、堆栈缓存方式

栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。

堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

3、效率比较

栈由系统自动分配,速度较快。但程序员是无法控制的。

堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。

4、存储内容

栈: 在函数调用时,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。

当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向函数的返回地址,也就是主函数中的下一条指令的地址,程序由该点继续运行。

堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容由程序员安排

构造方法:

只能在对象实例化时使用

无返回值,构造方法名域类名相同,必须与NEW同时使用

没有显示定义构造方法的时候,系统对自动生成构造方法

(可在方法前加修饰符)

可有多个构造函数

默认构造方法的访问修饰符和类的访问修饰符相同(类为 public,构造函数也为 public;类改为 protected,构造函数也改为 protected)。

this关键字:

避免就近原则,指向当前对象

封装:

1、修改属性的可见性。(类内隐藏)

private限定只能在类内进行访问。

2、设置共有的get()、set()方法(完成对外的开放接口)

3、在get\set方法中添加对属性的限定。

static

有静态方法(类方法),静态属性(类属性)

静态属性的赋值:

对象名.属性名 或 类名.属性名

静态方法的调用:

对象名.方法名 或 类名.方法名

静态方法中不能访问非静态成员,只能访问静态成员(包括静态方法和静态属性)

如果要在静态方法中访问其他非静态属性和方法,可以通过实例化对象,然后用对象访问的方式。

静态方法中 不能使用this

static不能修饰普通类,但可以修饰内部类

父类static方法无法被子类重写。

内部类:将一个类定义在另一个给类里面或者方法里面,这样的类就被称为内部类

静态内部类对象的创建一般是外部类.内部类 类名 = new 外部类.内部类();

static不能修饰方法内的局部变量

而局部变量的作用域只能在他所属的{}之内。不可能是属于类或对象的。所以矛盾,故static不能修饰局部变量

代码块:(一个作用空间,代码块内的局部变量会在代码块结束后被回收)

普通代码块:

在方法中定义;可有多个;输出顺序和出现顺序一致;

public void run(){
{System.out.println(“我是普通代码块”)
}}

构造代码块:

在类中定义;对象创建被调用,调用在构造方法之前;可有多个;

静态代码块:

构造代码块前加static;可用多个;调用在构造代码块之前;

在实例化多个对象时:

静态代码块执行一次(类加载时执行一次),构造代码块执行多次(一次实例化执行一次)

构造代码块可以给成员属性赋值;静态代码块只能给静态属性赋值;如果需要给成员属性赋值,需要先实例化,再用对象进行赋值。

静态代码块>构造代码块>构造方法

继承:( A is a B)

访问修饰符:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zkwzP0FS-1631933541514)(C:\Users\zhangyn\AppData\Roaming\Typora\typora-user-images\image-20210707143210329.png)]

继承对象初始化过程:

父类静态成员–》父类静态代码块–》子类静态成员–》子类静态代码块(静态成员按出现顺序加载)

–》子类构造方法–》父类构造方法–》

父类属性–》父类构造代码块–》父类构造方法–》

子类属性–》子类构造代码块–》子类无参构造

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sDSC9YWr-1631933541518)(C:\Users\zhangyn\AppData\Roaming\Typora\typora-user-images\image-20210707165717709.png)]

父类静态成员—》子类静态成员—》父类对象构造—》子类对象构造

super

1、子类的构造过程中必须调用父类的构造方法。
2、子类若的构造方法中,没有显式指定调用父类的构造方法,则系统默认调用父类的无参构造方法。
3、如果子类的构造方法中,既没有显式调用父类的构造方法,父类又没有无参构造方法,编译器报错。
4、使用super调用父类的指定构造的方法,必须在子类构造方法的第一行。

this和super:

this:
1、访问当前类的成员方法 this.getName();
2、访问当前类的成员属性 this.name;
3、访问当前类的构造方法 this();
4、不能在静态方法中使用
super:
1、访问父类的成员方法 super.getName()
2、访问父类的成员属性super.name
3、访问父类的构造方法super()
4、不能在静态方法中使用

设计模式:

针对常见问题的效果较好的一般通用解决方式。

设计模式分类:

关注对象创建过程的模式:创建型模式

关注类和对象组合的模式:结构型模式

关注对象间的通信过程:行为型模式

单例模式:

要点:

1、类有且只有一个实例对象

2、类中必须自行创建实例

3、必须自行向整个系统提供这个实例

实现:

1、只提供私有构造方法(保证无法在类外实例化)

2、含有一个该类的静态私有对象(static)

3、提供一个静态的共有方法用于创建、获取静态私有对象

适用场景:

1、创建对象占用资源过多,但同时又需要用到该对象

2、对系统内资源要求统一读写 ,(如:读写配置信息)

3、多个实例存在时会引起程序错误(如:理财产品序列号)

多态:
分类:

编译时多态(设计时多态):方法重载

运行时多态

必要条件:

1、继承关系

2、父类引用指向子类对象

向上转型:
向下转型:
instanceof:
abstract:
abstract类:

父类要限制*子类必须要具有的能力*,不关心子类实现是可以建立抽象类。

不允许实例化;只能被继承;

可以通过引用指向子类实例

abstract方法:

抽象方法必须被子类重写,当子类没有重写父类抽象方法时,子类也必须是抽象类。

抽象方法创建时不允许有方法体。

包含抽象方法的类必须是抽象类;

抽象类中可以没有抽象方法。

  • private,static,final 不能与abstract连用
JAVA的反射机制:

运行状态中对于任意的类都能知道它的属性和方法,对于任意一个对象,都能调用他的任意方法和属性。

反射机制的作用:

用来编写一些性能较高的代码、通用性很高的代码

反射常用对象:

Class:

Constructor:

Filed:

Method:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值