Java中的多线程
多线程:多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作 “多线程处理(Multithreading)”。
1. Thead类Java 中的 JVM 允许程序运行多个线程,它通过 java.lang.Thread 类来实现。
1.1. Thread类的特性
每个线程都是通过某个特定的 Thread 对象的 run() 方法来完成操作的。
经常把 run() 方法的主体称为线程体。
通过该 Thread 对象的 start() 方法来调用这个线程。
1.2. Thread类的构造方法1234Thread(); // 创建新的 Thread 对象Thread(String threadname); // 创建线程并指定线程实例名Thread(Runnable target); // 指定创建线程的目标对象,实现了 Runnable 接口中 run() 方法Threa ...
Java中的动态代理
Proxy :专门完成代理的操作类,是所有动态代理类的父类。通过此类为一个或多个接口动态地生成实现类。
1. 创建一个动态代理类所对应的 Class 对象1static Object newProxyInstance(ClassLoader loader, Class<?> interfaces, InvocationHandler h) // 直接创建一个动态代理对象
2. 动态代理的步骤
创建一个实现接口 InvocationHandler 的类,实现 invoke() 方法;
创建一个接口,和一个实现了这个接口的,准备被代理的类;
通过 Proxy 的静态方法 static Object newProxyInstance(ClassLoader loader, Class<?> interfaces, InvocationHandler h) 创建一个 Subject 接口代理;
通过 Subject 代理调用 RealSubject 实现类的方法。
3. 动态代理代码示例1234567// 接口package Test2;public interfa ...
Java中的反射机制
Java Reflection:Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于 Reflection API 取得任何类的内部信息,并能直接操作任何对象的内部属性及方法。
1. Java 反射机制提供的功能
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的成员变量和方法;
生成动态代理。
2. Java 反射相关的主要 API
java.lang.Class:代表一个类;
java.lang.reflect.Method:代表类的方法;
java.lang.reflect.Field:代表类的成员变量;
java.lang.reflect.Constructor:代表类的构造方法。
…
3. Class 类在 Object 类中定义了以下的方法,此方法将被所有子类继承;
1public final Class getClass()
以上方法返回值的类型是一个 Class 类,此类是 Java 反射的源头。
12345// 假设有一个类public cl ...
Java中的IO流
1. java.io.File 类的使用File 类能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。
如果要访问文件内容本身,要用输入/输出流。1234567891011121314151617181920212223242526272829303132333435363738394041File f = new File("./file/abc.txt");// 访问文件名f.getName(); // 获取当前文件名或文件夹名(就是路径的最后一部分)f.getPath(); // 获取当前路径(所有部分,就是 new File 传的参数)f.getAbsolutePath(); // 获取绝对路径f.getAbsoluteFile(); // 返回一个由当前文件绝对路径构建的 File 类f.getParent(); // 返回当前文件或文件夹的父级路径f.renameTo(); // 给文件或文件夹重命名// 文件检测f.exist(); // 返回文件或文件夹是否存在f.canWrite(); // 返回是否可写f.canRead(); ...
Java中的枚举类enum
枚举类和普通类的区别:
使用 enum 定义的枚举类默认继承了 java.lang.Enum 类
枚举类的构造器只能使用 private 访问控制符
枚举类的所有实例必须在枚举类中显式列出(用 ‘,’ 分隔,’;’ 结尾 ),系统会自动为列出的实例添加 public static final 修饰;
所有枚举类都提供一个 values 方法,该方法可以很方便地遍历所有的枚举值;
枚举类中的每个枚举,都是单例模式的。
JDK 1.5 中可以在 switch 表达式中使用枚举类的对象作为表达式,case 子句可以直接使用枚举值的名字,无需添加枚举类作为限定。
若枚举类只有一个成员,则可以作为一种单子模式的实现方式。
123456789101112131415161718enum Season { SPRING("春天", "春暖花开"), SUMMER("夏天", "炎炎夏日"), AUTUMN("秋天", "秋高气爽"), WIN ...
Java中的泛型
1. 泛型类1class Generic<T> {...}
2. 泛型接口1interface Generic<T> {...}
如果类中不确定接口中的泛型,那么类也要定义为泛型类。
3. 泛型方法123456789101112131415161718class Generic { // 无返回值的泛型方法 public <T> void test1(T s) { T t = s; } // 有返回值的泛型方法 public <T> T test2(T s) { return s; } // 无返回值的可变参数泛型方法 public <T> void test3(T... strs) { for(T s: strs) { System.out.println(s); } & ...
Java中的异常处理
捕获错误最理想的是在编译期间,但有的错误只有运行时才会发生。
对于这些错误,一般有两种解决方法:
遇到错误就终止程序运行;
由程序员在编写程序时,就考虑到错误的检测、错误消息的提示以及错误的处理。
1. 异常事件的分类Java 程序运行过程中所发生的异常事件可分类两类:
Error:JVM系统内部错误、资源耗尽的严重情况;
Exception:其他因编程错误或偶然的外在因素导致的一般性问题,例如:
空指针访问
试图读取不存在的文件
网络连接中断
2. 异常类层次
3. 异常处理机制
在编写程序时,经常要在可能出现错误的地方加上检测代码。如进行 x/y 运算时,要检测分母为 0,数据为空,输入的不是数字而是字符等。过多的分支会导致程序的代码过长,可读性差,因此采用异常机制。
Java 采用异常处理机制,将异常处理的程序代码集中在一起,与正常的程序代码分开,使得程序简洁,并易于维护。
Java 提供的是异常处理的抓抛模型。
Java 程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给 Java 运行时系统,这个过程称为抛出(throw)异常。
如果 ...
JDBC笔记
1. MySQL补充笔记123456show databases; # 显示所有数据库select database(); # 显示当前使用的数据库show tables; # 显示当前数据库中的所有表desc 表名; # 显示表的信息rename table 原表名 to 新表名; # 修改表名select * from t_user limit [行数偏移量,] 行数; # 行数偏移量从 0 开始,用于分页查询
2. JDBC笔记2.1. 查询数据库全部内容 代码示例
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051public static void selectAll() { Connection con = null; Statement stmt = null; ResultSet rs = null; try { // 1. 注册数据库驱动 Class.forNam ...
JavaBean
JavaBean指符合如下标准的 Java 类:
类是公共的;
有一个无参的公共构造器;
有属性,属性一般私有,且有对应的 get(),set() 方法
Java中的注释
1. 单行注释//
2. 多行注释 /*…*/
3. 文档注释(java特有)以 /* 开始,以 /结束。
Java 文档注释