序言
大学期间接触 Java 的天数也不短了,不论自学还是应聘,都让我察觉到此基础的必要性。互联网发展博蒙阿了,各式各样框架各式各样控制技术更新插值的速度非常快,可能你正好掌控了两门控制技术的应用,它却已经走在出局的边缘了。
而自学新控制技术总要付出一定的天数生产成本,那么是不是降低天数生产成本呢?那就是打好此基础,控制技术再是不是技术革新,下层的东西也很少会变动,稳固的此基础会协助你在各式各样新控制技术的自学中得心应手,快速上手。
因为我优先选择的路径是前台开发,因此聊聊我认为的此基础有哪些。其他路径肯定也有他们的体系,从上层到高层人士,可以他们探索。前台的话,我觉得网络科学知识,各式各样协议,web 科学知识,资料库科学知识,Linux INS13ZD以及他们优先选择的前台词汇科学知识,那些是最此基础最须要稳固掌控的。
因此皮利皮,会出一系列与前台此基础相关的昌明,一是对他们过去自学的一个归纳,二是撷取出来,希望可以协助到须要的人。
概述
Java 此基础我做了 10 个方面的归纳,包括基本原理,流程词汇,URL,基本类别与演算,字符串与字符串,极度处置,Java 网络平台与缓存管理工作,分布式 Java 应用,多处置器,IO。以下对那些内容做一些简单的归纳,同时我也有完整的观念填空,网志上不方便展现,若有须要,联系我。
细节
1. 基本原理
1.1 词汇特点
纯流程词汇网络平台毫无关系性内建C#支持web可靠性防止代码攻击 易用性
强类别监督机制废弃物拆解器极度处置巡查监督机制 除去C++中难以理解易混为一谈的特性
1.2 与C++比较
解释校对优选词汇,执行速度快,虚拟化纯流程词汇,只有类,不存在自上而下表达式或自上而下表达式无操作符,无大继承,可多实现废弃物拆解器自动管理工作缓存1.3 main表达式科学知识
Java流程出口处方法可由final,synchronized润色,不能用abstract1.4 Java流程调用次序
动态强于非动态派生类强于常量按照成员表达式的定义次序一共10个1.5 返回值与可见性
动态表达式属于类局部表达式属于花括号成员表达式看下一条public、protected、default、private 可见性依次递减1.6 构造表达式
与类名相同,无返回值可重载,不能被继承,即不能被覆盖参数个数任意伴随new 一起调用,为系统调用完成对象的调用工作常量可通过super显式调用派生类。派生类没有提供无参,常量必须显式调用未定义,默认无参,润色符取决于类润色符1.7 标识接口
无任何方法声明表示实现它的类属于一个特定的类别1.8 clone 方法
实现Cloneable接口重写Object类中的clone()clone()中调用super.clone()把浅复制引用指向新的克隆体1.9 反射
定义:允许流程在运行时进行自我检查,也允许1.10 创建对象的四种方式
new反射监督机制clone()反序列化1.11 package 作用
提供多层命名空间,解决命名冲突对类按功能进行分类,使项目组织更加清晰2. 流程词汇
2.1 与面向过程区别
层次逻辑关系不同。流程词汇是通过类的层次结构来体现类之间的继承与发展面向过程是通过模块的层次结构概括模块与模块间的关系与功能数据处置方式不同与控制流程方式不同流程词汇是数据与操作封装成一个整体,通过事件驱动来激活和运行流程面向过程是数据单独存储,控制流程方式上按照设计调用或返回流程2.2 特性
抽象继承多态封装2.3 这种开发方式优点
开发效率高。代码重用保证软件的鲁棒性。经过长期测试的已有代码保证软件的高可维护性。设计模式成熟2.4 继承
单继承只能继承派生类的非私有成员表达式和方法同名成员表达式,常量覆盖,不会继承相同表达式签名,常量覆盖,不会继承2.5 组合和继承区别
组合:在新类中创建原有类的对象。has a继承是 is a2.6 多态
方法重载校对时多态方法覆盖运行时多态成员表达式无大态概念2.7 覆盖和重载区别
子派生类关系,垂直;同类方法间关系,水平一对方法发生关系;多个方法发生关系参数列表相同;参数列表不同调用的方法根据对象的类别决定;根据调用时的实参表决定方法体2.8 抽象类与接口异同
同
不能被实例化接口的实现类实现了接口,抽象类的常量实现了方法,才能被实例化异
接口只能定义方法,不能实现;抽象类可以有定义和实现接口须要被实现;抽象类须要被继承接口强调特定功能的实现;抽象类强调所属关系接口成员表达式默认为 public static final,成员方法 public abstract抽象类表达式默认default,方法不能用 private、static、synchronized、native 润色2.9 内部类
动态内部类static 润色只能访问外部类中的static数据成员内部类与实例绑定不可定义动态属性和方法外部实例化后,该内部类才能被实例化局部内部类代码块内不能被public、protected、private以及static润色只能访问final 局部表达式匿名内部类无类名无构造表达式,必须继承或实现其他类原则无构造表达式无动态成员,方法和类不能是public、protected、private、static只能创建匿名内部类的一个实例new 后面有继承或实现特殊的局部内部类2.
利用反射:obj.getClass().getSuperClass().getName()不使用super.getClass()原因:该方法在 Object中为final与native,常量不能覆盖,返回此Object运行时类2.11 this
指向当前实例对象区分成员表达式与方法形参2.12 super
访问派生类成员表达式或方法常量同名会覆盖,访问派生类只能通过super常量构造表达式需显示调用派生类构造表达式时,super()必须为构造表达式的第一条语句3. URL
3.1 表达式命名
英文字母数字_和$不能包含空白字符首字符不能为数字保留字不能做标识符区分大小写3.2 assert
软件调试 运行时开启 -ea3.3 static
特定类的统一存储空间,类绑定成员表达式:属于类,缓存中只有一个复制成员方法:调动态数据。可实现单例模式代码块:调用动态表达式,只被执行一次内部类:不能与外部类重名,只能访问外部类动态数据(包括私有)3.4 switch
多分支优先选择整型或字符类别表达式或整数表达式Java 7 开始支持 String。原理是String的hashCode()返回的int类别值匹配3.5 volatile
保证线程间的可见性从缓存中取数据,而不是缓存不保证原子性3.6 instanceof
二元演算符判断一个引用类别的表达式所指向的对象是否是一个类的实例即左边对象是否是右边类的实例3.7 strictfp
精确浮点确保浮点演算的准确性若不指定,结果依赖于虚拟机网络平台指定后依赖于统一标准,保证各网络平台的一致性3.8 null
不是合法的Object实例无缓存表明该引用目前没有指向任何对象4. 基本类别与演算
4.1 基本数据类别
int长度byte(8 bit)short(16 bit)int(32 bit)long(64 bit)float长度单精度(32 bit float)双精度(64 bit double)boolean 类别表达式的取值truefalsechar数据类别:Unicode字符(16 bit)void:java.lang.Void 无法直接对其进行操作4.2 不可变类
实例创建后,值不可变所有的基本类别的包装类+String优点使用简单线程安全节省缓存缺点:会因为值的不同而产生新的对象,导致无法预料的问题4.3 类别转换
隐式类别转换低精度到高精度byte->short->char->int->long->float->double显式类别转换反之可能会损失精度类别自动转换低到高char类别会转换为其对应的ASCII码byte、char、short参与演算自动转为int,但”+=”,不转基本数据类别与boolean不能相互转换多种类别混合演算,自动转成容量最大类别演算符优先级点 () [] +(正) -(负) ++ — ~ ! * / % +(加) -(减) << >> >>> < <= > >= instanceof == != & | ^ && || ?: = += -= *= /= %= &= |= ^= ~= <<= >>= >>>=
5. 字符串与字符串
5.1 字符串创建与存储监督机制
堆常量池new String(“abc”)创建1个或2个对象5.2 ==、equals和hashCode区别
== 比较引用,缓存未覆盖,同==;比较内容hashCode鉴定对象是否相等,返回整数5.3 String,StringBuffer,StringBuilder
String:不可变,执行效率最低StringBuffer:可修改,线程安全,效率较高StringBuilder:可修改,线程不安全,效率最高5.4 其他
字符串调用方式length属性和length()方法6. 极度处置
6.1 finally块执行时机
若try中有return,在return前若try-finally或catch-finally中都有return,finally会覆盖6.2 finally代码块不是一定会被执行
流程进入try之前出现极度try中调用System.exit(0)6.3 Error
严重错误,不可恢复
6.4 Exception
可恢复,校对器可捕捉检查性极度IOSQL运行时极度JVM处置NullPointExceptionClassCastExceptionArrayIndexOutOfBoundsException出现极度后,一直往上层抛,直到遇到处置代码或最上层多态。若先捕获基类,再捕获常量。常量处置代码将永远不会得到执行7. Java网络平台与缓存管理工作
7.1 Java网络平台与其他词汇网络平台的区别
纯软件,包括JVM与JAVA APIJVM虚拟,不虚拟化7.2 JAVA代码的执行
代码校对为class:sun jdk 中javac装载class:ClassLoader执行class解释执行校对执行client compilerserver compiler7.3 java源码校对监督机制
词法分析器组件:Token流语法分析器组件:语法树语义分析器组件:注解语法树将语法树中的名字、表达式等元素与表达式、方法、类别等联系到一起检查表达式使用前是否已声明推导泛型方法的类别参数检查类别匹配性进行常量折叠检查所有语句都可到达检查表达式的确定性赋值解除语法糖将泛型JAVA转成普通Java检查所有checked exception都被捕获或抛出将含语法糖的语法树转成简单语法树eg:foreach,自动折叠代码生成器组件:字节码7.4 类加载监督机制
装载:全限定名+类加载器加载类链接校验格式不符,抛VerifyError加载引用的类失败:抛NoClassDefFoundError准备:动态表达式默认调用解析:属性、方法验证(可选)调用(不是类加载必须触发的)动态调用代码构造器代码动态属性调用触发时机调用了new反射调用了类中的方法常量调用了调用JVM启动过程中指定的调用类Bootstrap Class Loader:$JAVA_HOME/jre/lib/rt.jarExtension Class Loader:$JAVA_HOME/jre/lib/ext/*.jarSystem Class Loader:$CLASSPATHUser Defined Class Loader7.5 类执行监督机制
解释执行
JVM字节码为中间代码,由JVM在运行期对其解释并执行invokestaticinvokevirtualinvokeinterfaceinvokespecial基于栈代码紧凑,体积小线程创建后,产生PC和Stack指令解释执行栈顶缓存:栈顶值缓存在寄存器上部分栈帧共享 校对执行
client compiler轻量级,占缓存少方法内联去虚拟化冗余消除server compiler重量级,占缓存多逃逸分析是C2进行很多优化的此基础标量替换:用标量替换聚合量栈上分配若对象未逃逸,C2会优先选择在栈上直接创建Point对象实例,而不是在堆上栈上分配更快速,对象易拆解同步消除:如果发现同步的对象未逃逸,那也没有同步的必要。C2会去掉同步代码块 
    		

 
															 
             
    	 
    	 
    	 
    	 
						 
						
