Java常用知识整理

一、ClassLoader

  当运行一个Java 程序时,JVM启动,运行bootstrap classLoader(启动类加载器),将Java核心的API加载进来;接着调用ExtClassLoader加载扩展API,最后AppClassLoader加载CLASSPATH目录下定义的Class;这就是一个程序最基本的加载过程。

  最常用的两个方法应该是ClassLoader.loadClass(String name , boolean resolve)和Class.forName(String name) ,这两个方法都是用来加载Class的,但在作用上却有一些区别。

  loadClass的方法是被保护的,用户能够直接调用的是loadClass(String name) , resolve默认为false,即不解析类,则说明loadClass在加载类的时候不对该类进行解析,因此不会初始化该类。forName(String name ) 等同于Class.forName("className",true,CALLCLASS.class.getClassLoader),即在加载的时候就会将该类进行解释和初始化

  在JVM加载类时需要经过三个步骤:装载、连接、初始化。

  装载:

  1.通过类的全名产生对应类的二进制数据流。(注意,如果没找到对应类文件,只有在类实际使用时才抛出错误。)

  2.分析并将这些二进制数据流转换为方法区(JVM 的架构:方法区、堆,栈,本地方法栈,pc 寄存器)特定的数据结构(这些数据结构是实现有关的,不同 JVM 有不同实现)。这里处理了部分检验,比如类文件的魔数的验证,检查文件是否过长或者过短,确定是否有父类(除了 Obecjt 类)。

  3.创建对应类的 java.lang.Class 实例(注意,有了对应的 Class 实例,并不意味着这个类已经完成了加载链链接!)。

  连接:

  1.验证,即验证class是否符合规则,如检查 final class 又没有被继承,检查静态变量的正确性等等;

  2.准备,对类的成员变量分配空间。虽然有初始值,但这个时候不会对他们进行初始化(因为这里不会执行任何 Java 代码)。具体如下:所有原始类型的值都为 0。如 float: 0f, int: 0, boolean: 0(注意 boolean 底层实现大多使用 int),引用类型则为 null。

  3.解释,为类、接口、方法、成员变量的符号引用定位直接引用。这一步是可选的,可以在符号引用第一次被使用时完成,即所谓的延迟解析(late resolution)。但对用户而言,这一步永远是延迟解析的,即使运行时会执行 early resolution,但程序不会显示的在第一次判断出错误时抛出错误,而会在对应的类第一次主动使用的时候抛出错误!

  初始化:

  1.如果基类没有被初始化,初始化基类。

  2.有类构造函数,则执行类构造函数。

说明:Java中字符只以一种形式存在,那就是Unicode

二、类型转换

  简单数据类型由低级到高级的顺序为(byte,short,char)- int - long - float - double ;

  低级到高级可自动转换,高级到低级、同级之间都需要强制转换。

  1. 默认1.0表示的是double型,如果需要表示float,需写为1.0f。

  2.  当char x= ‘x‘ ; int i = 10;  公式false? i : x 输出的值为120,因为两者都是变量,会将低级升级到高级的表示形式;false?10:x ,x的输出仍为x,是因为Java编程规范中提到当两个表达式有一个是常量表达式(10),另外一个是T类型,且常量表达式可以被T表示时,输出结果是T类型。

  3.三目运算是右结合性。

三、异常

  Error和exception都是继承自Throwable类。

  Error是不可控制的,经常用来表示系统错误或者底层资源的错误。

  Exception可以是可被控制(checked) 或不可控制的(unchecked),应该在应用层进行处理,throw表示抛出一个异常,throws是在方法体外部声明可能会抛出某些异常。

程序必须捕获或声明所有的非运行时异常。

  

时间: 2024-12-10 02:11:35

Java常用知识整理的相关文章

MYSQL数据库常用知识整理

