一、Java基础

韩顺平Java基础

浮点型使用细节

在这里插入图片描述
double d = 8.1 / 3 的结果是一个非常接近2.7的小数,比如2.69999997,这是计算机的运算规则造成的
在这里插入图片描述

基本数据类型转换

自动类型转换

在这里插入图片描述
在这里插入图片描述
对于第四点,如下所示:
在这里插入图片描述
b2 和 s1 首先转为int,然后结果赋值给short,肯定错误

强制类型转换

在这里插入图片描述
在这里插入图片描述

自增和自减需要注意细节

在这里插入图片描述
记住:i++是先取值,后运算 ++i是先运算,后取值

运算符的一些使用细节

在这里插入图片描述
在这里插入图片描述

运算符优先级

在这里插入图片描述

命名规范

在这里插入图片描述

break关键字

break关键字可以指定标签(但是不建议使用标签)
在这里插入图片描述
continue 也可以指定标签

数组赋值机制

分为基本数据类型的值拷贝和数组的引用传递
在这里插入图片描述

二维数组使用细节

在这里插入图片描述

类和对象的内存分配机制

在这里插入图片描述
在这里插入图片描述

方法的调用机制原理

在这里插入图片描述

成员方法传参机制

(1)基本数据类型的传参机制,传递的是值(值拷贝),形参的改变不会影响实参
(2)引用数据类型的传参机制,引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参

可变参数

java 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。
就可以通过可变参数实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

作用域

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
属性可以加修饰符(public protected private…)
局部变量不能加修饰符

构造器

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

this关键字

哪个对象调用,this就代表哪个对象
在这里插入图片描述
在这里插入图片描述

访问修饰符

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

面向对象三大特征

封装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意可以将构造器和setXXX结合

在这里插入图片描述

继承

在这里插入图片描述
在这里插入图片描述

继承的细节

  1. 子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问, 但是私有属性和方法不能在子类直接访
    问,要通过父类提供公共的方法去访问
  2. 子类必须调用父类的构造器, 完成父类的初始化
  3. 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无
    参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过
  4. 如果希望指定去调用父类的某个构造器,则显式的调用一下 : super(参数列表)
  5. super 在使用时,必须放在构造器第一行(super 只能在构造器中使用)
  6. super() 和 this() 都只能放在构造器第一行,因此这两个方法不能共存在一个构造器
  7. java 所有类都是 Object 类的子类, Object 是所有类的基类.
  8. 父类构造器的调用不限于直接父类!将一直往上追溯直到 Object 类(顶级父类)
  9. 子类最多只能继承一个父类(指直接继承),即 java 中是单继承机制。
  10. 不能滥用继承,子类和父类之间必须满足 is-a 的逻辑关系

继承的本质

在这里插入图片描述

super关键字

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

super和this关系

在这里插入图片描述

方法重写/覆盖

在这里插入图片描述

多态

在这里插入图片描述
如果主人Master有一个feed方法,即给某个Animal喂食Food,随着动物种类的增多和食物种类增多,feed方法也越来越多,不便于维护
所以我们要使用多态

方法的多态

在这里插入图片描述
(1)重载体现多态,比如一个类中有多个sum方法,但是方法参数不一样,当我们调用sum方法时,传入不同参数个数,调用不同的sum方法,这里体现了多态
(2)重写体现多态,在继承关系中,父类A有一个say方法,子类B有一个say方法,调用时A.say()和B.say(),方法名一样,但是不同方法,体现了多态

对象的多态

在这里插入图片描述
因此可以用来解决上面的喂食问题,直接feed(Animal animal, Food food),这样调用方法时传入具体的Animal和Food的实现就可以,只用编写一个feed方法即可

多态的注意细节

(1)向上转型
在这里插入图片描述
在这里插入图片描述
编译看左边,编译的时候编译器知道这是Animal类型,所以确定了能调用哪些成员
运行看右边,运行时看子类的具体实现,查找方法时,从子类开始查找,找不到就顺着找他的父类

(2)向下转型
可以用向下转型来调用子类特有的方法
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Java动态绑定机制

在这里插入图片描述
运行a.sum()时,由于运行类型是B,会去B中找sum()方法,这时结果是40
如果B中没有sum()方法,则由继承机制,去A中找sum()方法。这时A中的sum()方法有getI()方法,由动态绑定机制,该方法和运行类型绑定,所以调用的getI()是B中的getI()方法。此时结果是30
注意对象属性没有动态绑定机制,只需看本类中有没有,没有就使用继承机制,去父类寻找即可。

