A Small Developer
» java
面向方面编程的思想 I. 面向方面编程 1. 什么是方面 Aspect 大家可能知道,很多出名的框架比如 Spring, 里面用到了面向方面编程的思想,那么什么是面向方面编程呢?和学习面向对象编程 OOP一样,要先学习 对象 Object 是什么,那么在面向方面编程 AOP 中,我们要先知道什么是方面 Aspect: 可以这样理解,如果把对象看作一个圆柱体,那么其中的一个切面,就是一个方面 如果系统中存在交叉业务,一个交叉业务,就是要切入到系统的一个方面 我们用个例子来说明,有这么三个类: StudentService...
Java 中注解的使用 I. 注解 Annotation 注解是 JDK 1.5 提供的一个新特性,在框架中大面积的使用了注解,所以在这里讲一下注解 1. 什么是注解 注解相当于一种标记,加了注解就等于打上了某种标记 javac, 开发工具,和其他程序可以通过反射来来了解你的类和各种元素上是否有标记,通过标记去执行相应的处理 标记可以加在包,类,字段,方法,方法的参数以及局部变量上 2. Java 提供的几个基本注解 在 java.lang...
内省 -> 了解 JavaBean I. 什么是 JavaBean JavaBean 是一种特殊的 Java 类: 主要用于传递数据信息 JavanBean 中的方法主要用于访问私有的字段 方法名符合某种命名规则(setter/getter) II. 使用 JavaBean 如果要在两个模块之间,传递多个信息,那么可以将这些信息封装到 JavaBean...
Java 中类的加载器和反射 I. 类加载器 1. 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化: 加载 : 就是指将class文件读入内存,并为之创建一个Class对象 一个class文件基本组成: 成员变量,构造方法,成员方法,静态成员 任何类被使用时系统都会建立一个Class对象。 连接 : 验证: 是否有正确的内部结构,并和其他类协调一致 准备: 负责为类的静态成员分配内存,并设置默认初始化值 解析:...
Java 网络编程 I. 网络编程概述 1. 计算机网络 计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 2. 网络编程 网络编程,就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换 3. 网络模型 计算机网络之间以何种规则进行通信,就是网络模型研究问题。 OSI(Open System Interconnection开放系统互连)参考模型 应用层:主要是一些终端的应用,比如说FTP(各种文件下载),WEB(IE浏览),QQ之类的(可以把它理解成我们在电脑屏幕上可以看到的东西.就是终端应用) 表示层 :主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等) 会话层...
Java 中多线程编程(三): 线程池,匿名线程, 定时器 I. 线程池 1. 什么是线程池 因为程序启动一个新线程的成本是比较高的,因为它要涉及到要与操作系统进行交互,而使用线程池 则可以很好的提供性能,尤其是,当程序中要创建大量生存期很短的线程时,更应该考虑使用线程池。 线程池中的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用 在 JDK5 之前,我们必须实现自己的线程池,从 JDK5 之后, Java 内置支持了线程池 2. 创建线程池...
Java 中多线程编程二: 多线程安全问题 I. 线程安全 1. 多线程的问题: 那么首先来看多线程为什么出现问题(出问题的标准): 是否是多线程环境,因为单线程程序只要逻辑正确就没有问题 是否有共享数据, 没有共享数据的话,每个线程只访问和操作自己特有的数据,也不会出问题 是否有多条语句操作共享数据, 因为 cpu 执行指令的原子性,cpu 一次执行一个原子性操作,比如一次加法或者一次赋值 如果有多个线程,每个线程对共享数据的操作只有一个原子性的操作,那么数据也不会出问题 但如果,每个线程中都有多条操作语句操作共享数据,比如 A;B;C; 三个语句,对共享数据进行操作,理想顺序是线程1执行完...
Java 中多线程编程一: 多线程的基本概念和使用 I. 单线程程序和多线程程序的引入 如图,我们先来看单线程程序的代码执行顺序: 可以看得出来,代码的执行顺序是一条线从头开始执行直到结束,只有一条执行路径,该程序是单线程程序,那么如果在代码的执行过程中,从一个方法A转向执行另一个方法B的时候,A方法不停止,和B方法一起继续执行,那么这个程序就是多线程程序,如下图: II. 进程线程相关概念 1. 线程和进程 线程依赖于进程而存在 进程: Process 就是正在运行的程序,是系统进行资源分配和调用的独立单位 进程是一个程序在内存中的运行实例 每一个进程都有它自己的内存空间和系统资源 多进程有什么意义? 单进程计算机同时只能做一件事情,而多线程进程可以同时做多件事情,所以多线程能够在一段时间内,执行多个任务,提高cpu的使用效率。然而这并不是说,同一个时间点上,cpu 可以同时处理两个任务,而是在操作系统的资源管理与分配下,cpu...
Java 中的序列化 I. 序列化与反序列化 序列化是一种对象持久化的手段,普遍应用于网络传输和 RMI 的场景 序列化: 把对象按照流一样的方式,存入文本文件或者在网络中传输 对象 –> 流 ObjectOutputStream 反序列化: 把文本中的流对象数据或者网络中的流对象数据还原成对象 流 –> 对象 ObjectInputStream 1....
IO stream in Java I. IO 流 IO流: 用来进行设备间的数据传输问题 分类 按流向: 输入流: 数据流入程序,即读取数据 输出流: 数据流出程序,即写出数据 按数据类型:(同时他们分别也可以是输入流或者输出流) 字节流:如果不知道如何选择,那么就用字节流 字符流:为了方便操作文本数据; 如果操作的数据是文本数据,就用字符流 II....
Map in Java I. Map java.util.Map<K,V>: Map 是一个顶层的接口,不是 Collection 的子接口,用来存储键值对 (key - value) 将键 Key 映射到值的对象,一个映射不能包含重复的值,每个键最多只能映射到一个值 K: 此映射所维护的键 key 的类型...
IO in Java I. File 1. File类 java.io.File: 文件和目录(文件夹)路径名的抽象形式表示方式 如果我们想实现 IO 的操作,就必须知道硬盘上文件的表示形式,所以 Java 就提供了一个类 File 供我们使用 2. File类的构造方法 public File(String...
Exception in Java I. 异常的由来 异常, Exception, 就是程序出现了不正常的情况。程序的异常,有下面几种 程序的异常: java.lang.Throwable: 是所有异常类的父类 错误:严重问题,Error 异常:问题, Exception 编译期的问题: 非 RuntimeException 的异常 运行期的问题: RuntimeException...
Set in Java I.Set 接口 java.util.Set: Set 接口是 Collection 接口的子接口,用法和 Collection 完全相同 Set 的某些实现类中的元素是 无序的, 比如HashSet (无指存储和取出的元素顺序不一致) Set 中元素 不可重复,...
可变参数 有时候我们写一个方法的时候,参数的数目可能是不确定的,比如 sum 函数, 可能我们需要计算两个数之和,也有可能要计算三个数之和,也有可能是好多个。如果我们重写 sum 方法去匹配多种参数的个数的化,这样是很麻烦的。于是 Java 提供了一个特性,可变参数。 我们直接来看代码: package org.lovian.multiargs; /* * 可变参数:定义方法的时候,不知道定义多少个参数 * 格式: * 修饰符 返回值类型...
Java 中的泛型 Generics I. 泛型的由来 在泛型出现之前,我们是用 Object 类来代表任意类型。在使用对象的时候存在一个向下转型的问题,所以就会存在转型失败的隐患。而这个隐患在编译的时候,是检查不出来的,所以就存在了安全问题。所以在 JDK5之后,Java 提供了泛型来解决这个问题 II. 泛型 泛型: 一种特殊的类型,把类型明确的工作推迟到到创建对象的时候或者使用方法的时候才去明确的类型。 也被称为参数化类型,就是说把类型当作参数一样传递 格式: <数据类型>, 此处的数据类型只能是引用类型,可以是 T, E,...
List In Java I. List 接口 java.util.List: List 接口是 Collection 接口的子接口,用法和 Collection 大致相同 List 中元素 有序 (有序指存储和取出的元素顺序一致) List 中元素 可重复...
Java 中的集合 Collection 和 迭代器 I. Collection 引用 由于对象数组 (比如 Student[] students = new Student[5]) 在使用的时候,长度是固定不可变的,当我们需要动态的添加更多的对象时,数组是十分不方便的, 所以为了方便多个对象的操作, Java 提供了另一种容器来存储一系列相同的对象,叫做集合, Collection...
Java 中 System 类的使用 I. System 类 java.lang.System :System 类包含一些有用的类字段和方法。它不能被实例化。 在 System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。 II. System 类常见方法 public static void gc()...
Java Math 类的使用 I. Java Math 类 java.lang.Math: Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。是Java提供的一个封装好各种函数的一个类 II. Math 类常用方法 package org.lovian.math; /** * Java Math class...
Java 中的日期与时间 I. Date 类 和 Calendar 类 1.Date类 Date 类 java.util.Date: 类 Date 表示特定的瞬间,精确到毫秒 由于 Date 类的格式化和解析字符串 API 不易于实现国际化,所以从...
Java 中的 BigInteger & BigDecimal I. BigInteger 1.Integer & int 我们直到,在 java 中, Integer 是 int 基本类型的包装类。但是,由于 int 类型在 java...
Java 中 StringBuffer 的使用 I. StringBuffer StringBuffer 是线程安全的可变字符序列, 一个类似于 String 的字符串缓冲区,但不能修改。在任意时间点上它都包括某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。 所谓线程安全,意思是可以将 StringBuffer 安全的用于多个线程,可以在必要时对这些方法进行同步,从而任意特定实例上的所有操作就像是串行顺序发生的,该顺序和所涉及的每个线程进行的方法调用顺序一致。 II. StringBuffer 和 String 的区别 由于...
Java 中的匿名内部类 I. 匿名内部类 实际上匿名内部类 (anonymous inner class) 就是内部类的简化写法。 前提:已经存在了一个类(可以是具体类,也可以是抽象类)或者已经存在了一个接口 II.声明一个匿名内部类 new ClassName/InterfaceName(){ method(); //override ... }; III. 匿名内部类的本质 匿名内部类实际上是一个对象!!...
Java 中为什么局部内部类访问的局部变量必须是final类型的 I.局部内部类 局部内部类是内部类的一种,不同于内部类定义在类的成员位置,局部内部类定义在类的成员方法里。 II.代码示例 我们让局部内部类中的方法去访问外部类的成员变量和外部类的局部变量,代码如下 package org.lovian.innerclass; /** * Local Inner Class * * @author PENG Zhengshuai * @lovian.org...
How to generate java doc Write the doc in source code package org.lovian.javadoc package org.lovian.javadoc; /** * This is a...
java 中的继承与多态 I.继承(Inheritance) 把多个类中相同的成员提取出来定义到一个独立的类中, 然后让这个类和该独立的类产生一个关系,这些类就具备了这些内容, 这个关系叫继承。 1.在 Java 中表示继承 用关键字 extends 表示 格式: class ChildClass extends FatherClass {} 2.继承的优点 提高了代码的复用性...
Java 中的抽象类与接口 I. 抽象类 1.抽象方法 把多个共性的东西提取到一个类中,这是继承的做法,但是这多个共性的东西,在有些时候,方法声明一样,但是方法体不一样。也就是说方法声明一样,但是每个具体的对象在具体实现的时候内容不一样,所以我们在定义这些共性方法的时候,就不能给出具体的方法体。而一个没有具体方法体的方法就是抽象方法 (Abstract Method) public abstract methodName(); //抽象方法没有 {} ,花括号就是有方法体,不过是空方法体 2.抽象类 如果一个类中有抽象方法,这个类必须被定义为抽象类 (Abstract Class) public abstract...
I.Class Initialization In Java, we know a class can extend a father class. When we create a instance of a...
Code Blocks I. Code Block In java, the code inside a pair of {} called code block. Local code block:...
I. Primitive types And Wrapper 1. Primitive types In Java, it has 8 primitive types byte: 1 byte (8 bits),...
How to get the temporary file and file path in Java I. Create the temporary file in Java Sometimes, we...
How to monitor Java memory usage I. Why we need monitor Java memory usage As the developping of hardware, nowadays,...