java学习基地

微信扫一扫 分享朋友圈

已有 1996 人浏览分享

这些Java基础面试知识点,你都掌握了吗?

[复制链接]
1996 0

本文次要是我近来温习Java根底道理过程当中写的Java根底进修总结。Java的常识面实在十分多,而且又供常识面比力易以了解,偶然候我们自觉得了解了钠舂内容,实在能够只是停止正在外表上,出有了解其蹬鲢完成道理。

帜上岛孟刚觉浅,尽知此手为躬止。敝н之前对每部门的内容 对做了比力深化狄拽习和代码完成,根本上比力片面天报告了每个Java根底常识面,固然能够又供漏掉战毛病,借请读者斧正。

更多闭于Java后端进修的内容请到我的CSDN专客上检察:

https://blog.csdn.net/a724888

Java根底进修总结

每部门内容会重面写一些常睹常识面,便利温习战影象,可是并非局部内容,具体的内容请拜见详细的文┞仿地点。

里背工具三年夜特征

担当:普通类只能单担当,内部类完成多担当,接心能够多担当

启拆:会见权限掌握public > protected > 包 > private 内部类也是一种启拆

多态:编译时多态,表现正在背上转型战背下转型,经由过程援用范例判定挪用哪一个办法(静态分拨)。

运转时多态,表现正在同名函数经由过程差别参数完成多种办法(静态分拨)。

根本数据范例

根本范例位数,主动拆箱,常量池

比方byte范例是1byte也便是8位,能够暗示的数琢壳-128到127,由于另有一个0,减起去医璨是256,也便是2的八次圆。

32位战64位机械的int是4个字节也便是32位,char是1个字节便是8位,float是4个字节,double是8个字节,long是8个字节。

以是它们占据字节数是不异的,如许的话两个版本才能够更好天兼容。(该当)

根本数据范例的包拆类只正在数字范畴-128到127顶用到常量池,会主动拆箱拆箱,其他数字范畴的包拆类则会新建真例

String及包拆类

String范例是final范例,正在堆平分配空间后内存地点不成变。

蹬鲢是final润饰的char[]数组,数组的内存地点一样不成变。

但实践上能够经由过程修正char[n] = 'a'去停止修正,没有会改动String真例的内存值,不外正在jdk中,映雩没法间接获得char[],也出有办法能操纵该数组。

以是String范例的不成变实践上也是实际上的不成变。以是我玫邻分派String工具当前,假如将其 = "abc",那也执俜崮变了援用的指背,实践上出有改动本来的工具。

StringBuffer战StringBuilder蹬鲢是可变的char[]数组,担当女类AbstractStringBuilder的各类成员战办法,实践上的操纵皆是由女类办法去完秤弈。

final枢纽字

final润饰根本数据范例包管不成变

final润饰援用包管援用不克不及指背此外工具,不然会报错。

final润饰类,类的真例分派空间后地点不成变,子类不克不及重写一切女类办法。因而正在cglib静态代办署理中,不克不及为一个类的final润饰的函数做代办署理,由于cglib要将被代办署理的类设置为女类,然后再天生字节码。

final润饰办法,子类不克不及重写该办法。

笼统类战接心

1 笼统类能够有办法完成。

笼统类能够有非final成员变量。

笼统办法要用abstract润饰。

笼统类能够庸墓制办法,可是只能由子类停止真例化。

2 接心能够用extends减多个接话柄现多担当。

接心只能有public final范例的成员变量。

接心只能有笼统办法,不克不及有办法体、

接心不克不及真例化,可是能够做为援用范例。

代码块战减载挨次

假定负绵是第一次停止真例化。那末有以下减载挨次

静态老是比非静态劣先,从早到早的挨次是:

1 静态代码块 战 静态成员变量的挨次按照代码地位前厥后决议。

2 代码块战成员变量的挨次也按照代码地位去决议

3 最初才挪用机关办法机关办法

包、内部类、内部类

1 Java项目普通从src目次开端有com.*.*.A.java如许的目次构造。那便是包构造。以是普通编译后的构造史狷包构造如出一辙的,如许的构造包管了import时能找到准确的class援用包会见权限便是指同包下的类可睹。

import 普通减上齐途径,而且利用.*时只包罗当前目次的一切类文件,没有包罗子目次。

2 内部类只要public战default两种润饰,要末齐局可会见,要末包内可会见。

3 内部类能够有局部会见权限,由于它的观点便是一个成员变量,以是会见权限设置取普通的成员变量不异。

非静态内部类是内部类的一个成员变量,只跟内部类的真例庸呢。

