java基础知识点,从入门到核心实战

继承通过基类和子类的概念来表达,基类的所有特征和行为都可以与子类共享。也就是说,你可以通过基类呈现核心思想,从基类继承的子类则为核心思想提供不同的实现方式。

有时基类和子类的方法都是一样的,这时你就可以直接用子类的对象代替基类的对象,这种纯替代关系通常叫做替换原则。

有时,子类会添加一些新的方法,此时就是不完美替换。

3、多态

通过将子类对象引用赋给父类对象引用来实现动态方法调用。

List list = new ArrayList();

四、单根层次结构


Java就是一个很明显的单根层次结构的语言,所有的类都继承自Object类。

单根层次结构有利于实现垃圾回收期,这也是Java对比C++的一个重要改进。

异常也是一样的,异常的根类是Throwable,Throwable的直接子类是Exception和Error。

五、集合


通常情况下解决一个问题可能需要多个对象,也无法确切的知道要申请多大的内存空间,这时我们可以建一个新的对象,囊括你所需要的一切,这个新对象就称为集合。

Java中最重要的集合有list、map、set、queue、tree、stack等。

常用集合的分类:

Collection 接口的接口 对象的集合(单列集合)

├——-List 接口:元素按进入先后有序保存,可重复

│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全

│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全

│—————-└ Vector 接口实现类 数组, 同步, 线程安全

│ ———————-└ Stack 是Vector类的实现

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 开源分享

└——-Set 接口: 仅接收一次,不可重复,并做内部排序

├—————-└HashSet 使用hash表(数组)存储元素

│————————└ LinkedHashSet 链表维护元素的插入次序

└ —————-TreeSet 底层实现为二叉树,元素排好序

Map 接口 键值对的集合 (双列集合)

├———Hashtable 接口实现类, 同步, 线程安全

├———HashMap 接口实现类 ,没有同步, 线程不安全-

│—————–├ LinkedHashMap 双向链表和哈希表实现

│—————–└ WeakHashMap

├ ——–TreeMap 红黑树对所有的key进行排序

└———IdentifyHashMap

Java集合基础知识总结(绝对经典)

六、泛型


在Java5之前,JAVA语言的集合所支持的通用类型是Object。因为单根结构决定了所有对象都属于Object类型,所以一个持有Object的集合就可以持有任何对象,这就使得集合十分易于复用。

其实并不能保存原始数据类型,不过自动装箱机制在一定程度上解决了这个问题。

当集合中持有Object类型时,要添加一个对象到集合中,该对象会向上转型为Object,从而失去了原本的类型。当你需要将其取出时,会获得一个Object类型的对象引用,这就不是当初的类型了,需要进行向下转型。但除非明确知道对象的具体类型,否则向下转型是不安全的,转型失败会抛出异常。

这个问题的解决方式是“参数化类型”,一个被参数化的类型是一种特殊的类,可以让编译器自动适配特定的类型,参数化类型也叫泛型,通过尖括号中间加上类名来定义泛型,比如List。

【Java知识点详解 4】Java泛型详解

七、对象的创建和声明周期


对象的创建需要消耗一些资源,尤其是内存资源。

当我们不再需要一个对象时,就要及时清理它,这样占用的资源才能被释放并重复使用。

如果要最大化运行时效率,可以通过栈区(局部变量)来保存对象,或者将对象保存在静态区里,这样在编写程序时就可以明确的知道对象的内存分配和生命周期,这种做法会优先考虑分配和释放内存的速度。但是代价就是牺牲了灵活性,因为你必须在编写代码时就明确对象的数量、生命周期以及类型,但是这种写法的限制性很大。

还有一种方案是在内存池中动态创建对象,这个内存池也就堆。如果使用这个方案,直到运行时你才能知道需要多少对象,以及它们的生命周期和确切的类型是什么。如果需要创建一个新对象,可以直接通过堆来创建。因为堆是在运行时动态管理内存的,所以堆分配内存所花费的时间通常会比栈多一些。栈通常利用汇编指令向下或向上移动栈指针来管理内存,而堆何时分配内存则取决于内存机制的实现方式。

Java只允许动态分配内存,每当要创建一个对象时,都需要使用new来创建一个对象的动态实例。

如果在栈中创建对象,编译器会判断对象存在时间以及负责自动销毁该对象。

如果在堆中创建对象,编译器就无法得知对象的生命周期。

Java支持垃圾回收机制,它会自动找到没用的对象将其销毁。

八、异常处理


异常处理是将编程语言和错误处理机制直接绑定在一起,异常从错误发生处抛出,根据错误类型,可以对其进行捕获。由于异常的存在,降低了编写代码的成本,不用经常反复检查各种错误。

如果抛出异常,就确保了它会被有效的处理,这也增强了程序的健壮性。

Java的异常处理机制在众多编程语言中几乎可以说是鹤立鸡群的,异常时Java唯一允许的报错方式,如果你的代码没有正确的处理异常,就会得到一条编译时的报错消息。

❤️详解Java异常❤️代码报错怎么办,try catch盖住不就好了?

九、数据保存在哪里


1、寄存器

寄存器是速度最快的数据存储方式,数据直接保存在中央处理器,然而寄存器的数量是有限的,所以只能按需分配。

JVM中有4种常见的寄存器:

  1. pc程序寄存器

  2. optop操作数栈顶指针

  3. frame当前执行环境指针

  4. vars指向当前执行环境中第一个局部变量的指针

所有寄存器都为32位。

pc用于记录程序的执行,optop,frame和vars用于记录指向Java栈区的指针。

2、栈

数据存储在随机存取存储器里,处理器可以通过栈指针直接操作该数据。具体来说,栈指针向下移动将申请一块新的内存,向上移动则会释放这块内存。这是一种及其迅速和高效的内存分配方式,其效率仅次于寄存器。只不过Java系统在创建应用程序时就必须明确栈上所有对象的生命周期。这种限制约束了程序的灵活性,因此虽然有一些数据会保存在栈上,对象本身却并非如此。

3、堆

堆是一个通用的内存池,用于存放所有Java对象,new出来的对象都存放在堆中。堆内存的分配和清理要比栈存储话费更多的时间。

4、常量存储

常量通常会直接写在程序代码中,不可变。

5、非RAM存储

不保存在应用程序里的数据,最典型的例子就是序列化对象,它指的是转换为字节流并可以发送到其它机器的对象。另一个例子则是持久化对象,它指的是保存在磁盘上的对象。也支持使用数据库存储对象信息。

大多数微处理芯片有额外的缓存内存,只不过缓存内容使用的是传统的内存管理方式,而非寄存器。

一个例子是字符串常量池,所有字符串和字符串常量都会被自动放置到这个特殊的存储空间中。

特殊情况 -> 原始类型

原始类型是直接创建一个“自动变量”,不是引用,该变量直接在栈上保存它的值,运行效率更高。

十、Java中的一些常见概念


1、数组

Java的数组一定会被初始化,并且无法访问数组边界之外的元素,这种边界检查的代价是需要消耗少许内存,以及运行时需要少量时间来验证索引的正确性。当创建一个放置对象的数组时,实际上数组里包含的是引用,这些引用都有一个特殊的值null,Java会认为null的引用没有指向任何对象,所以当你操作引用之前,需要确保将其指向了某个对象。如果你试图操作一个值为null的引用,系统会返回一个运行时错误。

2、移位操作符

移位操作符也操纵二进制位,它们只能用来处理基本类型里的整数类型。左移位操作符(<<)会将操作符左侧的操作数向左移动,移动的位数在操作符右侧指定(低位补0)。“有符号”的右移位操作符(>>)则按照操作符右侧指定的位数将操作符左侧的操作数向右移动。“有符号”的右移位操作符使用了“符号扩展”:如果符号为正,则在高位插入0,否则在高位插入1。

3、按位操作符

按位操作符用来操作整数基本数据类型中的单个二进制位(bit)。按位操作符会对两个参数中对应的二进制位执行布尔代数运算,并生成一个结果。

4、三元运算符

相当于ifelse。

🔥联系作者,或者扫描作者主页二维码加群,加入我们吧🔥

推荐阅读

Java学习路线总结❤️搬砖工逆袭Java架构师❤️(全网最强,建议收藏)

❤️连续面试失败后,我总结了57道面试真题❤️,如果时光可以倒流…(附答案,建议收藏)

10万字208道Java经典面试题总结(附答案,建议收藏)")

MySql基础知识总结(2021版)
MySql基础知识总结(SQL优化篇)
【Vue基础知识总结 1】Vue入门
【100天算法入门 - 每日三题 - Day1】二叉树的中序遍历、两数之和、整数反转

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值