java基础8月份专题
徐明曉
这个作者很懒,什么都没留下…
展开
-
【JAVA代理专题】
这里写目录标题[1] 什么是代理模式?[2] 什么是静态代理?[3] 什么是动态代理?如何实现?[4] 静态代理和动态代理有什么区别?[5] 怎么实现动态代理?[6] 动态代理的应用[7] Spring如何实现AOP?[8] 静态代理和动态代理的区别[1] 什么是代理模式?代理是一种设计模式,它的核心思想,是将对目标的访问转移到代理对象上。这样做的好处就是,目标对象在不改变代码的情况下,可以通过代理对象加一些额外的功能。这是一种编程思想,在不改变原有代码的情况下,通过代理增加一些扩展功能。代理过程如图原创 2020-08-05 10:05:27 · 101 阅读 · 0 评论 -
【JAVA反射专题】
【JAVA反射专题】[1] 为什么有反射机制?[2] 什么是反射机制?[3] 反射如何实现的?[4] 如何获取 Class 对象[5] 反射机制的作用[6] 反射相关的类[7] 反射的优缺点?[1] 为什么有反射机制?程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言,像是python。JAVA的反射机制就是为了实现这种功能。[2] 什么是反射机制?反射机制是指在一个类在运行中,对于任意一个类,都能够知道这个类的所有属性和方法,且都能够调用它的任意一个方法和属性。即动态获取信息和动态调用对原创 2020-08-05 10:00:36 · 111 阅读 · 0 评论 -
【异常处理专题】
这里写目录标题[1] try和catch[2] Error 和 Exception 的区别?[3] 运行时异常与受检异常有何异同?[4] throw 和 throws 的区别?[5] 常见的异常类有哪些?[补充][1] try和catchhttps://blog.csdn.net/qq_34427165/article/details/83929470[2] Error 和 Exception 的区别?Error 类和 Exception 类的父类都是 Throwable 类。主要区别如下:Er原创 2020-08-05 09:59:07 · 222 阅读 · 0 评论 -
【static关键字专题】
https://baijiahao.baidu.com/sid=1636927461989417537&wfr=spider&for=pchttps://www.cnblogs.com/w-wfy/p/7118494.html[1] static关键词的原理?我们可以一句话来概括:方便在没有创建对象的情况下来进行调用,被他修饰的会在java虚拟机的方法区内,被static关键字修饰的不需要创建对象去调用,直接根据类名就可以去访问。静态变量存放在方法区中,并且是被所有线程所共享的。.原创 2020-08-05 09:55:44 · 130 阅读 · 0 评论 -
【Java克隆专题】
Java克隆专题[1] 深克隆和浅克隆的区别?[2] 如何实现对象的克隆?[3] 数组的四种拷贝方式对比[4] 数组的四种拷贝方式实现[1] 深克隆和浅克隆的区别?浅拷贝:浅克隆只是复制了对象的引用地址。是将原始对象中的数据型字段拷贝到新对象中去,将引用型字段的“引用”复制到新对象中去,不把“引用的对象”复制进去,所以原始对象和新对象引用同一对象,新对象中的引用型字段发生变化会导致原始对象中的对应字段也发生变化。深拷贝:深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变。是在引用方面原创 2020-08-05 09:50:21 · 128 阅读 · 0 评论 -
序列化和反序列化是什么?
Java 对象 JVM 退出时会全部销毁,如果需要将对象及状态持久化,就要通过序列化实现,将内存中的对象保存在二进制流中,需要时再将二进制流反序列化为对象。对象序列化保存的是对象的状态,因此属于类属性的静态变量不会被序列化。常见的序列化有三种:Java 原生序列化实现 Serializabale 标记接口,Java 序列化保留了对象类的元数据(如类、成员变量、继承类信息)以及对象数据,兼容性最好,但不支持跨语言,性能一般。序列化和反序列化必须保持序列化 ID 的一致,一般使用 private st原创 2020-08-05 09:48:30 · 205 阅读 · 0 评论 -
IO流?
主要分为字符流和字节流,字符流一般用于文本文件,字节流一般用于图像或其他文件。字符流包括了字符输入流 Reader 和字符输出流 Writer,字节流包括了字节输入流 InputStream 和字节输出流 OutputStream。字符流和字节流都有对应的缓冲流,字节流也可以包装为字符流,缓冲流带有一个 8KB 的缓冲数组,可以提高流的读写效率。除了缓冲流外还有过滤流 FilterReader、字符数组流 CharArrayReader、字节数组流 ByteArrayInputStream、文件流 Fil原创 2020-08-05 09:47:55 · 91 阅读 · 0 评论 -
JDK, JRE 和JVM的区别
JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也就是常常听到Java虚拟机。JDK是面向开发者的,JRE是面向使用JAVA程序的用户。Java 开发工具包 (JDK)Java开发工具包是Java环境的核心组件,并提供编译、调试和运行一个Java程序所需的所有工具,可执行文件和二进制文件。JDK是一个平台特定的软件,有针对Windows,Ma原创 2020-08-05 09:46:43 · 258 阅读 · 0 评论 -
Object o=new object()在中占用多少字节?
https://blog.csdn.net/weixin_42864905/article/details/104966716Klass Word 这里其实是虚拟机设计的一个oop-klass model模型,这里的OOP是指Ordinary Object Pointer(普通对象指针),看起来像个指针实际上是藏在指针里的对象。而 klass 则包含 元数据和方法信息,用来描述 Java 类。它在64位虚拟机开启压缩指针的环境下占用 32bits 空间。Mark Word 是我们分析的重点,这里.转载 2020-08-05 09:45:44 · 678 阅读 · 0 评论 -
Java对象的hashCode方法理解
概念:Object类中有一个方法: public native int hashCode(); Java中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。作用:用于查找的快捷性。如HashMap,hashCode值用于散列来确定对象hash到哪个slot减少equals方法的调用次数,从而提高程序效率。如在集合中两个对象相等判断时,先比较hashCode方法的值,相等再调用equals方法,所以在对象不相等时直接ha原创 2020-08-05 09:44:59 · 598 阅读 · 0 评论 -
JDK1.8中有哪些新特性?
linkLambda表达式:Lambda允许把函数作为一个方法的参数(函数作为参数传递到方法中)。方法引用:方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。默认方法:默认方法就是一个在接口里面有了一个实现的方法。新工具:新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。Stream API:新添加的Stream API(java.util.stream) 把真正的转载 2020-08-05 09:44:25 · 699 阅读 · 0 评论 -
Java常用注解
注解提升了java语言的表达能力,有效实现了应该用功能和底层功能的分离。https://www.cnblogs.com/yanze/p/9481915.htmljava内置注解@Override覆盖父类方法@Deprecated(不赞成)用于方法,表明方法已过期,不建议使用@Suppvisewarning忽略警告,例如当我们要使用已过时方法,有的编译器会出现警告,@Suppvisewarning(“deprecation”)表示忽略此警告元注解是自定义注解的注解,例如:@Targe.原创 2020-08-05 09:43:56 · 125 阅读 · 0 评论 -
泛型
https://segmentfault.com/a/1190000014120746泛型:把类型明确的工作推迟到创建对象或调用方法之后,简单来说,你有一个类,在使用时内部类型暂不确定,给使用给一个占位符给代替,在使用的时候可以给确定其定义的类型。例如HashMap等集合类中就用到了泛型:ArrayList<String> stringValues=new ArrayList<String>();有了泛型以后:代码更加简洁【不用强制转换】程序更加健壮【只要编译时期没.原创 2020-08-05 09:43:11 · 119 阅读 · 0 评论 -
this和super的区别
https://www.cnblogs.com/newbie27/p/10437587.htmlhttps://blog.csdn.net/lncsdn_123/article/details/79025525this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针;super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。...原创 2020-08-05 09:41:01 · 73 阅读 · 0 评论 -
final不可变实现原理
https://www.cnblogs.com/hexinwei1/p/10025840.html对于final域,编译器和处理器要遵守两个重排序规则:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。(先写入final变量,后调用该对象引用)原因:编译器会在final域的写之后,插入一个StoreStore屏障初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序(先读对象的引用,后读f.原创 2020-08-05 09:39:44 · 480 阅读 · 0 评论 -
final finally finalize 区别及用法?
(https://www.cnblogs.com/wisefulman/p/10584515.html)final:可以用来修饰类、方法、变量,分别有不同的意义,final修饰的class代表不可以继承扩展,final的变量是不可以修改的,而final的方法也是不可以重写的(override)。finally:则是Java保证重点代码一定要被执行的一种机制。我们可以使用try-finally或者try-catch-finally来进行类似关闭JDBC连接、保证unlock锁等动作。finalize:是原创 2020-08-05 09:37:46 · 163 阅读 · 0 评论 -
为什么接口中的成员变量非得是public static final的呢?
首先明白一个原理,就是接口的存在意义。接口就是为了实现多继承的抽象类,是一种高度抽象的模板、标准或者说协议。规定了什么东西该是这样,如果你继承了我这接口,就必须这样。比如USB接口,就是小方口,两根电源线和两根数据线,不能多不能少。public: 使接口的实现类可以使用这个常量static:static修饰就表示它属于类的,随的类的加载而存在的,如果是非static的话,就表示属于对象的,只有建立对象时才有它,而接口是不能建立对象的,所以接口的常量必须定义为static。final:final修饰就是原创 2020-08-05 09:37:14 · 291 阅读 · 0 评论 -
什么是抽象类?什么是抽象方法?
抽象类:抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类,抽象类有点类似于“模板”的作用,目的是根据其格式来创建和修改新的类,对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象,当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract,在抽象类中的成员方法可以包括一般方法和抽象方法抽象方法:抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型,方法名称和所需要的参数,没有方法体,也就是说抽象方法只需要声明而不需要事先,当一个方法为抽原创 2020-08-05 09:36:44 · 1072 阅读 · 1 评论 -
Java中抽象类和接口的区别?
link从设计层面上看,抽象类提供了一种 IS-A 关系,需要满足里式替换原则,即子类对象必须能够替换掉所有父类对象。而接口更像是一种 LIKE-A 关系,它只是提供一种方法实现契约,并不要求接口和实现接口的类具有 IS-A 关系。接口反应能力,抽象类提供默认实现,方便子类实现接口。(1)抽象类中可以定义构造函数,接口不能定义构造函数;(2)接口可以被看作是抽象类的变体,接口中所有的方法都是抽象的(Java 1.8中可以定义default方法体)。(3)从使用上来看,一个类可以实现多个接口,但是不能原创 2020-08-05 09:36:09 · 102 阅读 · 0 评论 -
为什么重写equals一定要重写hashcode?
link1,link2,link3,link4,link5,link6主要是为了提升哈希表的性能。因为HashMap 集合类使用了 hashCode() 方法来计算对象在哈希表中应该存储的位置,如果不重写hashcode值一样的对象。因为new出来的对象即使值相同,存储地址必不相同。不重写 hashCode会导致为值相同的对象分别了两个存储空间,导致了空间浪费。因此要重写。以下是关于hashcode的一些性质:两个对象相等,hashcode一定相等两个对象不等,hashcode不一定不等hash原创 2020-08-05 09:35:26 · 208 阅读 · 0 评论 -
Java中“==”和equals的区别?最详细的介绍
==是基本运算符,可以对基本类型进行比较,比较的是对象的引用是否指向同一块内存地址。equals()是一个方法,它不可以可以对基本类型进行比较。见源码1,equals()默认的方法中也使用了==,比较的也是对象的地址。见源码2,只不过equals()是一个方法可以对其进行重写,像String、Date、Math、File、包装类等大部分类都重写了Object的equals()方法。重写后的equals()将每个值取出依次对比其内存地址,也可以把它理解为比较整体值是否相等。public boolean.原创 2020-08-05 09:33:54 · 337 阅读 · 0 评论 -
Java的封装类?
Java中的封装类:8种基本类型按照类型划分:byte,short,int,long,float,double,boolean,char。8种基本类型的封装类:Byte,Short,Integer,Long,Float,Double,Boolean,Character.boolean类型占了单独使用是4个字节,在数组中又是1个字节基本类型所占的存储空间是不变的。这种不变性也是Java具有可移植性的原因之一。基本类型放在栈中,直接存储值。所有数值类型都有正负号,没有无符号的数值类型。为什么需原创 2020-08-05 09:31:48 · 368 阅读 · 0 评论 -
Java的8种基本类型?
整数类型:字节型(byte/8位)、短整型(short/16位)、整型(int/32位)、长整型(long/64位)浮点类型:单精度型(float/32位)和双精度类型(double/64位)字符类型:字符类型(char/16位)布尔类型:布尔类型(boolean/1位),常量只有“真(true)”和“假(false)”这两个状态一个字节为8位...原创 2020-08-05 09:30:56 · 110 阅读 · 0 评论 -
Java 中的访问修饰符
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。public(公开) :任何位置都可见。使用对象:类、接口、变量、方法protected(受保护) : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。default(默认) : 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。private(私有) : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)修饰符原创 2020-08-05 09:30:21 · 86 阅读 · 0 评论 -
重载重写规则对比
区别点重载方法重写方法参数列表必须修改一定不能修改返回类型可以修改一定不能修改异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常访问可以修改一定不能做更严格的限制(可以降低限制)方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同...原创 2020-08-05 09:29:49 · 108 阅读 · 0 评论 -
为什么Java中子类重写方法的访问权限不能低于父类中权限?
为什么Java中子类重写方法的访问权限不能低于父类中权限? link该问题依赖于里氏代换原则, 先记录下该原则的原理,里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。...原创 2020-07-31 07:32:01 · 1137 阅读 · 0 评论 -
Java中重载和重写的规则?
方法的重载规则被重载的方法必须改变参数列表(参数个数或类型不一样);被重载的方法可以改变返回类型;被重载的方法可以改变访问修饰符;被重载的方法可以声明新的或更广的检查异常;方法能够在同一个类中或者在一个子类中被重载。无法以返回值类型作为重载函数的区分标准。方法的重写规则参数列表必须完全与被重写方法的相同。返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。父类返回值可能是复杂类型原创 2020-07-31 07:31:15 · 439 阅读 · 0 评论 -
多态的底层原理?
重载编译时多态和重写运行时多态的解释:link,link1,link2,link3原创 2020-07-31 07:30:31 · 199 阅读 · 0 评论 -
Java中重载和重写
重载(overloading):编译时多态, 在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。重写(Override):运行时多态,如果一个子类继承了一个父类,子类中拥有和父类相同方法名称,返回值,参数类型的话,就是重写,会执行子类中的方法。重载:package 学习中代码.java基础.重载和重写;public class 重载 { public static void sayhello(int s){ System.out.println("这是in原创 2020-07-31 07:30:01 · 171 阅读 · 0 评论 -
继承和多态有什么区别?
继承是子类获得父类的成员,重写是继承后重新实现父类的方法。重载是在一个类里一系列参数不同名字相同的方法。多态则是为了避免在父类里大量重载引起代码臃肿且难于维护。原创 2020-07-31 07:29:29 · 802 阅读 · 0 评论 -
Java中实现多态的机制是什么?
Java中实现多态的机制是什么?多态就是指一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。特点:指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存.原创 2020-07-31 07:28:54 · 304 阅读 · 0 评论 -
Java面向对象的三大特性?
三大特性:封装,继承,多态(重载和重写)封装:把事物用类封装起来,保留特定的接口与外界联系,可减少耦合,隐藏细节;继承:子类继承父类,子类可以拥有已知父类的行为和属性;通过继承创建的新类称为「子类」或「派生类」,被继承的类称为「基类」、「父类」或「超类」。多态:多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单说就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态的本质就是一个程序中存在多个同名的不同方法,原创 2020-07-31 07:28:02 · 92 阅读 · 0 评论 -
向对象和面向过程有什么区别?
面向对象和面向过程最本质的区别在于考虑问题的出发点不同,面向过程是以事件流程为考虑问题的出发点,而面向对象则是以参与事件的角色(对象)为考虑问题的出发点,所以面向对象在处理问题时更加灵活。目前,面向过程的语言更多被用于处理底层业务,而面向对象编程则更多用于实现一些业务逻辑复杂的大型系统。面向过程:摇(狗尾巴)面向对象:狗.摇尾巴()面向过程是编年史。面向对象是纪传史。...原创 2020-07-31 07:27:31 · 150 阅读 · 0 评论 -
Java和C++的区别?
链接:https://www.nowcoder.com/discuss/406755Java是解释型语言,所谓的解释型语言,就是源码会先经过一次编译,成为中间码,中间码再被解释器解释成机器码。对于Java而言,中间码就是字节码(.class),而解释器在JVM中内置了。C++是编译型语言,所谓编译型语言,就是源码一次编译,直接在编译的过程中链接了,形成了机器码。C++比Java执行速度快,但是Java可以利用JVM跨平台。Java是纯面向对象的语言,所有代码(包括函数、变量)都必.原创 2020-07-31 07:27:00 · 143 阅读 · 0 评论 -
如何理解面向对象?
参考链接:link1,link2我认为可以从三个层面来解释:第一个层面(基本概念):面向对象 ( Object Oriented ) 是将现实问题构建关系,然后抽象成 类 ( class ),给类定义属性和方法后,再将类实例化成 实例 ( instance ) ,通过访问实例的属性和调用方法来进行使用。第二个层面(三大特性):三大特性:封装,继承,多态(重载和重写)。第三个层面(设计模式):设计模式的六大原则可以更详细的去解释面向对象及其三大特性的规则。六大原则有:开闭原则,单一指责原则,里氏替.原创 2020-07-31 07:26:02 · 672 阅读 · 0 评论