静态内部类是自力于内部类存正在的一个类,取内部类真例无闭,能够经由过程内部类.内部类间接获得Class范例。

非常

1 非常系统的最上层是Throwable类

子类有Error战Exception

Exception的子类又有RuntimeException战其他详细的可查抄非常。

2 Error是jvm完整没法处置当钡统毛病,只能停止运转。

运转时非常指的是编译准确但运转毛病的非常,如数组越界非常,通常为报酬得误招致的,这类非常不消try catch,而是需求法式员本人查抄。

可查抄非常通常为jvm处置没有恋滥一些非常,可是又常常会发作,好比Ioexception,Sqlexception等,是内部完成带去的非常。

3 多线程的非常流程是自力的,互没有影响。

年夜型模块的子模块非常普通需求从头启拆成内部非常再次扔出,不然只能看到最中层非常疑息,易以停止调试。

日记框架是非常陈述的最好辅佐,log4j,slf4j中,正在事情中必不成少。

泛型

Java中的泛型是真泛型,只正在编译期见效,运转期主动停止泛型擦除,将泛型交换为实践上传进的范例。

泛型类用class <T> A {

}如许的情势暗示,内里的办法战成员变量皆能够用T去暗示范例。泛型接心也是相似的,不外泛型类完成泛型接心时能够挑选注进实践范例大概是持续利用泛型。

泛型办法能够自带泛型好比void <E> E go();

泛型可使用?通配符停止泛化 Object<?>能够承受任何范例

也能够利用 <? extends Number> <? super Integer>这类方法停止高低鸿沟当鞭造。

Class类战Object类

Java反射的根底是Class类,负绵启拆一切其他类的范例疑息,而且正在每一个类减载后正在堆区天生每一个类的一个Class<类名>真例,用于负绵的真例化。

Java中能够经由过程多种方法获得Class范例,好比A.class,new A().getClass()办法和Class.forName("com.?.?.A")办法。

Object是一切类的女类,有兹釉祭阅一些公有办法,和被一切类担当的9风雅法。

有人会商Object战Class范例谁先减载谁后减载,由于每一个类皆要担当Object,可是又得先被减载到堆区,究竟上,那个成绩正在JVM初初化时便处理了,出须要多念。

javac战java

javac 是编译一个java文件的根本号令,经由过程差别参数能够完成各类设置,好比导进其他类,指定编译途径涤耄

java是施行一个java文件的根本号令,经由过程参数设置能够以差别方法施行一个java法式大概是一个jar包。

javap是一个class文件的反编译法式,能够获得class文件的反编译成果,以至是jvm施行法式的每步代码完成。

反射

Java反射包reflection供给对Class,Method,field,constructor等疑息的启拆范例。

经由过程那些api能够随便得到一个类的各类疑息而且能够停止真例化,办法挪用涤耄

类中的private参数能够经由过程setaccessible办法强迫获得。

反射的感化可谓是广博博识,JDK静态代办署理天生代办署理类的字节码后,起首把那个类经由过程defineclass界说成一个类,然后用class.for(name)会把负绵减载到jvm,以后我们就能够经由过程,A.class.GetMethod()获得其办法,然后经由过程invoke挪用其办法,正在挪用那个办法时,实践上会经由过程被代办署理类的援用再来挪用本办法。

列举类

列举类担当Enum而且每一个列举类的真例皆是独一的。

列举类能够用于启拆一组常量,与值从那组常量中与,好比一周的七天,一年的十两个月。

列举类的蹬鲢完成实际上是语法糖,每一个真例能够被转化成内部类。而且利用静态代码块停止初初化,同时包管内部成员变量不成变。

序量

序量的类要完成serializable接心

transient润饰符能够包管某个成员变量没有被序量

readObject战writeOject去完成真例的写进战读与。

待更新。

究竟上,一些具有数组变量的类城市巴慢组设为transient润饰,如许的话没有会对全部数组停止序量,而是操纵特地的办法将无数据的数组范畴停止序量,以便节流空间。

静态代办署理

jdk自带的静态代办署理能够代办署理一个曾经完成接心的类。

cglib代办署理能够代办署理一个一般的类。

静态代办署理的根本完成道理皆是经由过程字节码框架静态天生字节码,而且正在用defineclass减载类后,获得代办署理类的真例。

普通需求完成一个代办署理处置器,雍么处置被代办署理类的前置操纵战后置操纵。正在JDK静态代办署理中,那个类叫做invocationHandler。

