Java
文章平均质量分 74
moonlight_Answer
亡羊补牢实录
展开
-
动态代理学习笔记:代理模式的原理、动态代理举例、实现动态代理的部分内部细节
动态代理学习笔记代理模式的原理使用一个代理将对象包起来,然后用代理对象取代原始对象。任何对原对象的调用都要通过代理,代理对象决定是否以及何时将方法调用转到原始对象上。静态代理:代理类和被代理类在编译期间确定下来,每一个代理类只能为一个接口服务。动态代理:客户通过代理类来调用其他对象的方法,并且是在程序运行时,根据需求动态创建被代理类的代理类对象。动态代理相比于静态代理的优点:接口中声明的所有方法都被转移到调用处理器一个集中的方法中处理,可以更加灵活和统一地处理众多方法。动态代理举例步原创 2021-07-23 15:56:18 · 165 阅读 · 0 评论 -
反射学习笔记(二):创建运行时类的对象、获取运行时类的完整结构、获取运行时类的指定结构
反射学习笔记(二)创建运行时类的对象@Testpublic void test1() throws ClassNotFoundException, IllegalAccessException, InstantiationException { // 获取Class的实例 Class cla = Class.forName("com.solve.domain.Person"); // 获取运行时类的对象 // 常用!!! Object obj = cla.new原创 2021-07-23 01:26:57 · 109 阅读 · 0 评论 -
反射学习笔记(一):反射机制、获取Class类的实例、类的加载与类加载器
反射学习笔记(一)Java反射机制反射被视为动态语言的关键,反射机制允许程序在运行期间借助于反射相关的API取得任何内部类的内部消息,并且直接操作任意对象的内部属性和方法。加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息,我们可以通过这个对象看到类的结构,这就是反射。动态语言:在运行时可以改变其结构的语言,例如:新的函数,对象,甚至代码可以被引进,已有的函数可以被删除或者其他结构上的变化。即在运行时代码可以根据自原创 2021-07-21 17:48:18 · 216 阅读 · 0 评论 -
网络编程学习笔记:实现通信的两个要素、URL类、网络编程举例
网络编程概述:Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在Java的本机安装系统里,由JVM进行控制,并且Java实现了一个跨平台的网络类库,程序员面对的是一个统一的网络编程环境。网络编程目的:直接或间接地通过网络协议与其他计算机实现数据交换,进行通讯。网络编程主要地两个问题:如何准确地定位网络上的一台或多台主机,定位主机上的特定应用。找到主机后如何可靠,高效地进行数据传输。通信要素:通信双方地址IP地址与端口号的组合得出一个网络套接字:Socket。原创 2021-07-20 23:53:24 · 338 阅读 · 2 评论 -
IO流之处理流:随机存取文件流(七)
随机存取文件流RandomAccessFile声明在java.io包下,但是直接继承与java.lang.Object,并且实现了DataInput和DataOut这两个接口,意味着这个类可以进行读写操作。既可以作为输入流,也可以作为输出流,但是一个对象对应一种流。RandomAccessFile类支持“随机访问”的方式,程序可以直接跳到文件的任意位置来读、写文件。RandomAccessFile对象包含一个记录指针,用以表示当前读写处的位置。RandomAccessFile对象可以自由移动记录指原创 2021-07-19 11:16:52 · 104 阅读 · 0 评论 -
IO流之处理流:标准输入输出流、打印流、数据流(六)
标准输入输出流System.in和System.out分别代表了系统标准的输入和输出设备。默认的输入/输出设备为:键盘/显示器System.in:类型是InputStream。System.out:类型是PrintStream,PrintStream是OutputStream的子类FilterOutputStream的子类。重定向:System类的setIn()和setOut()可以重新指定输入和输出的位置。public void setIn(InputStream in)public原创 2021-07-19 11:16:07 · 164 阅读 · 0 评论 -
IO流之处理流:对象流(五)
对象流对象流用于存储和读取基本数据类型数据或对象的处理流,他的强大之处是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。涉及到序列化和反序列化。序列化:用ObjectOutputStream类保存基本类型数据或对象的机制。反序列化:用ObjectInputStream类读取基本类型数据或对象的机制。注意:ObjectInputStream和ObjectOutputStream不能序列化static和transient修饰的成员变量。实现对象的可序列化实现Ser原创 2021-07-19 11:13:58 · 89 阅读 · 0 评论 -
IO流之处理流:转换流(四)
转换流看后缀,属于字符流。InputStreamReader:将一个字节的输入流转换成字符的输入流。OutputStreamWriter:将一个字符的输出流转换成字节的输出流。图示举例:使用注意点:要求InputStreamReader构造器中的编码表必须和文件编码的编码表一致,否则会出现乱码。即文件使用utf-8编码的,构造器中就需要使用“utf-8”。OutputStream构造器中的编码表是什么类型的无所谓,只影响文件的编码格式,解码的时候使用对应的编码集,就不会出现乱码的情况。原创 2021-07-19 11:12:44 · 76 阅读 · 0 评论 -
IO流之处理流:缓冲流(三)
处理流缓冲流缓冲流是对节点流的增强,缓冲流多了一个缓冲区,先把读取或写出的数据读取或写出到一个缓冲区,等到缓冲区满了之后一并传输到数据目的,这样可以减少来回读取和写出的时间,提高效率,缓冲流也称为高效流。缓冲流提供了一个8KB(1024的8倍)的缓冲区。BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter使用处理流在关闭流资源时,一般来说,除了处理流需要关闭,节点流也需要关闭,但是,关闭处理流时,原创 2021-07-19 11:04:24 · 101 阅读 · 0 评论 -
IO流之节点流(二)
流的体系结构流的分类:按照操作数据的单位:字节流(8bit)和字符流(16bit)。按数据流的流向:输入流和输出流。按照流的角色:节点流和处理流。“流”的相关类都是基于这四个抽象基类派生出来的。节点流使用字符流处理文本文件(.txt,.java,.c,.cpp等)。使用字节流处理非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt等)。FileInputStream:文件对象File指向的文件必须存在,否则会报FileNotFoundExce原创 2021-07-19 11:02:41 · 97 阅读 · 0 评论 -
IO流之File类(一)
IO流IO技术是用于处理设备之间的数据传输,比如读/写文件,网络通讯等。Java程序中,对于数据的输入和输出操作以“流(stream)”的方式进行的。java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。File类java.io.File类:文件和文件目录的抽象表达形式,与平台无关。File可以新建、删除和重命名文件和文件目录,但File不能访问文件内容。如果需要访问文件内容,需要使用输入输出流。想要在Java程序中表示一个真实存在的文原创 2021-07-19 11:00:47 · 66 阅读 · 0 评论 -
泛型学习笔记:泛型使用的注意点、泛型在继承方面的体现、自定义泛型结构、泛型应用举例、通配符
泛型学习笔记集合是为了解决数组某些存储限制的特点出现的,但是数组有一个优点就是存放的数据的类型是确定的,但是集合容器在声明阶段存入的对象是什么类型是不确定的,所以在JDK1.5之前只能把元素的类型设计为Object类型,JDK1.5后,出现了泛型。这个时候除了对象的类型是不确定的,存储方式和如何管理等是确定的,因此把元素的类型设计成一个参数,这个类型参数叫做泛型。如:Collection< E>,List< E>,ArrayList< E>…这个< E>就原创 2021-07-17 02:09:37 · 214 阅读 · 0 评论 -
集合框架学习笔记:Collection体系和Map体系、Collections工具类
集合框架Java是面向对象编程,万事万物皆“对象”,为了方便对“对象”进行操作,需要对“对象”进行存储,而Java集合就是存储“对象”的容器,可以动态地把多个对象存入容器中。Java集合类可以用于存储数量不等的多个对象,还可以用于保存具有映射关系的关联数组。Collection接口单列集合,用来存储”一个一个“的对象。向Collection接口的实现类的对象添加数据(obj)时,要求obj所在的类重写equals()。(不重写的话Collection中有些方法的判断会有影响。)Coll原创 2021-07-14 15:52:03 · 206 阅读 · 0 评论 -
Java比较器:Comparable与Comparator
Java比较器Java中常涉及到对象的排序问题,即涉及对象之间的比较。Java实现对象排序有两种方式:自然排序:java.lang.Comparable。定制排序:java.util.Comparator。方式一:ComparableComparale接口强行对实现他的每个类的对象进行整体排序,这种排序成为类的自然排序。步骤:需要排序的的对象对应的类实现Comparable接口。重写compareTo(),两个对象即可通过compareTo(Object o)的返回值来比较大小。比原创 2021-07-13 17:01:53 · 130 阅读 · 0 评论 -
枚举类学习笔记:自定义枚举类、enum关键字定义枚举类、Enum的常用方法
枚举类学习笔记枚举类:类的对象是确定的,有限个的。当需要定义一组常量的时候,建议使用枚举类。自定义枚举类JDK1.5之前,没有enum关键字定义枚举类,需要自定义枚举类。步骤:对象确定,即构造器要私有,在外部不能创建对象。(根据有无属性,选择构造器带不带参数)对象的属性不能更改,即属性需要private final修饰。(在对象创建的时候,对象的属性就确定了。)类内部自己创建对象,且对象不能更改,用static final修饰,外部可以访问,用public修饰。示例:/** *原创 2021-07-13 14:25:36 · 369 阅读 · 0 评论 -
死锁学习笔记:产生死锁的原因、死锁举例
死锁产生死锁的原因不同线程分别占用着对方的同步资源不放弃,都在等待对方放弃自己需要的同步资源。出现死锁后,不会出现异常,不会出现提示,出现死锁的线程会一直处于阻塞态,无法继续。尽量避免同步的嵌套。示例代码/** * @Author:xiezr * @Creat:2021-07-12 23:57 */public class DeadLock { public static void main(String[] args) { Object o1 = new O原创 2021-07-13 11:35:24 · 116 阅读 · 0 评论 -
单例模式学习笔记:饿汉式、懒汉式
单例模式学习笔记单例模式:属于创造型设计模式,单例类自己创造自己的对象,其他类可以直接访问这个对象,不需要实例化单例类的对象。注意点:单例类只有一个实例对象。单例类必须自己创建实例对象。单例类必须给其他类提供获取实例对象的方法。思路:其他类不能创建单例类的对象,即单例类的构造器必须是私有的。单例类要给其他类提供一个可以访问对象的方法,即定义一个方法,返回单例类的对象,因为无法创建单例类的对象,无法通过对象名调用方法,所以这个给其它类访问单例类的对象的方法必须声明为static,那么单例原创 2021-07-12 23:56:03 · 99 阅读 · 0 评论 -
多线程学习笔记:创建多线程的四种方式、线程同步问题、线程的常用方法、线程通信、线程的生命周期
多线程学习笔记程序:为完成指定任务,使用某种语言编写的一组指令的集合,即一段静态代码。进程:程序运行的一条执行路径。程序中可以有多个线程,是一个动态的过程,有生命周期。进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域。线程:程序内部的一条执行路径,若一个进程同一时间并行多个线程,就是支持多线程的。线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(PC)。并行:多个CPU同时执行多个任务。并发:一个CPU采用时间片执行多个任务(先后完成)。共享数据:多个线程共同操原创 2021-07-11 22:42:22 · 182 阅读 · 0 评论 -
String、StringBuffer、StringBuilder笔记
String、StringBuffer、StringBuilder三者都是操作字符串的类,底层均为char型数组存储。执行效率:StringBuilder > StringBuffer > StringString每次改变的时候都需要重新创建一个新的数组,导致效率相比于其他两者低了很多。String特点:String类声明为final类型,所以不可以被继承。实现了Serializable接口,表示字符串支持序列化。实现了Compareable接口,表明String对象可原创 2021-07-08 00:00:52 · 131 阅读 · 0 评论 -
abstract,static,final
abstract,static,final只有static和final可以组合在一起使用abstractJava允许类、接口、或者成员方法具有抽象属性,但不允许成员变量或者构造方法具有抽象属性。抽象类注意点:无法通过抽象类的构造方法生成抽象类的实例对象,但可以派生其他子类,子类必须实现所有继承的抽象方法,这个子类才不是抽象类。抽象类可以通过其非抽象的子类创建实例,并通过动态多态性调用子类的覆盖成员方法(重写的方法)。抽象类可以没有抽象方法,但如果一个类有一个或多个抽象方法,那么这个类必须声明为原创 2021-06-30 14:54:56 · 118 阅读 · 0 评论 -
类的三大特性
类的三大特性封装性、继承性、多态性封装封装性是通过访问控制来实现的。访问:对于类来说:访问就是使用类的成员域(属性/成员变量)或成员方法,从当前类派生出子类或者通过类的构造方法生成实例对象等;对于成员域来说:访问就是读取该成员域的值,或者改变该成员域的值;对于成员方法来说:访问就是调用该成员方法;对于构造方法来说:访问就是通过构造方法创建实例对象;访问控制方式:public,protecte,默认模式,private。私有模式的成员变量和成员方法不会被继承。一般建议将类的构造方法的原创 2021-06-29 01:21:13 · 2470 阅读 · 0 评论 -
方法调用的值传递方式
方法调用的值传递方式实际参数和形式参数分别占据相互独立的存储单元。值传递在进行方法的调用时,首先将实际参数变量的存储单元的内容复制给形式参数变量的存储单元,即将实际参数变量的值赋给形式参数的变量,从而使得形式参数变量的值与实际参数变量的值相同,这个过程称为值传递(参数传递)。因为实际参数和形式参数分别占据不同的存储单元,所以如果在执行方法体内的语句时修改形式参数变量的值,并不会改变实际参数变量的值,即出现形式参数变量的值与调用参数变量的值不相等。//值传递public class Demo01 {原创 2021-06-28 01:31:51 · 202 阅读 · 0 评论 -
类、对象、构造器
类、对象、构造器类(属性+方法)关键字class修饰,把一切具有相同属性和行为的事物分成一类,在类中抽象表示他的属性和方法(没有具体属性值和具体方法)。对象类的一个具体实例为对象,如:student1和student2就是Student类的两个对象,对象需要用new关键字调用构造方法创建。对象通过引用来操作的,对象名(引用变量名)在栈中,实例对象存放在堆中。栈里的对象名指向堆里的对象的地址。对象的创建:类名 对象名 = new 构造方法(参数列表);构造器(构造方法)当需要实例化类的原创 2021-06-27 17:57:14 · 95 阅读 · 0 评论 -
静态方法与非静态方法互相调用
静态方法与非静态方法互相调用当new创建一个对象的时候,会先将类的静态成员(变量和方法)加载到堆中一个叫方法区的特殊区域中,然后再在堆中为对象分配内存空间。静态方法加载好了之后,非静态方法还没加载,不存在,所以在静态方法中不能调用非静态方法,否则报错。静态方法:关键字static修饰的方法,类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,没有创建对象也能通过类名对静态方法进行调用。非静态方法:在类创建对象之后加载,非静态成员(变量和方法)属于类的对象,通过类的对象才能进行访问。原创 2021-06-27 01:11:36 · 919 阅读 · 0 评论 -
数组基础知识:数组的声明与创建、二维数组、冒泡排序、稀疏数组
数组数组是相同类型数据的有序集合。描述的是相同类型的若干个数据,按照一定的先后顺序排列。数组中的每一个数据称为元素,数组元素是根据索引来访问的,数组索引从0开始,所以数组的第一个元素的下标为0。数组的特点:1、数组在创建的时候,长度就固定了,不能改变。2、数组的元素必须为相同类型,不能出现混合类型。3、数组的元素可以是任何的数据类型,基本数据类型或者引用数据类型都可以。4、数组变量属于引用类型,数组也可以看成是对象,数组中的每一个元素相当于对象的成员变量。Java中对象是存放在堆中的,而数组本身原创 2021-06-25 17:14:51 · 275 阅读 · 0 评论 -
计算器(结合流程控制和方法调用)
设计一个可以进行加减乘除的简单计算器。思路:因为计算器计算出结果后还要计算下一个结果,所以,可以设计一个死循环,让计算器在不关闭的情况下可以一直跟用户进行交互。加减乘除分别对应plus(),reduce(),multiply(),divide()方法。在主方法中调用即可。考虑到可能输入的数是小数,进行运算后的数可能为小数,所以用来接收并存放输入的两个操作数的变量声明为double类型,形参也声明为double类型。用scanner的nextDouble()方法进行接收。用switch分支结构根据原创 2021-06-24 17:59:32 · 298 阅读 · 0 评论 -
方法的定义、调用、重载、、可变参数、递归
方法方法就是语句块的集合,包含于类或者对象中,实现某一个功能,相当于类的一个行为。方法的设计原则:方法的本质就是一个功能。设计方法的时候,一个方法只完成一个功能,保持方法的原子性,有利于后期扩展。方法的命名规则采用驼峰标识法。方法的定义方法包含方法头和方法体,没有具体实现方法的方法属于抽象方法,方法头包含修饰符、返回值类型、方法名、参数类型。方法体包含具体的语句,定义该方法的功能。修饰符:(可选)定义该方法的访问类型,告诉编译器如何调用该方法。返回类型:有的方法功能实现完需要返回值,根据值的类原创 2021-06-23 01:05:47 · 127 阅读 · 0 评论 -
Java设计模式笔记
一、代理模式(静态代理和动态代理)及责任链模式Java代理模式的特征:代理与委托类有同样的接口①静态代理的优缺点:易于实现,代理类与真实类的关系在代码编写的时候就已经确定了,每一个真实类都需要一个代理类。package test_2;/* Author:xzr date:2021.3.21 description:静态代理 */interface Developer{ void writeCode();}interface Tester{ voi原创 2021-03-30 21:58:50 · 94 阅读 · 0 评论 -
Java反射技术笔记
Java反射技术笔记Java的反射技术说的是在运行状态中,对于任何一个类,我们都能知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。这种动态获取对象信息和调用对象方法的功能成为反射机制。三种方式(1)Object是Java中所有类的父类,所有Objece中的getClass()可以给所有从Object继承来的类所使用。(了解就行)例:注:class Animals{…}以下代码都一样,因此省略。class Animals { private String原创 2021-03-21 00:05:27 · 127 阅读 · 4 评论