![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
文章平均质量分 85
今天你学习了么
这个作者很懒,什么都没留下…
展开
-
序列化
1. 序列化基本概述对象序列化API提供了一个框架,用来将对象编码成字节流,并从字节流编码中重新构建对象;序列化:将一个对象编码成一个字节流反序列化:从字节流中恢复对象一旦对象被序列化后,他的编码就可以从一台正在运作的虚拟机传递到另一台虚拟机上,或者被存储到磁盘上,供以后反序列化时用序列化技术为远程通信提供了标准的线路级对象表示法,也为JavaBeans组件结构提供了标准的持久化数据结构2. 序列化的基本使用如果需要将某个对象保存到磁盘上或者通过网络传输,那么这个类应该实现Serializ原创 2021-01-23 10:50:03 · 127 阅读 · 0 评论 -
内部类详解
Java内部类详解1. 内部类基本概述内部类(inner class) 是定义在另一个类中的类,使用内部了有以下好处:内部类方法可以访问该类定义所在的作用域中的数据, 包括私有的数据内部类可以对同一个包中的其他类隐藏起来每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。内部类使得多继承的解决方案变得完整方便将存在一定逻辑关系的类组织在一起,又可以对外界隐藏方便编写事件驱动程序当想要定义一个回调函数且不想编写大量代码时,使用匿名(a原创 2021-01-21 15:27:36 · 120 阅读 · 1 评论 -
程序中我是怎么处理金额的
1. 概述对于金额的存储说起来实际有很多问题,比如能不能用浮点类型做金额的计算,在应不应该把计算好的最终金额结果直接set到数据库等等2. 浮点类型2.1 float vs double浮点类型用于表示有小数部分的数值,在java中有两种浮点类型类型存储要求取值范围float4字节有效位数为6-7位double8字节有效位数为15位double表示这种类型的数值精度是float类型的两倍;绝大部分应用程序都采用double类型,很多情况下,float类型的原创 2021-01-20 22:05:58 · 429 阅读 · 0 评论 -
透过字节码看类的初始化过程
1. 先看一个题目public class Father { int x = 10; public Father() { this.print(); x=20; } public void print(){ System.out.println("father.x="+x); }}public class Son extends Father { int x=30; public Son() {原创 2020-10-21 21:09:39 · 211 阅读 · 1 评论 -
Class.getResource 和 ClassLoader.getResource获取资源文件
关于获取资源文件,Class.getResource 和 ClassLoader.getResource 的区别彻底搞懂Class.getResource和ClassLoader.getResource的区别和底层原理1. ClassLoader.getResource有两种方法获取当前的ClassLoaderClassLoader classLoader = this.getClass().getClassLoader();ClassLoader contextClassLoader = Thr原创 2020-05-20 10:06:20 · 933 阅读 · 0 评论 -
JDK Proxy 和 CGLib实现动态代理
1. 概述无论是日志框架或 Spring 框架,它们都包含了动态代理的实现代码。动态代理是程序在运行期间动态构建代理对象和动态调用代理方法的一种机制动态代理的常用实现方式是反射。反射机制是指程序在运行期间可以访问、检测和修改其本身状态或行为的一种能力,使用反射我们可以调用任意一个类对象,以及类对象中包含的属性及方法。动态代理不止有反射一种实现方式,例如,动态代理可以通过 CGLib 来实现,而 CGLib 是基于 ASM(一个 Java 字节码操作框架)而非反射实现的。动态代理是一种行为方式,而反射或原创 2020-05-11 10:57:58 · 153 阅读 · 0 评论 -
搞定String
String类详解通过反编译理解java String和internString的不可变性1. 概述String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例(对象)实现字符串是常量;它们的值在创建之后不能更改。因为 String 对象是不可变的,所以可以共享。字符串缓冲区支持可变的字符串2. String的实现以及不可变设计String是不可变类,所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值;James Gosling 说迫使原创 2020-05-11 10:23:01 · 162 阅读 · 0 评论 -
位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说到底,就是直接对整数在内存中的二进制位进行操作。使用位运算,主要目的是节约内存,使你的程序速度更快,还有就是对内存要求苛刻的地方使用。1. 按位或操作 a | b将A和B的二进制表示的每一位进行或操作,只要两个对应的二进制位有一个为1,结果位就为1,否则为0.1 | 1 = 11 | 0 = 10 | 1 = 10 | 0 ...原创 2020-04-15 15:09:39 · 172 阅读 · 0 评论 -
关于protected的理解
java的访问控制是停留在编译层的,也就是它不会在.class文件中留下任何的痕迹,只在编译的时候进行访问控制的检查。其实,通过反射的手段,是可以访问任何包下任何类中的成员,例如,访问类的私有成员也是可能的1. 我的问题对于protected,网上给的作用权限是这样说的:被 protected 修饰的成员对于本包和其子类可见,这样的说法太含糊,对我也造成了不小的困扰clone方法在Ob...原创 2020-03-27 22:12:40 · 747 阅读 · 0 评论 -
泛型
泛型就这么简单1. 什么是泛型Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常.泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型2. 为什么要泛型早期Java是使用Object来代表任意类型的,但是向下转型有强转的问题,这样程序就不太安全首先,我们来试想一下:没有泛型,集合会怎么样Collec...转载 2020-03-27 20:44:28 · 114 阅读 · 0 评论 -
浮点数的精度丢失
Java BigDecimal详解1. 计算机如何保存浮点数根据IEEE 浮点标准,任意一个二进制浮点数V可以表示成下面的形式V = (-1)s× 2M × 2Es:符号位,s=0为正数,S=1为负数M表示有效的数字E表示指数位比如十进制的11.0,写成二进制就是1011.0,用IEEE标准表示就是(-1)0 × 1.011 × 23 ,s=0,M=1.011,E=3对于单精度...原创 2020-03-27 20:02:29 · 345 阅读 · 0 评论 -
Java可变参数
Java 中的变长参数1. 什么是可变参数在 Java 5 中提供了变长参数,允许在调用方法时传入不定长度的参数。变长参数是Java的一个语法糖,本质上还是基于数组的实现void foo(String... args);void foo(String[] args);//方法签名([Ljava/lang/String;)V // public void foo(String[] ar...转载 2020-03-25 18:09:15 · 84 阅读 · 0 评论 -
我实例化了接口?
在学习多线程的时候,遇到了这样一种创建线程的方法Thread t = new Thread(new Runnable() { @Override public void run() { //do something } });可是Runnable明明是一个接口啊,为什么我在...原创 2020-03-20 20:42:53 · 71 阅读 · 0 评论 -
抽象类和接口和多态
1. 抽象类抽象类是用来捕捉子类的通用特性的,从设计层面来说,抽象类是对类的抽象,是一种模板设计[public] abstract class ClassName { abstract void fun();}模板式设计就像ppt里面的模板,如果用模板A设计了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以...原创 2020-03-20 13:55:50 · 563 阅读 · 0 评论 -
equals和hasCode方法
equals和hasCode方法public boolean equals(Object obj)public int hashCode()1. equals()equals()方法是用来判断其他的对象是否和该对象相等, 在object类中定义如下public boolean equals(Object obj) { return (this == obj); } ...转载 2020-03-17 12:57:00 · 195 阅读 · 0 评论 -
Java八大数据类型和包装类型
1. 八大基本数据类型数据类型大小范围字节型:byte8位-128~127字符型:char16\u0000~u\ffff短整型: short16-32768~32767整型:int32-231 ~ 231-1长整型: long64-263 ~ 263-1单精度浮点型: float323.4e-45~1.4e38双精...原创 2020-03-12 18:12:35 · 194 阅读 · 0 评论 -
Java访问修饰符
访问权限修饰符访问级别同类同包子类不同包publicYYYYprotectedYYYNdefaultYYNNprivateYNNNprotected经常需要允许子类访问定义在父类中的数据和方法,但是不允许非子类访问这些数据和方法,这种情况下就可以使用protected,它允许任何包中的子类访问父类default...原创 2020-03-11 20:48:38 · 927 阅读 · 0 评论 -
Java深拷贝和浅拷贝
Java的深拷贝和浅拷贝1. 创建对象的五种方式① 通过 new 关键字通过 new 关键字调用类的有参或无参构造方法来创建对象。比如Object obj = new Object();② 通过 Class 类的 newInstance() 方法这种默认是调用类的无参构造方法创建对象。Person p2 = (Person)Class.forName("com.ys.test.Pe...转载 2020-03-11 11:07:12 · 112 阅读 · 0 评论 -
finally
学习1. finally块一定会被执行么并不是,只有与 finally 相对应的 try 语句块得到执行的情况下,finally 语句块才会执行。① 在 try 语句块之前返回(return)或者抛出异常,所以 try 对应的 finally 语句块没有执行,finally也不会执行public static int test() { int i = 1; // if(i == ...转载 2020-03-07 12:43:28 · 80 阅读 · 0 评论 -
注解
注解Java 注解 (Annotation)你可以这样学1. 概述注解就像一个标签,是贴在程序代码上供另一个程序读取的注解可以大致分为三类:① 自定义注解(我们自己写的注解);② JDK内置注解(比如@Override检验方法重写)③ 还有第三方框架提供的注解(比如SpringMVC的@Controlle)实际开发中,注解常常出现在类、方法、成员变量、形参位置,它更像一个标签,贴在...转载 2020-03-02 11:11:01 · 152 阅读 · 0 评论 -
枚举类基本使用
学习对于向枚举中添加新方法的使用① 如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号② Java 要求必须先定义 enum 实例public enum Week { MONDAY(0,"星期一"),//相当于new了一个Week类 TUESDAY(1,"星期二"), WEDNESDAY(2,"星期三"), THURSDAY(3,"星期四...原创 2020-02-29 10:49:40 · 171 阅读 · 0 评论 -
动态代理
1. 代理模式代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务使用代理最主要的原因就是,在不改变目标对象方法的情况下对方法进...原创 2020-02-26 20:32:28 · 188 阅读 · 0 评论 -
Java类型转换
1. 隐式转换(自动类型转换)如果以下 2 个条件都满足,那么将一种类型的数据赋给另外一种类型变量的时,将执行自动类型转换(automatic type conversion)。两种数据类型彼此兼容目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)这个时候进行的转换也叫拓宽转换(widening conversion)数值型数据的转换:byte→short→int→...原创 2020-02-08 14:11:14 · 210 阅读 · 0 评论 -
上下界通配符
转载<? extends T>和<? super T>是Java泛型中的“通配符(Wildcards)”和“边界(Bounds)”的概念。① <? extends T>:是指 “上界通配符(Upper Bounds Wildcards)”② <? super T>:是指 “下界通配符(Lower Bounds Wildcards)”# 为...转载 2020-01-29 12:32:14 · 604 阅读 · 0 评论 -
comparable接口
要相对我们自定义的类使用Collections类里面的sort方法进行排序,必须实现comparable接口规定排序规则要实现public int compareTo(T o)方法使用如下import java.util.ArrayList;import java.util.Collections; class Student implements Comparable{ pr...原创 2020-01-19 10:01:07 · 273 阅读 · 0 评论 -
反射
深入理解Java类型信息(Class对象)与反射机制Java基础之—反射深入理解Class对象1. 什么是Class对象类加载如图所示,字节码被加载到方法区(只是加载了这个类的信息,和实例对象都还没有关系,那是在初始化才进行的),构成了instanceKlass的数据结构,在java的堆内存会产生一个对应的_java_mirror的对象(类对象),持有instanceKlass的内存地址...原创 2020-01-18 11:00:52 · 157 阅读 · 0 评论 -
final关键字
根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的final方法...原创 2020-01-17 15:12:06 · 179 阅读 · 0 评论 -
static关键字解析
状态和行为有对象和类之分,如果状态和行为加了static则属于类而不是单个对象static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。static 修饰的内容是随着类加载而加载的,当jvm把字节码加载到虚拟机中的时候,static修饰的...原创 2020-01-17 13:20:23 · 185 阅读 · 1 评论 -
Java异常处理机制
异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。学习Throwable是所有异常的共同祖先Error...原创 2020-01-16 21:42:53 · 189 阅读 · 0 评论