蘭陵N梓記

一指流沙,程序年华


  • 首页

  • 归档

  • 关于

  • 搜索
close

跟我一起复习Java-6:反射/动态代理

时间: 2019-09-29   |   分类: 技术     |   阅读: 2992 字 ~6分钟

Java反射

Java的反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才加载、探知、自审,使用在编译期并不知道的类。这样的特点就是反射。

Java的反射就是利用加载到JVM中的.class文件来进行操作的。.class文件中包含Java类的所有信息,当你不知道某个类具体信息时,可以使用反射获取Class,然后进行各种操作。反射就是把Java类中的各种成分映射成一个个的Java对象,并且可以进行操作。

反射提供的主要功能:

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法
  • 在运行时调用任意一个对象的方法

RTTI

RTTI(RunTime Type Information),所有的类型信息都必须在编译时已知。会在所有类第一次使用的时候,将class对象(保存在.class文件)动态加载到JVM。

RTTI与反射区别:

  • 编译器在编译时打开和检查.class文件
  • 运行时打开和检查.class文件
阅读全文 »

跟我一起复习Java-5:字节码/类加载器

时间: 2019-09-28   |   分类: 技术     |   阅读: 3668 字 ~8分钟

Java字节码

Java源文件编译之后生成的class文件,它是供JVM解释执行的二进制字节码文件。

其结构如下:

类型 名称 说明 长度
u4 magic 魔数,识别Class文件格式,0XCAFEBABE 4个字节
u2 minor_version 副版本号,如0x0000 2个字节
u2 major_version 主版本号,如0x0034 2个字节
u2 constant_pool_count 常量池计数 2个字节
cp_info constant_pool 常量池 n个字节
u2 access_flags 访问标志 2个字节
u2 this_class 类索引 2个字节
u2 super_class 父类索引 2个字节
u2 interfaces_count 接口计数 2个字节
u2 interfaces 接口索引集合 2个字节
u2 fields_count 字段个数 2个字节
field_info fields 字段集合 n个字节
u2 methods_count 方法计数器 2个字节
method_info methods 方法集合 n个字节
u2 attributes_count 附加属性计数 2个字节
attribute_info attributes 附加属性集合 n个字节
阅读全文 »

跟我一起复习Java-4:IO体系

时间: 2019-09-24   |   分类: 技术     |   阅读: 3825 字 ~8分钟

IO体系

普通IO

整个Java.io包主要分为两大部分

  • 文件特征对象
  • 文件内容操作对象

文件对象

在类Unix系统中,一切对象皆文件,文件是最为基本的对象。Java API提供了最为基本的文件对象。

文件特征对象主要有如下:

  • 文件(File):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等
  • 文件描述符(FileDescriptor): 主要映射到OS层的文件句柄对象
  • 文件系统(FileSystem):子类有UnixFileSystem,WinNTFileSystem等,用于适配不同的文件系统,仅内部使用,用户层不可调用。通过DefaultFileSystem.getFileSystem获取对应平台文件系统
  • 文件特征,包括Closeable,Flushable,FileFilter,Serializable

文件内容操作对象主要有两大类:流式操作与数据转换。

阅读全文 »

跟我一起复习Java-3:并发体系

时间: 2019-09-23   |   分类: 技术     |   阅读: 5372 字 ~11分钟

并发体系

线程

线程安全

线程安全性:当多个对象访问同一个对象时,如果不考虑这些线程运行环境的调度与交替执行,也不需要额外的同步,或者进行调用方任何其它协调操作。调用这个对象都可以获得正确的结果,那这个对象就是线程安全的。

  • 原子性
  • 可见性
  • 顺序的

线程实现:

  • Runnable:函数没有返回值
  • Callable:函数有返回值
  • Future:对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果、设置结果操作。
  • FutureTask:是Future也是Runnable,又是包装了的Callable
  • Thread:代表JVM一个线程
阅读全文 »

跟我一起复习Java-2:集合/Stream

时间: 2019-09-22   |   分类: 技术     |   阅读: 6272 字 ~13分钟

集合体系

集合是存储多个元素的容器,数组长度固定,不能满足长度变化的需求。其特点:

  • 长度可变
  • 存储元素可以是引用类型
  • 可以存储多种类型的对象

Iterator

Iterator接口:

  • 对 Collection 进行迭代的迭代器,即对所有的Collection容器进行元素取出的公共接口。
  • 提供boolean hasNext()和E next()两个方法
阅读全文 »

跟我一起复习Java-1:基础/正则

时间: 2019-09-21   |   分类: 技术     |   阅读: 1844 字 ~4分钟

基本数据类型

数据类型 大小 范围 默认值
byte(字节) 8 -128 - 127 0
shot(短整型) 16 -2^15 - 2^15-1 0
int(整型) 32 -2^31 - 2^31-1 0
long(长整型) 64 -2^63 - 2^63-1 0
float(浮点型) 32 1.4013E-45 - 3.4028E+38 0.0f
double(双精度) 64 -1.7976E+308 - 1.79769E+308 0.0d
char(字符型) 16 \u0000 - u\ffff \u0000
boolean(布尔型) 1 true/false false
阅读全文 »

正确地打印日志

时间: 2019-07-06   |   分类: 技术     |   阅读: 3818 字 ~8分钟

日志种类

软件记录日志非常重要,公司已积累了非常多的日志输出经验,也制定了不少的规范。通常会把业务软件系统的日志分为如下几种:

用于软件问题定界定位的日志:

  • 调试日志:其目的是为了快速定位问题的根源,主要记录程序的执行轨迹,充当软件的调试器。
  • 运行日志:其目的是为了跟踪程序的指标变化,主要记录程序各种关键指标数据统计,运行环境数据。
  • 接口日志:其目的是为了快速对问题边界排查,主要记录接口的输入信息,以及处理结果。

用于用户行为安全审计的日志:

  • 操作日志:其目的是为了跟踪用户操作安全审计,主要记录用户操作行为轨迹,操作什么资源内容,其结果是什么。
  • 安全日志:其目的是为了跟踪用户安全变更审计,主要记录用户的登录录出事件,权限修改等安全事件或行为。
阅读全文 »

优雅地使用异常

时间: 2019-06-15   |   分类: 技术     |   阅读: 2757 字 ~6分钟

异常与错误码

在开发业务系统代码,我们会经常与异常与错误码打交道,但有时傻傻地分不清楚。编写代码时,到底是使用异常还是返回错误码,一直以来都被程序员们广泛争论。

我们先来看看他们的区别,在编程语言上区别:

  • 异常:与面向对象编程结合紧密,它是一个类型系统,表示程序运行时发生错误的信号,一种识别及响应错误情况的一致性机制。
  • 错误码:与面向过程编程结合紧密,它通常是一串数字,表示处理函数返回业务流程错误的结果,错误码很容易被忽略且经常被忽略。

在接口定义上区别:

  • 异常: 面向代码开发者,通常用于在代码实现层,尤其是在面对象语言中,接口定义异常需要方法签名,以强制要求接口使用都处理异常。
  • 错误码:面向客户界面,通常用于对外接口响应非正常结果定义,自定义错误码以增加接口的交互体验与问题定位。
阅读全文 »
3 4 5 6 7 8 9 10 11
兰陵子

兰陵子

Programmer & Architect

164 日志
4 分类
57 标签
RSS 订阅
GitHub 知乎
© 2009 - 2022 蘭陵N梓記
Powered by - Hugo v0.101.0
Theme by - NexT
0%