Java基础知识点

数据类型:
基本数据类型:
整数类型:
byte/short/int/long
小数类型:
float/double
字符类型:
char
布尔类型:
boolean

引用数据类型:
数组/接口/类

包装类:
byte Byte
int Integer
short Short
long Long

float Float
double Double

char Character

boolean Boolean

装箱/拆箱:
装箱:
将基本类型转换为封装类型;
拆箱:
将封装类型转换为基本类型;

自增和自减:
前置++(++a):表示对a加1之后的结果进行运算.(先增加后使用)
后置++(a++):表示对a变量加1之前的原始值进行计算.(先使用后增加)

Java虚拟机栈:
简称栈,每当方法创建的时候都会创建一个栈帧,用来存储局部变量/操作栈/动态链接/方法出口等信息.
每当调用一个方法时调用一个栈帧,存放当前方法的局部变量,方法调用完,该方法的栈帧就被销毁.

Java堆:
所有线程共享一块存储区域,当JVM启动时创建,所有对象和数组都要在堆上分配.
每次使用new关键字,就表示在堆内存中开辟一块新的存储空间.

成员变量:存放在堆内,随着对象的销毁而销毁;
局部变量:存储在栈内存中,随着方法的调用结束而销毁.

GC垃圾回收机制:
GC功能可以自动监测对象是否超过作用域,从而达到自动回收内存的目的.
当JVM内存资源不够用时,就会自动清理堆中无用的对象(没有被引用的对象)所占用的空间.
一般会自动进行管理,要请求时可以调用system.gc()活RunnTime.getRuntime.gc().

垃圾回收机制的基本原理:
当创建对象时,GC从就开始监控这个对象的地址/大小以及使用情况,通常GC使用有向图的方式进行记录和管理堆中的所有对象,以此来确定哪些是"可达的",哪些是"不可达的",当GC确定"不可达"时,回收这些内存空间.

方法参数的值传递机制:
传递基本类型参数:传递参数值
传递引用类型参数:传递参数所引用的堆空间地址值

单例模式(饿汉式):
必须在该类中;
私有化构造器,防止外界通过构造器创建新的工具类对象;
向外暴露一个公共静态方法用于返回自身的对象;
public class ArrayUtils2{
private ArrayUtils2(){
}
private static ArrayUtils2 instance = new ArrayUtils2();
public static ArrayUtils2 getInstance(){
return instance;
}
}

使用枚举示例:
public emnu ArrayUtils3{
INSTANCE;
public static void sort(int[] arr){
system.out.println("排序");
}
}

== 和 equals的区别:
==:
比较基本数据类型时:比较两个值是否相等
比较对象数据时:比较两个对象是否在同一块内存空间(比较的是两个数据内存地址是否相等)
equals:
比较的是存储数据是否相等;

BigDecimal加减乘除操作:


image.png

蓝色区域为乘法和除法按照四舍五入方式保留两位小数;

String和StringBuffer/StringBuilder的区别:
String是不可变字符串;
StringBuffer/StringBuilder是可变字符串;

StringBuffer/StringBuilder区别:
StringBuffer:中的方法都是用了synchronized修饰,保证了线程安全,但性能较低
StringBuilder:中的方法没有使用synchronized修饰,线程不安全,但性能较高

SimpleDateFormat:
格式化(format):Date类型转化为String类型;String format(Date date)
解析(parse):String类型转化为Date类型;Date parse(String str)

Calendar:
日历类


image.png

ArrayList和LinkedList:
ArrayList:查询更改较快,新增和删除较慢.
LinkedList:新增和删除较快,查询和更改较慢.

List和Set接口继承Collection接口,Map接口不继承Collection接口;


image.png

Collection接口:主要表示List和Set两种存储方式;
List接口:列表,允许记录添加顺序,允许元素重复;
Set接口:不记录添加顺序,不允许元素重复;
Map接口:映射关系;

List接口常用实现类:
ArrayList类:
数组列表,表示数组结构,采用数组实现.
底层是一个object数组.
LinkedList类:
链表,表示双向列表和双向队列结构.
底层采用链表算法,实现了链表/队列/栈的数据结构.
Vector类:
向量,古老的ArrayList.
基于数组算法实现的列表,和ArrayList的区别在于使用了synchronized修饰,线程安全,效率低.
Stack类:
栈,表示栈结构,采用数组实现.
是vector类的子类.拥有后进先出特点,拥有push(入栈)/pop(出栈)方法.

