Java基础

Java基础

1.Java语言的编译过程

.Java文件,经过编译,生成.class字节码文件;JVM加载.class并运行.class

2.基本类型

8种基本类型:
整数类型:byte,short,int 4个字节,long 8个字节
浮点型:float,double 8个字节
字符型:char 2个字节
布尔类型boolean 1个字节

3.三种结构

(1)顺序结构:从上往下逐行执行,每句必走
(2)分支结构:有条件的执行某语句一次,每句不一定都走 if(1条路) if…else(2条路)
if…else if 多条路
(3)循环结构:有条件的执行某语句多次,每句不一定都走
循环结构主要找三要素
三要素:
(1)循环变量的初始化
(2)循环的条件(以循环变量为基础)
(3)循环变量的改变

面向对象

1.重载

同一个类中,方法名相同,参数列表不同,编译器在编译时会根据方法的签名自动绑定调用的方法

2.构造方法

给成员变量赋初值,与类同名,没有返回值类型,在创建对象时自动调用.若不写构造方法,会有默认无参构造方法,若写了,不提供默认方法.构造方法可以重载
this:只能用在方法中,访问变量之前默认有个this,谁调这个方法this就是谁.指代当前对象

3.内存管理:由JVM管理的

堆:所有new出来的对象,包含成员变量(实例变量)
栈:方法中的局部变量,包括方法的参数
方法区:.class字节码文件(方法,静态变量)
局部变量中的变量在栈中装着值(数字)
成员变量中的引用在栈中装着地址,指向堆中的对象

4.继承

作用代码复用,extends实现,超类/父类:派生类所共有的属性和行为,派生类/子类:派生类特有的属性和行为.
单一继承,传递性

5.重写

重新写,覆盖
发生在父子类中,方法名称,参数相同,方法体不同
重写方法被调用时,看对象的类型(new谁就是谁)
两同两小一大
超类大,派生类小,void和基本类型返回值类型要相同
派生类中的方法访问权限要大于或等于超类的

6.访问控制修饰符

(1)数据(变量)私有化(private)(私有的,本类可用)
(2)行为(方法)公开化(public)
(3)protected:受保护的,本类,子类,通报类可用
(4)默认的:同包的,本类的可用

7.static

静态变量:由static修饰,属于类的变量,存储在方法区,只有一份,常通过类点名访问
何时用:所有对象所共享的数据(图片,视频,音频)

静态方法:由static修饰,属于类的变量,存储在方法区,只有一份,常通过类点名访问
实例变量需要对象去点(this指当前对象),静态方法可以被继承,不可被重写.
静态方法没有隐式this传递,不能直接访问实例成员
何时用:仅与参数相关与对象无关,用static,无论哪个去点结果都一样适用static

静态块:在类被加载期间自动执行,只执行一次,初始化/加载静态资源(图片,音频,视频)

8.抽象方法、类

抽象方法:由abstract修饰,只有方法的定义,没有具体的实现(连{}都没有)
抽象类也可以不包含抽象方法
抽象类:不能new对象(实例化)能声明引用 抽象类需要被继承
派生类:重写抽象方法或声明抽象类 包含抽象方法的必须是抽象类

9.内部类

成员内部类:在外部类可创建,与实例变量,方法并列,可直接使用外部类的变量和方法

匿名内部类:若想创建一个类的对象,并且对象只被创建一次,此类可不必命名,称为匿名内部类

10.接口

是一种数据类型(引用类型),与类平级.由interface定义.接口默认为public
只能包含常量和抽象方法.接口不能被实例化(即new对象).
接口需要被实现(类似继承)的,实现类(派生类):必须重写接口中的所有抽象方法.
一个类可以实现多个接口,用逗号分隔,若又被继承又被实现,先继承后实现.
接口可以继承接口,一个接口可以继承多个接口

接口是完全抽象的抽象类

11.多态

行为多态:同一类型的引用,指向不同的对象时,有不同的实现. 抽象方法都是多态的
对象多态:同一个对象,被造型为不同的类型时,有不同的功能. 想表现多态要向上造型
能造型称为的类型:超类+所实现的接口
引用类型之间可以强制,成功条件只有两种:
(1)引用所指向的对象,就是该类型
(2)引用所指向的对象,实现该接口或继承的该类
强转若不符合如上条件,则发生ClassCastException类型转换异常
在强转之前先通过instanceof来判断引用的对象是否是该类型的引用

