java
YY鸟
初学java
展开
-
15-7 反射 ---- 反射的应用:动态代理(1)概述
15-7 反射 ---- 反射的应用:动态代理(1)概述一、代理设计模式1.原理:使用一个代理将对象包装起来, 然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。2.之前为大家讲解过代理机制的操作,属于静态代理,特征是代理类和目标对象的类都是在编译期间确定下来,不利于程序的扩展。同时,每一个代理类只能为一个接口服务,这样一来程序开发中必然产生过多的代理。最好可以通过一个代理类完成全部的代理功能。3.动态代理是指客户通过代理类来调用其它对原创 2021-02-25 14:28:39 · 82 阅读 · 1 评论 -
15-7 反射 ---- 反射的应用:动态代理(3)AOP与动态代理的举例
15-7 反射 ---- 反射的应用:动态代理(3)AOP与动态代理的举例代码:package java4;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;//动态代理举例interface Human { String getBelif(); void eat(String food);}//被代原创 2021-02-25 14:28:55 · 89 阅读 · 1 评论 -
15-7 反射 ---- 反射的应用:动态代理(2)举例②动态代理
15-7 反射 ---- 反射的应用:动态代理(2)举例②动态代理代码:package java4;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;//动态代理举例interface Human { String getBelif(); void eat(String food);}//被代理类c原创 2021-02-25 14:28:51 · 59 阅读 · 1 评论 -
15-7 反射 ---- 反射的应用:动态代理(2)举例①静态代理
15-7 反射 ---- 反射的应用:动态代理(2)举例①静态代理代码:package java4;//静态代理举例//代理类和被代理类在编译期间,就确定下来了interface ClothFactory{ void produceCloth();}//代理类class ProxyClothFactory implements ClothFactory{ private ClothFactory factory;//用被代理类对象进行实例化 public P原创 2021-02-25 14:28:47 · 77 阅读 · 0 评论 -
15-6 反射 ---- 调用运行时类的指定结构
15-6 反射 ---- 调用运行时类的指定结构一、调用指定方法通过反射,调用类中的方法,通过Method类完成。步骤:1.通过Class类的getMethod(String name,Class…parameterTypes)方法取得一个Method对象,并设置此方法操作时所需要的参数类型。2.之后使用**Object invoke(Object obj, Object[] args)**进行调用,并向方法中传递要设置的obj对象的参数信息。二、Object invoke(Object obj原创 2021-02-24 21:12:41 · 69 阅读 · 0 评论 -
15-5 反射 ---- 获取运行时类的完整结构(1)概述
15-5 反射 ---- 获取运行时类的完整结构(1)概述使用反射可以取得:1.实现的全部接口:public Class<?>[] getInterfaces()确定此对象所表示的类或接口实现的接口。2.所继承的父类:public Class<? Super T> getSuperclass()返回表示此 Class 所表示的实体(类、接口、基本类型)的父类的Class。3.全部的构造器(1)public Constructor< T >[] getCons原创 2021-02-24 17:49:41 · 68 阅读 · 0 评论 -
15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时类的③其他
15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时类的③其他1.构造器2.父类3.带泛型的父类4.父类的泛型5.接口6.所在的包7.注解代码:package java3;import java2.Person;import org.junit.Test;import java.lang.annotation.Annotation;import java.lang.reflect.Constructor;import java.lang.reflect.Par原创 2021-02-24 17:49:35 · 48 阅读 · 0 评论 -
15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时类的②方法结构
15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时类的②方法结构代码:package java3;import java2.Person;import org.junit.Test;import java.lang.annotation.Annotation;import java.lang.reflect.Method;import java.lang.reflect.Modifier;//获取运行时类的方法结构public class MethodTest {原创 2021-02-24 17:49:20 · 61 阅读 · 0 评论 -
15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时类的①属性结构
15-5 反射 ---- 获取运行时类的完整结构(2)获得当前运行时的①属性结构代码:package java3;import java2.Person;import org.junit.Test;import java.lang.reflect.Field;import java.lang.reflect.Modifier;//获得当前运行时的属性结构public class FieldTest { @Test public void test1() {原创 2021-02-24 17:49:13 · 73 阅读 · 0 评论 -
15-4 反射 ---- 创建运行时类的对象 & 体会反射的动态性
15-4 反射 ---- 创建运行时类的对象 & 体会反射的动态性一、newInstance():1.调用此方法,创建对应的运行时类的对象。内部调用了运行时类的空参的构造器。2.要想此方法正常的创建运行时类的对象,调用Class对象的newInstance()方法,要求:(1)运行时类必须提供空参的构造器(2)空参的构造器的访问权限得够。通常,设置为public。3.在javabean中要求提供一个public的空参构造器。原因:(1)便于通过反射,创建运行时类的对象(2)便于子类继原创 2021-02-24 17:49:08 · 110 阅读 · 0 评论 -
15-3 反射 ---- 类的加载 与ClassLoader的理解(3)使用ClassLoader加载配置文件
15-3 反射 ---- 类的加载 与ClassLoader的理解(3)使用ClassLoader加载配置文件代码:package java1;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class ClassLoaderTest { //Properties:用来读取配置文件 @Test原创 2021-02-24 17:49:02 · 164 阅读 · 0 评论 -
15-3 反射 ---- 类的加载 与ClassLoader的理解(2)ClassLoader
15-2 反射 ---- 类的加载 与ClassLoader的理解(2)ClassLoader一、了解:ClassLoader类加载器作用是用来把类(class)装载进内存的。 JVM 规范定义了如下类型的类的加载器。二、• //1.获取一个系统类加载器• ClassLoader classloader = ClassLoader.getSystemClassLoader();• System.out.println(classloader);• //2.获取系统类加载器的父类加载器,即扩展原创 2021-02-24 17:48:58 · 113 阅读 · 0 评论 -
15-3 反射 ---- 类的加载 与ClassLoader的理解(1)类的加载
15-2 反射 ---- 类的加载 与ClassLoader的理解(1)类的加载一、了解:类的加载过程当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过如下三个步骤来对该类进行初始化。1.加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象,作为方法区中类数据的访问入口(即引用地址)。所有需要访问和使用类数据只能通过这个Class对象。这个加载的过程需要类加载器参与。2.链接:将Java原创 2021-02-23 21:04:17 · 109 阅读 · 0 评论 -
15-2 反射 ---- 理解Class类并 获取Class的实例
15-2 反射 ---- 理解Class类并 获取Class的实例一、Class 类 :在Object类中定义了以下的方法,此方法将被所有子类继承:1.public final Class getClass()以上的方法返回值的类型是一个Class类,此类是Java反射的源头,实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过对象反射求出类的名称。2.象照镜子后可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个不变的 Class 类原创 2021-02-23 21:04:11 · 253 阅读 · 0 评论 -
15-1 反射 ---- Java反射机制概述
15-1 反射 ---- Java反射机制概述一、Java Reflection1.Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。2.加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。原创 2021-02-23 21:04:06 · 98 阅读 · 1 评论 -
14-7 网络编程 ---- URL编程(2)URL网络编程实现Tomcat服务端数据下载
14-7 网络编程 ---- URL编程(2)URL网络编程实现Tomcat服务端数据下载小 结1.位于网络中的计算机具有唯一的IP地址,这样不同的主机可以互相区分。2.客户端-服务器是一种最常见的网络应用程序模型。服务器是一个为其客户端提供某种特定服务的硬件或软件。客户机是一个用户应用程序,用于访问某台服务器提供的服务。端口号是对一个服务的访问场所,它用于区分同一物理计算机上的多个服务。套接字用于连接客户端和服务器,客户端和服务器之间的每个通信会话使用一个不同的套接字。TCP协议用于实现面向连接的会原创 2021-02-22 20:25:36 · 149 阅读 · 1 评论 -
14-7 网络编程 ---- URL编程(1)概述
14-7 网络编程 ---- URL编程(1)概述一、URL类1.URL(Uniform Resource Locator):统一资源定位符,它表示 Internet 上某一资源的地址。2.它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。3.通过 URL 我们可以访问 Internet 上的各种网络资源,比如最常见的 www,ftp 站点。浏览器通过解析给定的 URL 可以在网络上查找相应的文件或其他资源。4.URL的基本结构由5部分组成:<传输协原创 2021-02-22 20:25:29 · 271 阅读 · 0 评论 -
14-6 网络编程 ---- UDP网络编程
14-6 网络编程 ---- UDP网络编程一、UDP网络通信1.类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序。2.UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。3.DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。4.UDP协议中每个数据报都给出了完整的地址信息,因此无原创 2021-02-22 20:25:23 · 109 阅读 · 0 评论 -
14-5 网络编程 ---- TCP网络编程(1)概述
14-5 网络编程 ---- TCP网络编程(1)概述一、基于Socket的TCP编程1.Java语言的基于套接字编程分为服务端编程和客户端编程,其通信模型如图所示:2.客户端Socket的工作过程包含以下四个基本的步骤:(1)创建 Socket:根据指定服务端的 IP 地址或端口号构造 Socket 类对象。若服务器端响应,则建立客户端到服务器的通信线路。若连接失败,会出现异常。(2)打开连接到 Socket 的输入/出流: 使用 getInputStream()方法获得输入流,使用getOu原创 2021-02-22 20:25:02 · 99 阅读 · 0 评论 -
14-5 网络编程 ---- TCP网络编程(2)例子3
14-5 网络编程 ---- TCP网络编程(2)例子3例题3:从客户端发送文件给服务端,服务端保存到本地。并返回“发送成功”给客户端。并关闭相应的连接。运行步骤:(1)启动server(2)再启动client(3)之后在server会显示发送来的信息(这里的127.0.0.1为本机,即本机给本机发信息,由本机接收)代码:package java1;import org.junit.Test;import java.io.*;import java.net.InetAddre原创 2021-02-22 20:25:18 · 70 阅读 · 0 评论 -
14-5 网络编程 ---- TCP网络编程(2)例子2
14-5 网络编程 ---- TCP网络编程(2)例子2例题2:客户端发送文件给服务端,服务端将文件保存在本地运行步骤:(1)启动server(2)再启动client(3)之后在server会显示发送来的信息(这里的127.0.0.1为本机,即本机给本机发信息,由本机接收)代码:package java1;import org.junit.Test;import java.io.*;import java.net.InetAddress;import java.net.Serve原创 2021-02-22 20:25:13 · 52 阅读 · 0 评论 -
14-5 网络编程 ---- TCP网络编程(2)例子1
14-5 网络编程 ---- TCP网络编程原创 2021-02-22 20:25:07 · 61 阅读 · 0 评论 -
14-4 网络编程 ---- 通信要素2: 网络通信协议
14-4 网络编程 ---- 通信要素2: 网络通信协议一、概述1.网络通信协议计算机网络中实现通信必须有一些约定,即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。2.问题:网络协议太复杂计算机网络通信涉及内容很多,比如指定源地址和目标地址,加密解密,压缩解压缩,差错控制,流量控制,路由控制,如何实现如此复杂的网络协议呢?3.通信协议分层的思想在制定协议时,把复杂成份分解成一些简单的成份,再将它们复合起来。最常用的复合方式是层次方式,即**同层间可以通信、上一层可以调原创 2021-02-21 22:37:51 · 123 阅读 · 0 评论 -
14-3 网络编程 ---- 通信要素1: IP和端口号
14-3 网络编程 ---- 通信要素1: IP和端口号原创 2021-02-21 21:14:28 · 178 阅读 · 0 评论 -
14-2 网络编程 ---- 网络通信要素概述
14-2 网络编程 ---- 网络通信要素概述一、如何实现网络中的主机互相通信1.通信双方地址(1)IP:主机(2)端口号:一个主机上的不同的应用程序。2.一定的规则(即:网络通信协议。有两套参考模型)(1)**OSI参考模型:**模型过于理想化,未能在因特网上进行广泛推广(2)**TCP/IP参考模型(或TCP/IP协议):**事实上的国际标准。二、网络通信协议...原创 2021-02-21 18:32:58 · 98 阅读 · 0 评论 -
14-1 网络编程 ---- 网络编程概述
14-1 网络编程 ---- 网络编程概述一、概述1.Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。2.Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。二、网络基础1.计算机网络:把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从原创 2021-02-21 18:32:50 · 73 阅读 · 2 评论 -
13-11 IO流 ---- NIO.2中Path、 Paths、Files类的使用
13-11 IO流 ---- NIO.2中Path、 Paths、Files类的使用一、Java NIO 概述1.Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。2.Java API中提供了两套NIO,一套是针对标准输入输出N原创 2021-02-21 18:32:34 · 127 阅读 · 0 评论 -
13-10 IO流 ---- 随机存取文件流
13-10 IO流 ---- 随机存取文件流一、RandomAccessFile 类1.RandomAccessFile 声明在java.io包下,但直接继承于java.lang.Object类。并且它实现了DataInput、DataOutput这两个接口,也就意味着这个类既可以读也可以写。RandomAccessFile既可以作为一个输入流,又可以作为一个输出流。(1)如果RandomAccessFile作为输出流时,写出到的文件如果不存在,则在执行过程中自动创建。如果写出到的文件存在,则会对原有原创 2021-02-21 18:32:26 · 120 阅读 · 0 评论 -
13-9 IO流 ---- 处理流之六:对象流(2)自定义类实现序列化与反序列化操作
13-9 IO流 ---- 处理流之六:对象流(2)自定义类实现序列化与反序列化操作一、对象流的使用1.ObjectInputStream 和 ObjectOutputStream2.作用:用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。3.要想一个java对象是可序列化的,需要满足相应的要求。例如:Person需要满足如下的要求,方可序列化(1)需要实现接口:Serializable(2)当前类提供一个全局常量原创 2021-02-21 18:32:20 · 127 阅读 · 0 评论 -
13-9 IO流 ---- 处理流之六:对象流(1)概述
13-9 IO流 ---- 处理流之六:对象流(1)概述一、处理流之六:对象流1.ObjectInputStream和OjbectOutputSteam----》用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。2.序列化:用ObjectOutputStream类保存基本类型数据或对象的机制3.反序列化:用ObjectInputStream类读取基本类型数据或对象的机制4.ObjectOutputStream和Obj原创 2021-02-21 18:32:15 · 166 阅读 · 0 评论 -
13-8 IO流 ---- 处理流之五:数据流
13-8 IO流 ---- 数据流(了解)1.为了方便地操作Java语言的基本数据类型和String的数据,可以使用数据流。2.数据流有两个类:(用于读取和写出基本数据类型、String类的数据)**(1)DataInputStream 和 DataOutputStream(2)分别“套接”在 InputStream 和 OutputStream 子类的流上 **3.DataInputStream中的方法boolean readBoolean()byte readByte()char re原创 2021-02-21 18:32:09 · 74 阅读 · 0 评论 -
13-7 IO流 ---- 处理流之四:打印流
13-7 IO流 ---- 打印流1.实现将基本数据类型的数据格式转化为字符串输出2.打印流:PrintStream和PrintWriter(1)提供了一系列重载的print()和println()方法,用于多种数据类型的输出(2)PrintStream和PrintWriter的输出不会抛出IOException异常(3)PrintStream和PrintWriter有自动flush功能(4)PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的原创 2021-02-20 13:08:45 · 137 阅读 · 0 评论 -
13-6 IO流 ---- 处理流之三:标准输入、输出流
13-6 IO流 ---- 标准输入、输出流(了解)一、概述:1.标准的输入,输出流(1)System.in和System.out分别代表了系统标准的输入和输出设备(2)System.in:标准的输入流,默认从键盘输入(3)System.out:标准的输出流,默认从控制台输出2.默认输入设备是:键盘,输出设备是:显示器3.System类的setIn(InputStream is) / setOut(PrintStream ps)方式重新指定输入和输出的流。(1)System.in的类型是In原创 2021-02-20 13:08:35 · 127 阅读 · 0 评论 -
13-5 IO流 ---- 处理流之二:转换流(2)代码操作
13-5 IO流 ---- 转换流(2)代码操作处理流之二:转换流的使用 FileInputStream fis = new FileInputStream("dbcp.txt");// InputStreamReader isr = new InputStreamReader(fis);//使用系统默认的字符集 //参数2指明了字符集,具体使用哪个字符集,取决于文件dbcp.txt保存时使用的字符集。 isr = new InputStr原创 2021-02-20 13:08:29 · 64 阅读 · 0 评论 -
13-5 IO流 ---- 处理流之二:转换流(1)概述
13-5 IO流 ---- 转换流(1)概述一、概述1.转换流提供了在字节流和字符流之间的转换2.Java API提供了两个转换流:(1)InputStreamReader:将InputStream转换为Reader(2)OutputStreamWriter:将Writer转换为OutputStream3.字节流中的数据都是字符时,转成字符流操作更高效。4.很多时候我们使用转换流来处理文件乱码问题。实现编码和解码的功能二、InputStreamReader1.实现将字节的输入流按指定字符集原创 2021-02-20 13:08:23 · 114 阅读 · 0 评论 -
13-4 IO流 ---- 处理流之一:缓冲流(3)练习2:遍历字符次数
13-4 IO流 ---- 缓冲流(3)练习2:遍历字符次数练习3:获取文本上字符出现的次数,把数据写入文件思路:1.遍历文本每一个字符2.字符出现的次数存在Map中Map<Character,Integer> map = new HashMap<Character,Integer>();map.put(‘a’,18);map.put(‘你’,2);3.把map中的数据写入文件代码:package exer2;import org.junit.Test;原创 2021-02-20 13:08:11 · 186 阅读 · 0 评论 -
13-4 IO流 ---- 处理流之一:缓冲流(3)练习1:加密图片
13-4 IO流 ---- 缓冲流(3)练习1实现图片加密操作。提示:加粗样式package exer2;import org.junit.Test;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class PicTest { //图片的加密 @Test public void test1() {原创 2021-02-20 13:07:58 · 80 阅读 · 0 评论 -
13-4 IO流 ---- 处理流之一:缓冲流(2)(字符型)实现文本文件的复制
13-4 IO流 ---- 缓冲流(2)(字符型)实现文本文件的复制代码:package java3;import org.junit.Test;import java.io.*;//使用BufferedReader和BufferedWriter实现文本文件的复制public class BufferedTest1 { @Test public void testBufferedReaderBufferedWriter(){ BufferedReader b原创 2021-02-20 13:08:17 · 126 阅读 · 0 评论 -
13-4 IO流 ---- 处理流之一:缓冲流(1)概述
13-4 IO流 ---- 缓冲流(1)概述1.**为了提高数据读写的速度,**Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组,缺省使用8192个字节(8Kb)的缓冲区。2.缓冲流要“套接”在相应的节点流之上,根据数据操作单位可以把缓冲流分为:(1)BufferedInputStream 和 BufferedOutputStream(2)BufferedReader 和 BufferedWriter3.当读取数据时,数据按块读入缓冲区,其后的读操作则直接访问缓原创 2021-02-20 13:07:51 · 85 阅读 · 0 评论 -
13-3 IO流 ---- 节点流(或文件流)(1)概述
13-3 IO流 ---- 节点流(或文件流)(1)概述一、读取文件1.建立一个流对象,将已存在的一个文件加载进流。FileReader fr = new FileReader(new File(“Test.txt”));2.创建一个临时存放数据的数组。char[] ch = new char[1024];3.调用流对象的读取方法将流中的数据读入到数组中。fr.read(ch);4. 关闭资源。fr.close();二、写入文件1.创建流对象,建立数据存放文件FileWriter f原创 2021-02-20 13:07:45 · 65 阅读 · 0 评论