Set接口常用实现类:
HashSet类:
底层使用哈希表实现,元素对象的hashCode值决定了在哈希表中的存储位置;
当旺HashSet集合中添加新的元素对象时,先会判断该对象和集合中的hashCode值:
不等:直接把这个对象存储到hashCode指定的位置
相等:再继续判断新对象和集合对象中的equals作比较
若为true:则视为同一对象,不保存
若为false:存储在之前对象同槽位的链表上

TreeSet类:
底层使用红黑树实现,可对集合中元素排序.

HashSet做等值查询效率高,TreeSet做范围查询效率高.

iterator:
迭代器,迭代器中拥有一个指针,默认只想低于个元素之前
boolean hasNext():判断指针后是否存在下一个元素
Object next():获取指针位置下一个元素,获取后指针向后移一位.
Iterator<String> it = list.iterator();
while(it.hasNext()){
String ele = it.next();
System.out.println(ele);
}


image.png

面向对象特征:继承/封装/多态/抽象
抽象:
分两种 过程抽象/数据抽象,是指忽略一个主题中与当前目标无关的那些方面,以便更突出当前目标的方面.
继承:
子类可以从父类中继承方法和实例变量,并且可以修改和增加方法.
Java中类只支持单继承,但支持多重继承.(一个子类只能有一个父类,但是父类还可以作为子类继承父类)
多态:
允许不同类的对象对同一消息做出响应.
封装:
把数据和过程包装起来.

封装的好处:
1.保证数据的安全性,防止调用者随意修改数据;
2.提高组件的重用性,把公用的方法放到一个类中,直接调用即可.

访问修饰符:


image.png

public:表示当前类私有,类访问权限,只能在本类中操作,离开本类不能访问;
defult(不写默认):表示当前包私有,包访问权限,定义和调用只能在同包中才能访问;
prodected:表示子类访问权限,同包中的可以访问,即使不同包但是有继承关系也可以访问;
private:表示公共的,可以在当前项目中任何地方访问.

JavaBean规范:
1.类必须使用public修饰
2.必须保证有公共无参构造器,即使手动提供了带参数的构造器,也得手动提供无参数构造器
3.字段使用private修饰,每个字段提供一对getter和setter方法

方法重载(overload):
两同一不同:
两同:在同一类中,方法名相同
一不同:方法参数列表不同(参数类型,参数个数,参数顺序)
方法重载的作用:屏蔽同一功能的方法由于参数不同所造成的方法名称不同.

方法重写(override):
子类存在一个和父类一样的方法时,称之为子类覆盖了父类的方法,也就是重写;
1.实例方法简明必须相同;
2.子类方法的返回值类型是和父类方法的返回值类型相同或是其子类;
3.子类方法中抛出的异常小于或等于父类方法声明抛出异常类型;
4.子类方法的访问权限比父类方法访问权限更大或相等.

抽象方法:
1.使用abstract修饰的方法,没有方法体,留给子类去覆盖
2.抽象方法必须定义在抽象类或接口中

接口和实现类的关系:
接口:定义多个抽象方法,仅仅定义有哪些功能,却不提供实现
实现类:实现接口,覆盖接口中抽象方法,完成具体的实现

this:
表示当前对象
主要存在于两个位置:
在构造器中:表示当前被创建的对象
在方法中:哪一个对象调用this所在的方法,此时this就表示哪一个对象

this的使用场景:
1.解决局部变量和成员变量之间的二义性,此时必须使用
2.同一个类中非static方法间互调
3.构造器重载的互调

super:
当前对象的父类对象

super的使用场景:
1.在子类方法中:调用父类被覆盖的方法
2.在子类构造器中:调用父类构造器

静态代码块:
static{
System.out.println("静态代码块");
}
使用static修饰的初始化代码块,当该代码块的类的字节码被加载进JVM,就执行static代码块代码,在开发中用来加载资源,加载配置文件等.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352