Java 反射、类加载器与 JDK 新特性
认识类加载机制和反射 API,并回顾 JDK 5、7、8 的代表性语言特性。 类的加载概述和加载时机 类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 加载 就是指将class文件读入内存,并为之创建一个Class对象。任何类被使用时系统都会建立一个Class对象。 连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用 初始化 就是我们以前讲过的初始化步骤 加载时机 创建类的实例 访问类的静态变量,或者为静态变量赋值 调用类的静态方法 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象 初始化某个类的子类 直接使用java.exe命令来运行某个主类 类加载器的概述和分类 类加载器的概述 负责将.class文件加载到内存中,并为之生成对应的Class对象。虽然我们不需要关心类加载机制,但是了解这个机制我们就能更好的理解程序的运行。 类加载器的分...
Java 网络编程:UDP、TCP 与 Socket
从网络通信三要素入手,实践 UDP、TCP、Socket 与多线程服务端。 网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 网络编程三要素之IP概述 每个设备在网络中的唯一标识 每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址。 ipconfig:查看本机IP192.168.12.42 ping:测试连接192.168.40.62 本地回路地址:127.0.0.1 255.255.255.255是广播地址 IPv4:4个字节组成,4个0-255。大概42亿,30亿都在北美,亚洲4亿。2011年初已经用尽。 IPv6:8组,每组4个16进制数。 1a2b:0000:aaaa:0000:0000:0000:aabb:1f2f 1a2b::aaaa:0000:0000:0000:aabb:1f2f 1a2b:0000:...
Java 并发工具、设计模式与 GUI 事件
整理线程通信、锁、线程池、工厂与适配器模式,以及 GUI 事件监听。 单例设计模式 单例设计模式:保证类在内存中只有一个对象。 如何保证类在内存中只有一个对象呢? (1)控制类的创建,不让其他类来创建本类的对象。private (2)在本类中定义一个本类的对象。Singleton s; (3)提供公共的访问方式。 public static Singleton getInstance(){return s} 单例写法两种: (1)饿汉式 开发用这种方式。 //饿汉式 class Singleton { //1,私有构造函数 private Singleton(){} //2,创建本类对象 private static Singleton s = new Singleton(); //3,对外提供公共的访问方法 public static Singleton getInstance() { return s; } public static void print() { ...
Java 并发:线程创建、同步与死锁
认识 Java 线程模型、Thread 与 Runnable、线程调度、同步机制和死锁。 多线程的引入 1.什么是线程 线程是程序执行的一条路径, 一个进程中可以包含多条线程 多线程并发执行可以提高程序的效率, 可以同时完成多项工作 2.多线程的应用场景 红蜘蛛同时共享屏幕给多个电脑 迅雷开启多条线程一起下载 QQ同时和多个人一起视频 服务器同时处理多个客户端请求 多线程并行和并发的区别 并行就是两个任务同时运行,就是甲任务进行的同时,乙任务也在进行。(需要多核CPU) 并发是指两个任务都请求运行,而处理器只能按受一个任务,就把这两个任务安排轮流进行,由于时间间隔较短,使人感觉两个任务都在运行。 比如我跟两个网友聊天,左手操作一个电脑跟甲聊,同时右手用另一台电脑跟乙聊天,这就叫并行。 如果用一台电脑我先给甲发个消息,然后立刻再给乙发消息,然后再跟甲聊,再跟乙聊。这就叫并发。 Java程序运行原理和JVM的启动是多线程的吗 Java程序运行原理 Java命令会启动java虚拟机,启动JVM,等于启动了一个应用程序,也就是启动了一个进程。该进程会自动启动一个 “主线...
Java 递归与经典算法练习
通过目录遍历、文件复制、斐波那契数列、阶乘和约瑟夫环练习递归思维。 File类递归练习(统计该文件夹大小) 需求:1,从键盘接收一个文件夹路径,统计该文件夹大小 File类递归练习(删除该文件夹) 需求:2,从键盘接收一个文件夹路径,删除该文件夹 File类递归练习(拷贝) 需求:3,从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中 File类递归练习(按层级打印) 需求:4,从键盘接收一个文件夹路径,把文件夹中的所有文件以及文件夹的名字按层级打印, 例如:aaa是文件夹,里面有bbb.txt,ccc.txt,ddd.txt这些文件,有eee这样的文件夹,eee中有fff.txt和ggg.txt,打印出层级来aaa 1234567bbb.txtccc.txtddd.txteee fff.txt ggg.txt 递归练习(斐波那契数列) 不死神兔 故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契。 在他的一部著作中提出了一个有趣的问题:假设一对刚出生的小兔一个月后就能长成大兔,再过一个月就能生下一对小兔,并且此后每个...
Java IO:序列化、打印流与 Properties
介绍序列流、内存流、对象序列化、打印流、随机访问文件和 Properties。 序列流 1.什么是序列流 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, 以此类推. 2.使用方式 整合两个: SequenceInputStream(InputStream, InputStream) FileInputStream fis1 = new FileInputStream("a.txt"); //创建输入流对象,关联a.txt FileInputStream fis2 = new FileInputStream("b.txt"); //创建输入流对象,关联b.txt SequenceInputStream sis = new SequenceInputStream(fis1, fis2); //将两个流整合成一个流 FileOutputStream fos = new FileOutputStream("...
Java IO:字符流、编码与装饰模式
整理字符流、缓冲字符流、编码转换,以及 IO 中的装饰器设计模式。 字符流FileReader 1.字符流是什么 字符流是可以直接读写字符的IO流 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出. 2.FileReader FileReader类的read()方法可以按照字符大小读取 1234567FileReader fr = new FileReader("aaa.txt"); //创建输入流对象,关联aaa.txtint ch;while((ch = fr.read()) != -1) { //将读到的字符赋值给ch System.out.println((char)ch); //将读到的字符强转后打印}fr.close(); //关流 字...
Java IO:字节流与缓冲流
从 IO 流分类出发,介绍字节输入输出流、缓冲流和文件复制。 IO流概述及其分类 1.概念 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流。 流按操作类型分为两种: 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的 字符流 : 字符流只能操作纯字符数据,比较方便。 2.IO流常用父类 字节流的抽象父类: InputStream OutputStream 字符流的抽象父类: Reader Writer 3.IO程序书写 使用前,导入IO包中的类 使用时,进行IO异常处理 使用后,释放资源 FileInputStream read()一次读取一个字节 1234567FileInputStream fis = new FileInputStream("aaa.txt"); //创建一个文件输入流对象,并关联aaa.txtint b; ...
Java 异常处理与 File 类
梳理异常体系、try-catch、throw、throws、finally,以及 File 类的文件操作。 异常的概述和分类 异常的概述 异常就是Java程序在运行过程中出现的错误。 异常的分类 通过API查看Throwable Error 服务器宕机,数据库崩溃等 ExceptionC:异常的继承体系 Throwable Error Exception RuntimeException JVM默认是如何处理异常的 JVM默认是如何处理异常的 main函数收到这个问题时,有两种处理方式: a:自己将该问题处理,然后继续运行 b:自己没有针对的处理方式,只有交给调用main的jvm来处理 jvm有一个默认的异常处理机制,就将该异常进行处理. 并将该异常的名称,异常的信息.异常出现的位置打印在了控制台上,同时将程序停止运行 案例演示 JVM默认如何处理异常 try…catch的方式处理异常1 异常处理的两种方式 a:try…catch…finally try catch try catch finally try finally b:throw...
Java 集合框架:Map 与 Collections
介绍 Map、HashMap、TreeMap、集合嵌套与 Collections 工具类。 Map集合概述和特点 Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 Map接口和Collection接口的不同 Map是双列的,Collection是单列的 Map的键唯一,Collection的子体系Set是唯一的 Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 Map集合的功能概述 Map集合的功能概述 a:添加功能 V put(K key,V value):添加元素。 如果键是第一次存储,就直接存储元素,返回null 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值 b:删除功能 void clear():移除所有的键值对元素 V remove(Object key):根据键删除键值对元素,并把值返回 c:判断功能 boolean containsKey(Object key):判断集合是否包含指定的键 boolean contain...