Java回顾
文章平均质量分 82
UndefinedException
求求你们别卷了!!!
展开
-
Java回顾-Lambda表达式与方法引用
Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。Lambda表达式的本质:作为函数式接口的实例 1.举例: (o1,o2) -> Integer.compare(o1,o2); 2.格式: ->左边:lambda形参列表 (其实就是接口中的抽象方法的形参列表) ->右边:lambda体 (其实就是重写的抽象方法的方原创 2022-06-30 11:39:23 · 160 阅读 · 0 评论 -
Java回顾-动态代理
动态代理是反射的一个应用。动态代理是指客户通过代理类来调用其它对象的方法,并且是在程序运行时根据需要动态创建目标类的代理对象。 代理设计模式的原理: 使用一个代理将对象包装起来, 然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。 要想实现动态代理,需要解决的问题: 问题一:如何根据加载到内存中的被代理类,动态创建一个代理类及其对象。原创 2022-06-30 11:17:48 · 102 阅读 · 0 评论 -
Java回顾-反射
Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以我们形象的称之为:反射。 动态语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、原创 2022-06-30 10:49:09 · 54 阅读 · 0 评论 -
Java回顾-网络编程
如何实现网络中的主机互相通信? 1. 通信双方地址 IP +端口号 2. 一定的规则(即:网络通信协议。有两套参考模型) OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广 TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。 1、IP:唯一标识Internet上的计算机,java中使用 InetAddress类 代表ip地址原创 2022-06-27 15:20:31 · 163 阅读 · 0 评论 -
Java回顾-IO流-节点流/缓冲流/对象流/转换流
1. 对于文本文件(.txt,.java,.c,.cpp),使用字符流处理 2. 对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,...),使用字节流处理 读取: 复制: 注:FileWriter的第二个参数可设置是覆盖还是追加。 实现对图片的复制操作:二、缓冲流 为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类 时,会创建一个内部缓冲区数组,缺省使用原创 2022-06-27 10:32:37 · 185 阅读 · 0 评论 -
Java回顾-IO流的体系结构/File文件类的使用
1、File类的一个对象代表一个文件或文件目录 2、File类声明在java.io包下 3、File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用IO流。 4、File类的对象通常作为参数传递到流的构造器中,指明读取或写入的终点。1、public File(String pathname) 以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则原创 2022-06-26 22:02:56 · 973 阅读 · 0 评论 -
Java回顾-泛型
1. 解决元素存储的安全性问题, 好比商品、 药品标签, 不会弄错。2. 解决获取数据元素时, 需要类型强制转换的问题, 好比不用每回拿商品、 药品都要辨别。 在集合中使用泛型的例子: 二、自定义泛型1.自定义泛型类/接口 1、在自定义class中也可以使用泛型,但实例化时一般要指明类的泛型 2、static 方法中不能使用类的泛型,因为Static方法的加载比类实例化得早。 3、异常类不能是泛型的 4、不能使用new E原创 2022-06-26 21:34:38 · 197 阅读 · 0 评论 -
Java回顾-集合-Collections工具类
Collections 是一个操作 Set、List 和 Map 等集合的工具类 Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作, 还提供了对集合对象设置不可变、对集合对象实现同步控制等方法。 reverse(List):反转 List 中元素的顺序 shuffle(List):对 List 集合元素进行随机排序 sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序 sort(List,原创 2022-06-26 16:49:59 · 65 阅读 · 0 评论 -
Java回顾-集合-Map-HashMap/LinkedHashMap/TreeSet/Properties
Map:双列数据,存储key-value对的数据 -HashMap:Map的主要实现类,线程不安全,效率高,可存储null的key和value -LinkedHashMap:保证遍历元素时,可以按照添加的顺序实现遍历 -TreeMap:保证按照添加的key-value对进行排序,实现排序遍历,TreeMap中添加的key必须是同一个类创建的对象,因为要用key进行自然排序或定制排序 -Hashtable:古老的实现类,线程安全,效率低,不能存储null原创 2022-06-26 16:38:36 · 240 阅读 · 0 评论 -
Java回顾-Collection-Set-HashSet/LinkedHashSet/TreeSet的对比
|----Collection接口:单列集合,用来存储一个一个的对象 |----Set接口:存储无序的、不可重复的数据 -->高中讲的“集合” |----HashSet:作为Set接口的主要实现类;线程不安全的;可以存储null值 |----LinkedHashSet:作为HashSet的子类;遍历其内部数据时,可以按照添加的顺序遍历,对于频繁的遍历操作,LinkedHashSet效率高于HashSet.原创 2022-06-26 14:56:47 · 301 阅读 · 0 评论 -
Java回顾-Collection-List-ArratList/LinkedList/Vector的对比
-相同点: 三者都实现了List接口,存储的特点相同:存储有序、可重复 -不同点: ArrayList:List接口的主要实现类,线程不安全,效率高,底层用Object[ ]数组存储 LinkedList:对于频繁的插入删除操作,用此类效率较高,底层用双向链表存储 Vector:List接口的古老实现类,线程安全,效率低,底层用Object[ ]数组存储 1、v原创 2022-06-26 10:45:20 · 102 阅读 · 0 评论 -
Java回顾-集合概述-Collection的使用
面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。 1.数组在内存存储方面的特点: -数组初始化以后,长度就确定了。 -数组声明的类型,就决定了进行元素初始化时的类型 2.数组在存储数据方面的弊端: -数组初始化以后,长度就不可变了,不便于扩展原创 2022-06-26 10:07:25 · 189 阅读 · 0 评论 -
Java回顾-枚举类
如果类的对象只有有限个,确定的,强烈建议使用枚举类。JDK5.0后用关键字enum定义。 -枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰 -枚举类的使用 private final 修饰的属性应该在构造器中为其赋值 -若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应地传入参数 -使用 enum 定义的枚举类默认继承了 java.lang.Enum类,因此不能再继承其他类 -enum的toS原创 2022-06-26 09:06:36 · 135 阅读 · 0 评论 -
Java回顾-比较器Comparable/Comparator
Java实现对象排序的方式有两种: 自然排序:java.lang.Comparable 定制排序:java.util.Comparator两者比较: 1.Comparable接口方式一旦确定,则其实现类的对象在任意位置都可以比较大小2.Comparator 接口属于临时性的比较 实现 Comparable 的类必须实现 compareTo(Object o) 方法,两个对象即通过compareTo方法的返回值来比较大小。 如果当前对象this大于原创 2022-06-24 20:34:27 · 214 阅读 · 0 评论 -
Java回顾-String/StringBuilder/StringBuffer
1.String类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 2.String是一个final类,代表不可变字符序列。 3.字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。 4.String对象的字符内容是存储在一个字符数组value[]中的。 5.常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。这也是String低效率的原因,如果String对象频繁”改动“,会导致大原创 2022-06-24 20:06:29 · 338 阅读 · 3 评论 -
Java回顾-多线程
方式一、继承Thread类 1.定义新类继承Thread类 2.重写run()方法 3.创建新类对象,调用 .start()方法方式二、实现Runable接口 1.定义新类实现Runable接口 2.重写run()方法 3.创建Thread类的实例,构造器参数为新类 4.Thread类的实例调用 .start()方法 源码解读:Thread类的构造器有个Runnable类型参数target,原创 2022-06-24 17:09:31 · 139 阅读 · 0 评论 -
Java回顾-面向对象(抽象类与抽象方法/接口/内部类)
1.用abstract关键字来修饰一个类,这个类叫做抽象类。 2.用abstract来修饰一个方法,该方法叫做抽象方法。 抽象方法只有方法的声明,没有方法的实现。以分号结束: 比如: 注: 1.含有抽象方法的类必须被声明为抽象类。 2.抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类。 3. 不能用abstract修饰变量、代码块、构造器;原创 2022-06-24 10:50:40 · 77 阅读 · 0 评论 -
Java回顾-面向对象(包装类/static/单例模式/final)
有了类的特点,就可以调用类中的方法,Java才是真正的面向对象. 基本数据类型->包装类的实例 ---装箱; 获得包装类对象中包装的基本类型变量 ---拆箱 jdk1.5后支持自动装箱,自动拆箱,但类型必须匹配。 1. String->基本数据类型: 2.基本数据类型->String二、static关键字 static可以修饰属性、方法、代码块、内部类。 类属性作为该类各个对象之间共享的变量。在设原创 2022-06-24 09:35:38 · 123 阅读 · 0 评论 -
Java回顾-面向对象(super与this/多态/重载与重写/equal与==)
对象的多态性:父类的引用指向子类的对象 ,可以直接应用在抽象类和接口上。 Java引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明 该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。简 称:编译时,看左边;运行时,看右边。子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型 比如person类是student的父类,可以这样定义: 一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类原创 2022-06-24 07:48:12 · 98 阅读 · 0 评论 -
Java回顾-面向对象(对象内存解析/变量/值传递)
如下图所示,我们创建两个Person对象p1,p2,然后创建一个新的Person对象p3。 p1、p2、p3 这三个相当于指针的变量都存储在栈里,其中p1、p2 new了Person对象,所以它们还分别指向堆中的两块新开辟的数据域 0x12ab、0x7788,里面存的是它们各自的属性。 p3指向p1,但p1仅仅是地址,所以p3、p1就都指向0x12ab这块区域了。 下面是对象数组初始化的内存解析,跟数组的内存解析很像。 分为两种形式原创 2022-06-23 18:43:05 · 108 阅读 · 0 评论 -
Java回顾-数组的内存结构/常用方法
内存结构可分为三部分: 栈:存放局部变量(例如方法内的变量)。 堆:存放new出来的结构,如类的对象、数组等等。 方法区:包括静态域、常量池等。 如下图代码所示,在 main() 方法内创建了两个一维数组:arr1、arr,其实就是两个指针变量。它们两个在栈中存储,分别指向数组第一个元素,也就是说它们存放的是地址值。 如果我给arr1重新new了一个数组,那堆中就会在新的地址(0x5566)上划分一块数据区域,arr1会指向这个新区域,而原创 2022-06-23 17:04:03 · 305 阅读 · 0 评论