Evernote Export MYSQL数据库常用知识整理 什么是MYSQL MYSQL的特性 MYSQL存储引擎的分类以及数据文件的介绍 MYSQL赋权 MYSQL备份与恢复 MYSQL的基本操作:增删查改 MYSQL的基本故障判断与处理 MYSQL的调优 MYSQL主主.主从复制的实现 MYSQL大数据备份和恢复 数据文件的损坏与修复 什么是MYSQL MySQL 是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.目前MySQL被广泛地应用在Internet上的中

JAVA基础知识整理

一.首先先明白get与post的基本定义和区别: 这是两种在客户端和服务器端进行请求-响应的方法. 1get:从指定的资源请求数据. 2post:向指定的资源提交要处理的数据. get基本上用于从服务器取回数据,注意:get方法可能返回缓存数据. post可以从服务器上获取数据,不过,post方法不会缓存数据,并且常用语连同请求一起发送数据. 二. Jquery $.get()方法. $.get()方法通过Http Get发起请求,从服务器上请求数据. 语法:&.get(URL,callback

Java基础知识整理(一)

概述 公司业务需要,产品既要有.NET又需要Java,没得选择,只能业余时间学习Java,整体觉得Java也.NET还是很相似的,只是语法有差别,差别也不是很大,这就将学习Java的基础知识整理下,以便于自己的学习.作为个.NET程序猿也可以学习Java ,毕竟技多不压身,学习多也要精通. 开发工具 eclipse ,开发java类似.NET 需要装JDK类似.NET Framework. Java开发工具eclipse设置 1.设置字体:window设置: 2.设置快捷键:window--ke

JAVA基础知识整理 常用框架

JAVA反射---相关资料: 1.Java反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信息 2.反射还可以让我们在运行期实例化对象,调用方法,通过调用get/set方法获取变量的值. 参考框架:Butterfly Persistence 构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种

Java并发知识整理

整理了一下前端时间学习Java并发的笔记,大约有40篇. 1. Java并发基础知识 并发基础(一) 线程介绍 并发基础(二) Thread类的API总结 并发基础(三) java线程优先级 并发基础(四) java中线程的状态 并发基础(五) 创建线程的四种方式 并发基础(六) 线程Thread类的start()和run() 并发基础(七) Thread 类的sleep().yeild().join() 并发基础(八) java线程的中断机制 并发基础(九) java线程的终止与中断 并发基础

JAVA常用设计模式整理

设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,目的仅仅是着眼于解决现在的问题,而设计模式的“复杂”就在于它是要构造一个“万能钥匙”,目的是提出一种对所有锁的开锁方案.在真正理解设计模式之前我一直在编写“简单”的代码.这个“简单”不是功能的简单,而是设计的简单.简单的设计意味着缺少灵活性,代码很钢硬,只在这个项目里有用,拿到其它的项目中

JAVA hashmap知识整理

HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题.HashMap的工作原理.ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题.Hashtable是个过时的集合类,存在于Java API中很久了.在Java 4中被重写了,实现了Map接口,所以自此以后也成了Java集合框架中的一部分.Hashtable和HashMap在Java面试中相当容易被问到,甚至成为了集合

JAVA常用知识(mian shi)点总结---集合

一.Collection 与 Collections的区别:1. Collections:java.util.Collections 是一个包装类.它包含有各种有关集合操作的静态多态方法.此类不能实例化,就像一个工具类,服务于Java的Collection框架. 2. Collection: Collection是最基本集合接口,它定义了一组允许重复的对象,提供了对集合对象进行基本操作的通用接口方法,其意义是为各种具体的集合提供了最大化的统一操作方式. 二.Collection 基础:1. Co

Java基础知识整理(一) 面向对象程序设计——封装整理

1 类中的属性又叫成员变量(member variable),属性用英文(property)或者attribute 2 对象(Object) 又叫做实例(Instance).生成一个对象的过程叫做对象的实例化 3 面向对象编程中命名的约定:  (a) 类:首字母大写,如果一个类名由多个单词构成,那么每个单词的首字母都要大写,中间不使用仍何连接符,比如Person类 ,MemberTest类     (b)方法:首字母小写,如果一个方法由多个单词构成,那么第一个单词的所有字母全都小写,从第二个单词