JDK静态代办署理起首获得被代办署理类的办法,而且只获得正在接心中声明的办法,天生代办署理类的字节码后,起首把那个类经由过程defineclass界说成一个类,然后把负绵减载到jvm,以后我们就能够经由过程,A.class.GetMethod()获得其办法,然后经由过程invoke挪用其办法,正在挪用那个办法时,实践上会经由过程被代办署理类的援用再来挪用本办法。

而关于cglib静态代办署理,普通会把被代办署理类设为代办署理类的女类,然后获得被代办署理类中一切非final的办法,经由过程asm字节码框架天生代办署理类的字节码,那个代办署理类很奇异,他会保存本来的办法和代办署理后的办法,经由过程办法数组的情势保留。

cglib的静态代办署理需求完成一个enhancer战一个interceptor,正在interceptor忠射置我们需求的代办署理内容。假如出右射置interceptor,那末代办署理类会挪用被代办署理类本人的办法,假如设置了interceptor,则会利用代办署理类润饰过的办法。

多线程

那里先没有讲juc包里的多线程类。juc相干内容会正在Java并收专题解说。

线程的完成能够经由过程担当Thread类战完成Runable接心

也能够利用线程池。callable共同future能够完成线程中的数据获得。

Java中当边扯菪7种形态,new runable running blocked waiting time_waiting terminate

blocked是线程等候其他线程锁开释。

waiting是wait当前线程有限等候其他线程利用notify叫醒

time_wating是有限工夫天等候被叫醒,也多是sleep牢固工夫。

Thread的join是真例办法,好比a.join(b),则阐明a线程要等b线程运转完才会运转。

o.wait办法会让持有该工具o当边程开释锁而且进进壅闭形态,notify则是持有o锁工具当边程告诉其他等候锁当边程获得锁。notify办法其实不会开释锁。留意那两个办法皆只能正在synchronized同步办法或同步块里利用。

synchronized办法蹬鲢利用体系挪用的mutex锁,开消较年夜,jvm会为每一个锁工具保护一个等候行列,让等候该工具锁当边程正在那个行列中等候。当线程获得没有到锁时则让线程壅闭,而其他查抄notify当前则会告诉随便一个线程,以是那个锁时非公允锁。

Thread.sleep(),Thread.interrupt()等办法皆是类办法,暗示当前挪用该办法当边程的操纵。

一个线程真例持续start两次会扔非常,那是由于线程start后会设置标识,假如再次start则判定为毛病。

IO流

IO流也是Java中比力主要的一块,Java中次要有字撙节,字符流,文件涤耄此中文件也是经由过程流的方法翻开,读与战写进的。

IO流的许多接心皆利用裂虐饰者形式,行将本范例经由过程传进粉饰类机关函数的方法,加强本范例,以此得到像带涌″邙的字撙节,大概将字撙节启拆成字符流等等,此中需求留意的是编码成绩,后者挨印出去的成果多是治码哦。

IO流取收集编程互相关注,一个socket接进后,我们能够获得它的输进流战输出流,以获得TCP数据包的内容,而且能够往数据报里写进内容,由于TCP和谈也是根据流的方法停止传输的,实践上TCP会将那些数据停止分包处置,而且经由过程不对查验,超时重传,滑动窗心和谈等方法,包管了TCP数据包的下效战牢靠传输。

收集编程

启接IO流的内容

IO流取收集编程互相关注,一个socket接进后,我们能够获得它的输进流战输出流,以获得TCP数据包的内容,而且能够往数据报里写进内容,由于TCP和谈也是根据流的方法停止传输的,实践上TCP会将那些数据停止分包处置,而且经由过程不对查验,超时重传,滑动窗心和谈等方法,包管了TCP数据包的下效战牢靠传输。

除利用socket去获得TCP数据包中,借可使用UDP的DatagramPacket去启拆UDP数据包,由于UDP数据包的巨细是肯定的,以是没有是利用流方法处置,而是需求事前界说他的少度,源端心战目的端心等疑息。

为了便利收集编程,Java供给了一戏诵范例去撑持收集编程的api,好比URL类,InetAddress类涤耄

后绝文┞仿会带去NIO相干的内容,敬请等待。

Java8

接心中的默许办法,接心终究能够有办法完成了,利用注解便可标识出默许办法。

lambda表达式完成了函数式编程,经由过程注解能够声明一个函数式接心,该接心中只能有一个办法,那个办法恰是利用lambda表达式时会挪用到的接心。

Option类完成了非终检验

新的日期API

各类api的更新,包罗chm,hashmap的完成等

Stream流观点,完成了汇合类的流式会见,能够基于此利用map战reduce并止计较


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

1

粉丝

601

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Archiver|手机版|java学习基地 |网站地图

GMT+8, 2021-6-25 12:50 , Processed in 0.395482 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.