Java基础
文章平均质量分 88
IT__learning
这个作者很懒,什么都没留下…
展开
-
Java 继承中的属性隐藏与方法重写
一、变量隐藏——变量不具有多态性Java 中的变量不遵循多态性,所以重写仅适用于方法,而不适用于变量。 并且,当子类中的实例变量与父类中的实例变量具有相同的名称时,则从引用类型中选择该实例变量。在 Java 中,当子类中的实例变量与父类中的实例变量具有相同的名称时,子类的变量将隐藏父类的变量,即使它们的类型不同。 这种概念称为可变隐藏。在变量隐藏中,子类隐藏继承的变量而不是替换它们,这基本上意味着子类的对象包含两个变量,而子变量则隐藏了父变量。我们可以通过 super.x 来访问父类中的变量。示原创 2022-01-02 12:30:04 · 2894 阅读 · 1 评论 -
Java 字节码分析成员变量初始化顺序
一、无继承关系class Demo { private int p1 = 100; // 实例变量显式初始化 private static int p2 = 10; // 静态变量显式初始化 { p1 = 101; // 构造代码块初始化 } static { p2 = 11; // 静态代码块初始化 } public Parent() { // 构造函数初始化 this.p1 = 102;原创 2022-01-02 11:51:31 · 387 阅读 · 0 评论 -
Java 基础 —— 序列化
一、什么是序列化Java 提供了一种对象序列化的机制,该机制中,一个对象可以被按字节进行持久化(被表示为一个字节序列),该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息和对象的数据,还有对象中的数据类型可以用来在内存中新建对象。序列化与反序列化都是 Java 虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。二、为什么要序列化我原创 2021-12-15 21:10:26 · 1569 阅读 · 0 评论 -
Java 常量池
常量池分为 Class 常量池常量池、运行时常量池、字符串常量池。1、 Class 常量池常量池(静态常量池)Java 文件被编译成 Class 文件,Class 文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项就是 Class 常量池,Class 常量池是当 Class 文件被 Java 虚拟机加载进来后存放各种字面量 (Literal)和符号引用 。字面量相当于 Java 语言层面常量的概念,如文本字符串、基础数据、声明为 final 的常量等;符号引用则属于编译原理方面的概念,原创 2021-12-11 19:26:04 · 7265 阅读 · 1 评论 -
String 类源码分析
源码分析1、成员变量public final class String implements java.io.Serializable, Comparable<String>, CharSequence { // 用不可变的 char 数组用来存放字符串 private final char value[]; // 缓存 String 的 hash 值 private int hash; // Default to 0 // 实现序列化的原创 2021-12-11 12:50:57 · 2602 阅读 · 0 评论 -
Java基础——泛型
概述Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法,然后在使用/调用时传入具体的类型(类型实参)。Java 泛型也是一种语法糖,在编译阶段完成类型的转换的工作,避免在运行时强制类型转换而出现 ClassCastException 类型转化异常。原创 2021-11-18 23:55:05 · 765 阅读 · 0 评论 -
Java 基础 —— HashMap
一、ArrayList二、哈希表三、HashMapHashMap 是用于存储 Key-Value 键值对的集合。(1)HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,所以具有很快的访问速度,但遍历顺序不确定。(2) HashMap 中键 key 为 null 的记录至多只允许一条,值 value 为 null 的记录可以有多条。(3) HashMap 非线程安全,即任一时刻允许多个线程同时写 HashMap,可能会导致数据的不一致。hashmap原创 2021-11-16 20:02:26 · 3522 阅读 · 3 评论 -
Java 基础 —— 集合框架概述
集合框架图Java 集合框架主要包括两种类型的容器:一种是集合(Collection),存储一个元素集合;另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型:List、Set 和 Queue。再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。集合框架内容:集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:1、原创 2021-11-15 20:26:49 · 1570 阅读 · 1 评论 -
Java 基础 —— Java 中的值类型与引用类型
一、值类型与引用类型在 Java 中类型可分为两大类:值类型与引用类型。值类型就是基本数据类型(如 int、double 等),而引用类型是指除了基本的变量类型之外的所有类型(如通过 class 定义的类型)。所有的类型在内存中都会分配一定的存储空间(形参在使用的时候也会分配存储空间,方法调用完成之后,这块存储空间自动消失),基本的变量类型只有一块存储空间(分配在stack中),而引用类型有两块存储空间(一块在 stack 中,一块在 heap 中)。什么是引用引用其实就像是一个对象的名字或者别名原创 2021-11-13 13:10:19 · 3573 阅读 · 0 评论 -
Java —— 日期时间 API
一、java.util.Date在 JDK 1.1 之前, Date 有两个附加功能。 它允许将日期解释为年,月,日,小时,分钟和第二个值。 它还允许格式化和解析日期字符串。 不幸的是,这些功能的 API 不适合国际化。 从 JDK 1.1 开始, Calendar 类应该用于在日期和时间字段之间进行转换,并且 DateFormat 类应用于格式化和解析日期字符串。1、构造函数// 分配一个 Date对象,并初始化它,以便它代表它被分配的时间,测量到最近的毫秒。Date()// 分配一个 Date原创 2021-09-13 10:59:23 · 509 阅读 · 0 评论 -
Java 基础 —— NIO 学习
一、NIO 简介java.nio 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO)。新增了许多用于处理输入输出的类,这些类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写,新增了满足 NIO 的功能。NIO 以块的方式处理数据,块 IO 的效率比流 IO 的效率高很多。 NIO 是非阻塞的,同时实现了 IO 多路复用。NIO原创 2021-09-11 22:00:56 · 408 阅读 · 0 评论 -
各式各样的 session
在 java 中经常会看到各式各样的 session,但是每种 session 表示的类其实是不一样的。1、javax.servlet.http.HttpSession用的最多的是 HttpSession,也叫用户 session,主要用在 JavaWeb 开发中,session 共享,session 超时设置以及验证登录等package javax.servlet.http;import java.util.Enumeration;import javax.servlet.ServletCon原创 2021-09-10 22:06:16 · 319 阅读 · 0 评论 -
Java 8 新特性
Java 8 (又称为 jdk 1.8) 是 Java 自 Java 5(发布于2004年)之后的最重要的版本,这个版本在语言、编译器、库、工具和 JVM 等方面有很多新特性。一、LambdaLambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码本身当作数据处理。使用 Lambda 表达式可以使代码变的更加简洁紧凑。(1)以下是 lambda 表达式的重要特征:1)可选类型声明:不需要声明原创 2021-09-05 20:09:37 · 175 阅读 · 0 评论 -
Java 基础 —— Java 8 新特性 stream 与 Lambda
一、Stream 简介Java 8 引入了全新的 Stream API,这里的 Stream 和 I/O 流不同,它更像具有 Iterable 的集合类,但行为和集合类又有所不同。Stream 是 Java 8 的新特性,是对容器对象功能的增强,它专注于对容器对象进行各种非常便利、高效的聚合操作(aggregate operation)或者大批量数据操作。Stream 是用函数式编程方式在集合类上进行复杂操作的工具,开发者可以更容易地使用 Lambda 表达式,并且更方便地实现对集合的查找、遍历、过滤以及原创 2021-09-04 22:39:13 · 1921 阅读 · 1 评论 -
Java 基础 —— Arrays 与 Collections 工具类
Arrays 是 JDK 提供的操作数组的工具类,Arrays 类提供了动态创建、访问和操作 Java 数组的方法。此类还包含一个允许将数组作为列表来查看的静态工厂。1、数组转换成字符串public static String toString(T [] a)如:int[] a = {2,8,51,13,46,11,22};System.out.println(Arrays.toString(a));2、数组转换成集合(1)asListpublic static <T> Li原创 2021-09-04 00:17:07 · 716 阅读 · 2 评论 -
Java 调用 Python 脚本
实际工程项目中可能会用到 Java 和 python 两种语言结合进行,这样就会涉及到一个问题,就是怎么用 Java 程序来调用已经写好的 python 脚本呢,一共有四种方法可以实现:1、在 java 类中直接执行 python 语句此方法需要引用 org.python包,需要下载Jpython。Jython 是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个 Python 语言在 Java 中的完全实现。Jython 是在 JVM 上实现的 Python,由 J原创 2021-08-11 00:08:59 · 6685 阅读 · 4 评论 -
Java 基础——网络编程
网络编程原创 2021-07-01 21:04:56 · 854 阅读 · 3 评论 -
Java 代理使用详解
代理模式简介代理模式(Proxy)是通过代理对象访问目标对象,这样可以在目标对象基础上增强额外的功能,如添加权限,访问控制和审计等功能。代理模式是常用的 Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。简单的说就是,我们在访问实际对象时,是通过原创 2021-06-26 17:30:17 · 838 阅读 · 0 评论 -
Java 基础 —— static、abstract、final 和 super、this 关键字
staticstatic 关键字表示静态,可以修饰成员变量、方法和代码块。1、static 修饰成员变量● 该成员变量则成为了类变量,它不属于任何对象,是属于类本身的变量。● 使用 类名. 的方式调用,虽然使用 对象名. 的方式也可以调用,不过这种调用不建议使用,因为静态变量与对象没有什么直接关系。● 该变量在类加载的时候(即将 Java 文件存入 jvm 的时候)就初始化,生命周期与类相同。● static 成员变量和类的信息一起存储在方法区,而不是在堆中,一个类的static成员变量只有原创 2021-06-02 00:53:24 · 381 阅读 · 0 评论 -
Java 基础 —— 虚拟机中对象的创建过程
本文基于虚拟机HotSpot和常用的内存区域Java堆深入对象分配、布局和访问的全过程一、对象的创建1、new 类名虚拟机遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,先执行相应的类加载过程。2、分配内存虚拟机为新生对象分配内存。对象所需内存大小在类加载完成后就可以确定,为对象分配内存等同于把一块确定大小的内存从Java堆中划分出来。(1)内存分配的方式有两种:① 指针碰撞:原创 2021-05-19 23:19:46 · 830 阅读 · 11 评论 -
Java 基础 — 数据流、文件和 I/O
概述1、Java 的 I/O 体系在整个Java.io包中最重要的就是5个类和一个接口:5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable。Java I/O主要包括如下几个层次,包含三个部分:(1)流式部分――IO的主体部分如:InputStream类(二进制格式操作)、OutputStream(二进制格式操作)、Reader类(文件格式操作)和Writer类(文件格式操作)。(2)非流式部分――主要包含原创 2021-05-15 00:25:18 · 1828 阅读 · 20 评论 -
Java 常用工具类
一、时间类 Date1、java.util.Calendar(日历类)Calendar类是一个抽象基类,主要用于日期之间的各种计算2、java.util.Datejava.util.Date日期格式为:年月日时分秒java.sql.Date日期格式为:年月日java.sql.Time日期格式为:时分秒java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒)构造函数(1)public Date()分配 Date 对象并初始化此对象,以表示分配它系统的时间(精确到毫原创 2021-05-13 10:52:37 · 4810 阅读 · 2 评论 -
Java 基础 — 字符串
字符串是多个字符连接起来组合成的字符序列。字符串分为可变的字符串和不可变的字符串两种。(1)不可变的字符串:当字符串对象创建完毕之后,该对象的内容(上述的字符序列)是不能改变的,一旦内容改变就会创建一个新的字符串对象。Java中的String类的对象就是不可变的。(2)可变的字符串:StringBuilder类和StringBuffer类的对象就是可变的;当对象创建完毕之后,该对象的内容发生改变时不会创建新的对象,也就是说对象的内容可以发生改变,当对象的内容发生改变时,对象保持不变,还是同一个。St原创 2021-05-12 00:08:20 · 722 阅读 · 13 评论 -
Java 的数据类型
一、数据类型1、分类Java中的数据类型分两大类分别是基本类型和引用数据类型。注意:字符串不属于基本数据类型,属于引用数据类型;字符属于基本数据类型。2、基本数据类型的字节数及表示范围3、基本数据类型对应的包装类(1)基本类型与包装类的区别①存储位置不同:基本数据类型直接将值放在栈中;包装类型是把对象放在堆中,然后通过对象的引用来调用他们 ;②初始值不同:int的初始值为 0 、 boolean的初始值为false ;包装类型的初始值为null ;③使用方式不同:原创 2021-05-11 22:51:37 · 6900 阅读 · 3 评论 -
Java 基础——集合与 Map 讲解
一、集合① Queue接口与List、Set同一级别,都是继承了Collection接口。② LinkedList既可以实现Queue接口,也可以实现List接口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。③ SortedSet是个接口,它里面的(只有TreeSet这一个实现可用)中的元素一定是有序的。原创 2021-04-23 20:24:36 · 654 阅读 · 0 评论 -
Java分布式架构基础——Java RMI
简介1、RMI远程方法调用(Remote Method Invocation),一种用于实现远程过程调用(RPC)(Remote procedure call)的Java API,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。 它的实现依赖于Java虚拟机(JVM),因此它仅支持从一个JVM到另一个JVM的调用。2、Java RMIJava远程方法调用,即Java RMI(Ja原创 2021-03-16 23:15:33 · 515 阅读 · 0 评论 -
DOM的常见操作API
DOM的常见操作API 文档对象模型 (DOM) 是HTML和XML文档的编程接口。它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容。DOM 将文档解析为一个由节点和对象(包含属性和方法的对象)组成的结构集合。...原创 2021-02-06 12:02:20 · 1008 阅读 · 0 评论 -
Java反射学习总结
Java反射学习总结一、概述1、Java反射机制的概念java反射机制就是在程序运行过程中,对于任意一个类,都能够获取这个类中的所有属性和方法等信息,并且可以操作这些属性和方法。2、Java反射机制能够做什么?(1)在运行时查看类的所有信息(属性和方法)。(2)在运行时创建任意一个类的实例对象。(3)在运行时操作任意一个对象的属性和方法。(4)生成动态代理。二、Java反射机制的常用API1、获取Class对象(三种方法)(1)调用某个对象的getClass()方法直接获取某一个实例对原创 2020-12-23 15:17:10 · 243 阅读 · 0 评论