12.面向对象三大特征

封装:
(1)类:封装的是对象的属性和行为
(2)方法:封装的是一段特定的业务逻辑功能
(3)访问控制修饰符:封装的是具体访问的权限
继承:
(1)作用:代码复用
(2)超类:所有派生类所共有的属性和行为
接口:部分派生类所共有的行为
派生类:派生类所特有的属性和行为
(3)传递性,单一继承,多接口实现
多态: Object是所有类的鼻祖
(1)意义:行为的多态(所有抽象方法都是多态的),对象的多态(所有对象都是多态的)
(2)向上造型,强制类型转换,instanceof判断
(3)多态的表现形式:
重写:根据对象的不同来实现多态的
重载:根据参数的不同来实现多态的

API

为什么hashMap是查询速度最快的数据结构?

HashMap之所以是查询速度最快的数据结构,是因为Has和Map本身也是由数组实现,但它根据key的hashcode值计算出的其应在数组的位置并将其存放,这样当根据key查找时也直接根据其hashcode值计算下标快速定位到数组对应位置检索对应的value这样,省去了遍历数组操作,从而不受数据大小影响查询性能.
对于Key而言,其HashCode方法与equals方法直接影响其在HashMap内部数组的位置,所有
要妥善重写这两个方法,避免在数组中产生链表,否则会影响散列表查询性能.
产生链表的原因之一:当两个key的hashcode值相同时,计算对应的数组下标位置相同,但是这两个key的equals不同(不是同一个key,若equals相同map会认为是相同的key,那么就做替换操作)
这时就会在数组该位置产生链表.
java提供的类都妥善重写了equals与hashcode,包括Object类都满足该重写规则,但是若我们自定义的类若需要重写equals方法时应当一同重写hashcode,这在API手册上有明确说明.
重写规则:
1.成对重写,即:当我们重写一个类的equals方法时就应当连同重写hashcode方法.
2.一致性,即:当两个对象的equals比较为true时,hashcode返回的数字必须相等,反之虽然不是必须的,但是最好保证当两个对象hashcode相等时,equals比较也为true,否则会在HashMap中作为key使用时产生链表,影响查询性能.
3.稳定性,即:当参与equals比较的属性值没有发生改变的前提下,多次调用hashcode方法返回的数字不能改变.

String与StringBuffer的区别,StringBuffer和StringBuilder的区别是什么?

String是不可变的,StringBuffer是可变的;StringBuffer是线程安全的,StringBuilder是非线程安全的。
由于字符串链接会自动创建StringBuilder对象,为了避免复杂字符串拼接时候大量创建StringBuilder对象,可以利用StringBuilder优化字符串链接操作。
StringBuilder是jdk5之后新增的,其用法与StringBuffer完全一致,但它是线程不安全的,在单线程中最佳,因为其不需要维护线程的安全,因此是最快的。

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. Java基础
    1. 1.0.0.0.0.1. 1.Java语言的编译过程
    2. 1.0.0.0.0.2. 2.基本类型
    3. 1.0.0.0.0.3. 3.三种结构
  • 1.1. 面向对象
    1. 1.1.0.0.0.1. 1.重载
    2. 1.1.0.0.0.2. 2.构造方法
    3. 1.1.0.0.0.3. 3.内存管理:由JVM管理的
    4. 1.1.0.0.0.4. 4.继承
    5. 1.1.0.0.0.5. 5.重写
    6. 1.1.0.0.0.6. 6.访问控制修饰符
    7. 1.1.0.0.0.7. 7.static
    8. 1.1.0.0.0.8. 8.抽象方法、类
    9. 1.1.0.0.0.9. 9.内部类
    10. 1.1.0.0.0.10. 10.接口
    11. 1.1.0.0.0.11. 11.多态
    12. 1.1.0.0.0.12. 12.面向对象三大特征
  • 1.2. API
    1. 1.2.0.0.0.1. 为什么hashMap是查询速度最快的数据结构?
    2. 1.2.0.0.0.2. String与StringBuffer的区别,StringBuffer和StringBuilder的区别是什么?
  • 本站总访问量: , 本页阅读量: