java基础相关知识

简介: java语言是面向对象语言,他和面向过程C不同点是,有封装、继承、多态,万物皆是对象,但是执行效率面向过程稍微快些。

目录

前言

大家好,我是苍何。最近思考了一个问题,为什么会出现公司面试造火箭,工作扭螺丝的现象,包括各种八股文的连环大绝杀问到你不会为主,其实这是考察你的知识面以及掌握的深度,而为什么需要这样呢?归其原因,无非是通过筛选找到那些会思考的人,他们需要的并不是CRUD的工具人,而是会思考能创新的工程师。

当你深刻理解到这点,我想不用刻意去学习,在工作中,肯定会吾日三省吾身。

于是乎,这个重新开始学习编程系列文章出来了。

愿与君共勉!

一、java语言的特点

1、面向对象
java语言是面向对象语言,他和面向过程C不同点是,有封装、继承、多态,万物皆是对象,但是执行效率面向过程稍微快些。
2、垃圾回收
JVM垃圾自动回收,即GC操作(后面会细讲)
3、跨平台性
一次编译,到处运行,其实JVM会针对不同不同有不同的实现,我们编写的代码会通过JVM转为.class字节码文件,字节码通过JVM可以在不同平台上运行,转化为能被不同平台识别的机器码。

二、JDK和JRE

1、JDK是提供给java开发人员使用的开发工具包,包含了JRE
2、JRE是运行环境,包含了JVM

三、8种基本数据类型

byte、short、int、long、float、double、char、boolean

四、位运算符

1、<<(左移)
向左移动n位,相当于乘以2的n次幂
2、>>(右移)
向左移动n位,相当于除以2的n次幂
3、>>(无符号右移)
被移位二进制最高位无论是0或者是1,空缺位都用0补

五、接口和抽象类的区别

1、访问修饰符
抽象类:public,protected和default等修饰
接口只能是:public
2、extends和implements
3、抽象类可以有构造器,接口不行
4、抽象类单根继承,接口多个实现
5、接口是约束定义规范,子类可以不实现父类所有方法,但是要实现接口里所有的方法

六、静态变量和实例变量的区别

静态变量存储在方法区,属于类所有.实例变量存储在堆当中,其引用存在当前线程栈.需要注意的是从JDK1.8开始用于实现方法区的PermSpace被MetaSpace取代了.

七、浅拷贝和深拷贝的区别

1、浅拷贝:
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。”里面的对象“会在原来的对象和它的副本之间共享。简而言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。
构造方法和clone()方法都介意实现浅拷贝
2、深拷贝:
深拷贝是一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。简而言之,深拷贝把要复制的对象所引用的对象都复制了一遍。
重写clone方法、通过对象序列化实现深拷贝

八、==和eqauls()的区别

1、基本数据类型:==是值比较
2、引用数据类型,==和equals都是比较内存地址,只不过有些类重写了Object类的equals方法,比如string类比较的就是值是否相等,重写equals需要重写hashcode方法

九、final有哪些用法

被final修饰的类不可以被继承
被final修饰的方法不可以被重写
被final修饰的变量不可以被改变.如果修饰引用,那么表示引用不可变,引用指向的内容可变.
被final修饰的方法,JVM会尝试将其内联,以提高运行效率
被final修饰的常量,在编译阶段会存入常量池中.
除此之外,编译器对final域要遵守的两个重排序规则更好:

在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序
初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序.

常见的final修饰类:

1、java.lang包中

包装类:Boolean,Character,Short,Integer,Long,Float,Double,Byte,Void(八大类型的包装类型加一个void)
    字符串类:String,StringBuilder,StringBuffer
    系统类:System、Math,StrictMath

2、java.util包中

UUID、Scanner

3、java.lang.reflect包中

Constructor、Field、Method

十、String对象的intern()

Stirng中的intern()是个Native方法,它会首先从常量池中查找是否存在该常量值的字符串,若不存在则先在常量池中创建,否则直接返回常量池已经存在的字符串的引用

十一、String和StringBuffer的区别

String和StringBuffer主要区别是性能:String是不可变对象,每次对String类型进行操作都等同于产生了一个新的String对象,然后指向新的String对象.所以尽量不要对String进行大量的拼接操作,否则会产生很多临时对象,导致GC开始工作,影响系统性能.

StringBuffer是对象本身操作,而不是产生新的对象,因此在有大量拼接的情况下,我们建议使用StringBuffer(线程安全).

十二、泛型的上界和下界

目录
相关文章
|
NoSQL Java 数据库连接
day40_java_基础巩固
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i,加油!!!
|
运维 Dubbo Java
day35_java_基础巩固
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i
|
6月前
|
存储 Java 开发工具
day04_java基础
day04_java基础
|
缓存
day47_java_基础巩固
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i,加油!!!
|
Java 数据库连接 Spring
day42_java_基础巩固
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i,加油!!!
|
存储 缓存 NoSQL
day50_java_基础巩固
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i,加油!!!
|
XML Java 应用服务中间件
day39_java_基础巩固
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i
|
安全
day03_java基础
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!
|
Java 编译器
day09_java基础
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!