多态数组

在这里插入图片描述

多态参数

在这里插入图片描述
在这里插入图片描述

Object类

==和 equals 的对比

在这里插入图片描述

hashCode方法

在这里插入图片描述
在这里插入图片描述

toString方法

在这里插入图片描述
在这里插入图片描述

finalize 方法

在这里插入图片描述

类变量/静态变量/静态属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类方法/静态方法

开发自己的工具类时,可以将方法做成静态的,方便调用
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

代码块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

单例模式

在这里插入图片描述

饿汉式

在这里插入图片描述
由于static属性或者方法在类加载时就加载了,所以不管通过公共的方法获取多少个对象,都是同一个对象
(我们即使没有使用,他也帮我们创建了对象,很着急,所以叫饿汉式)

懒汉式

在这里插入图片描述
只定义不new对象,只有通过getInstace方法获取对象时才创建

对比

在这里插入图片描述

final关键字

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
final和static搭配使用,不会导致类的加载。比如类中有一个属性
public static final int a = 10;
通过类使用这个a变量时,不会加载类,因为底层编译器做了优化

抽象类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

接口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

接口 VS 继承类

在这里插入图片描述
在这里插入图片描述
比如猴子天生会爬树,这可以通过继承获得。但是猴子可以通过学习来获得有用、飞翔的技能,这就需要通过接口实现。
在这里插入图片描述

接口的多态特性

在这里插入图片描述

接口的多态传递现象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

内部类

在这里插入图片描述
在这里插入图片描述

内部类的分类

在这里插入图片描述

局部内部类

在这里插入图片描述

匿名内部类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

成员内部类

在这里插入图片描述
在这里插入图片描述

静态内部类

在这里插入图片描述

枚举

枚举

自定义异常

在这里插入图片描述
在这里插入图片描述

throw和throws的区别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自动装箱和自动拆箱

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

包装类型和 String 类型的相互转换

在这里插入图片描述
在这里插入图片描述

Integer注意事项

在这里插入图片描述
Integer i = 5;其实调用的是Integer i = Integer.valueOf(5),即只要在-128~127范围内,就这样
如果不在这个范围,就Integer i = new Integer(129),创建对象

String创建的两种方式和区别

在这里插入图片描述

StringBuffer

在这里插入图片描述
在这里插入图片描述

String和StringBuffer相互转换

在这里插入图片描述

StringBuilder

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

String、StringBuffer、StringBuilder比较

在这里插入图片描述
在这里插入图片描述

BigInteger和BigDecimal类

在这里插入图片描述
在进行运算时,调用上面的方法
当long不够用时,可以使用BigInteger
当double不够用时,可以使用BigDecimal

日期类

第一类日期

在这里插入图片描述

第二类日期

在这里插入图片描述

第三类日期

在这里插入图片描述

DateTimeFormatter 格式日期类

在这里插入图片描述

Instant 时间戳

在这里插入图片描述

集合

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Collection接口遍历方式

Iterator迭代器

在这里插入图片描述
当退出for循环后,iterator迭代器指向最后的元素,如果需要再次便利,需要重置迭代器 iterator = col.iterator()

增强for循环

在这里插入图片描述

List接口

在这里插入图片描述

Arraylist注意事项和源码分析

在这里插入图片描述

Vector相关

在这里插入图片描述

Vector和ArrayList比较

在这里插入图片描述

LinkedList相关

在这里插入图片描述

ArrayList和LinkedList比较

在这里插入图片描述

Set接口

在这里插入图片描述
在这里插入图片描述

HashSet

在这里插入图片描述

LinkedHashSet

在这里插入图片描述

Map接口

在这里插入图片描述
在这里插入图片描述

Map的遍历方法

在这里插入图片描述
可以通过(2)(3)(4)获取数据,然后通过迭代器、增强for进行遍历。

HashMap

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Hashtable

在这里插入图片描述

Properties

在这里插入图片描述

如何选择

在这里插入图片描述

Collections工具类

在这里插入图片描述

排序操作(均为static方法)

在这里插入图片描述

查找、替换

在这里插入图片描述

泛型

在这里插入图片描述
有可能加入的不是Dog,并且遍历时要多一步转换,效率低
在这里插入图片描述
在这里插入图片描述
针对以上问题,可以使用泛型来解决。
在这里插入图片描述
在这里直接指定泛型为Dog
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对第四点的解释:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

泛型的语法

在这里插入图片描述
在这里插入图片描述

自定义泛型类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值