java基础
java基础知识
Damon_zqt
心累,因为常常徘徊在坚持和放弃之间,举棋不定。烦恼,因为记性太好,该记的,不该记的都会留在记忆里。痛苦,因为追求的太多。难过,因为计较的太多
展开
-
Log4j,Log4j2,logback,slf4j日志框架比较
常用日志框架简介Log4jLog4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、数据库等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。Log4j有7种不同的log级别,按照等级从低到高依次为:TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF。如果配置为OFF级别,表示关闭log。Log4j支持两种格式的配置文件:properties和xml。包含三个主要的原创 2020-05-21 10:03:58 · 431 阅读 · 0 评论 -
Java中异常处理最佳实践
1. 在 finally 块中清理资源或者使用 try-with-resource 语句当使用类似InputStream这种需要使用后关闭的资源时,一个常见的错误就是在try块的最后关闭资源。public void doNotCloseResourceInTry() { FileInputStream inputStream = null; try { File file = new File("./tmp.txt"); inputStream = new原创 2020-05-20 17:37:38 · 414 阅读 · 0 评论 -
pojo和javabean的比较
什么是POJO按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的Java对象”,但大家都使用“简单java对象”来称呼它。POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。JavaBean 是一种JAVA语言写成的可重用组件。它的方法命名,构造及行为必须符合特定的约定:1.这个类必须有一个公共的缺省构造函数。2.这个类的属性使用getter和setter来访问,其他方法遵从标准命名规范。原创 2020-05-19 13:44:28 · 216 阅读 · 1 评论 -
Java中四种引用类型
一、目的Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。二、分类强引用:强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收,JVM宁愿抛出OutOfMemory错误也不会回收这种对象。使用方式:String str = new String(“str”);例子:pub...原创 2020-04-14 12:28:01 · 223 阅读 · 0 评论 -
java中泛型简介
一、定义将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参)泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。优点:1、更清晰地代码。因为没有了强制类型...原创 2020-04-13 18:46:49 · 117 阅读 · 0 评论 -
Java中instanceof和isInstance区别
obj.instanceof(class)也就是说这个对象是不是这种类型,1.一个对象是本身类的一个对象2.一个对象是本身类父类(父类的父类)和接口(接口的接口)的一个对象3.所有对象都是Object4.凡是null有关的都是false null.instanceof(class) int i =2; //System.out.println(i instanceof...原创 2020-04-13 10:56:08 · 152 阅读 · 0 评论 -
java面向对象及标识符
Java特性封装:通常认为封装是把数据和操作数据的方法绑定起来,我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口多态:态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:1). 方法重写(子类继承父类并重写父类中...原创 2020-04-13 10:33:08 · 700 阅读 · 0 评论 -
java中反射简介
一、定义这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。二、获取Class对象有4中方法:1)Class.forName(“类的路径”);2)类名.class3)对象名.get...原创 2020-04-13 10:22:16 · 104 阅读 · 0 评论 -
java IO流简介
一、概念、作用、特性概念、作用:java中IO流用来处理设备之间的数据传输,上传文件和下载文件;使用Decorator(装饰者)模式,按功能划分Stream,您可以动态装配这些Stream,以便获得您需要的功能。例如,您需要一个具有缓冲的文件输入流,则应当组合使用FileInputStream和BufferedInputStream。特性:1、先进先出,最先写入输出流的数据最先被输入流读...原创 2020-04-11 14:48:20 · 142 阅读 · 0 评论 -
Java中double类型比较大小或相等的方法
尽量避免用浮点型数据直接比较大小第一种方法:转换成字符串如果要比较的两个double数据的字符串精度相等,可以将数据转换成string然后借助string的equals方法来间接实现比较两个double数据是否相等。注意这种方法只适用于比较精度相同的数据,并且是只用用于比较是否相等的情况下,不能用来判断大小。第二种方法:使用sun提供的Double.doubleToLongBits()方法...原创 2019-01-17 14:02:23 · 9984 阅读 · 0 评论 -
java中transient关键字
一、1、关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。2、被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化(Externalizable可以实现静态变量序列化)。3、一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。也可以认为在将持...原创 2020-04-09 21:20:56 · 122 阅读 · 0 评论 -
Java中浅拷贝和深拷贝区别及实现方式
一、浅拷贝(Shallow Copy):①对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。②对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给...原创 2020-04-09 20:37:17 · 198 阅读 · 0 评论 -
java中String类
一、String源码如上代码所示,可以观察到以下设计细节:String类被final修饰,不可继承string内部所有成员都设置为私有变量不存在value的setter并将value和offset设置为final。当传入可变数组value[]时,进行copy而不是直接将value[]复制给内部变量.获取value时不是直接返回对象引用,而是返回对象的copy.不可变类是实例创建后...原创 2020-04-09 19:38:39 · 81 阅读 · 0 评论 -
值传递和引用传递区别
一、基本类型作为参数传递的例子:public class Test1 { public static void main(String[] args) { int n = 3; System.out.println("Before change, n = " + n); changeData(n); System.out.println("After changeData(n), n ...原创 2020-04-09 11:40:51 · 307 阅读 · 0 评论 -
java集合框架简介
一、集合可以看作是一种容器,用来存储对象信息。所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下。Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue(Java5新增的队列),因此Java集合大致也可分成List、Set、Queue、Map四种接口体...原创 2020-04-08 20:37:33 · 99 阅读 · 0 评论 -
Java中对象创建过程中的执行顺序
1.类的加载顺序有父子关系的类在加载时先调用父类静态初始化块,静态属性,但不包括静态方法,然后再是,子类静态初始化块,静态属性,但同样不包括静态方法 。2.创建对象的过程先是父类非静态初始化块,非静态属性 ,再是父类构造函数,然后是子类非静态初始化块,非静态属性 ,最后是子类构造函数注意(1)子类在继承父类后,若重写了父类的方法,那么父类中这个方法会被隐藏,但是可以通过在构造方法中用s...原创 2020-04-08 12:23:09 · 429 阅读 · 0 评论 -
Java 中内存泄漏问题
一、内存泄漏:理论上Java因为有垃圾回收机制(GC)不会存在内存泄露问题;然而在实际开发中,可能会存在无用但可达的对象(对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着),这些对象不能被GC回收,因此也会导致内存泄露的发生。二、避免内存泄漏的一些方法:静态集合类引起内存泄漏像HashMap、Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程...原创 2020-04-07 15:32:21 · 194 阅读 · 0 评论 -
集合框架遍历Iterator
一、迭代器并发修改异常某个线程在 Collection 上进行迭代时,通常不允许另一个线性修改该 Collection(来自java API),从这里可以看出迭代器和集合是在不同线程里的。查看资料知道了,迭代器其实在另外一个线程复制了一个一摸一样的集合进行遍历的。当用集合的remove方法删除元素时,迭代器是不会知道的,所以就会抛出异常。而用自己的方法时 迭代器时知道的。JAVA中循环遍历li...原创 2020-03-16 15:43:37 · 118 阅读 · 0 评论 -
向上转型与向下转型
向上转型(upcasting) 、向下转型(downcasting).总结:1。父类引用指向子类对象,而子类引用不能指向父类对象。2。把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转换。3。把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转换。4。向上转型时,子类单独定义的方法会丢失向上转型的好处,减少重复代码,使代码变得简洁。...原创 2020-03-16 13:52:47 · 88 阅读 · 0 评论 -
final关键字
final1.修饰的基本类型的成员变量必须要赋值;表示为常量这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。,2.修饰引用类型变量,引用类型变量里面放的是个地址,所以用final修饰引用类型变量指的是它里面的地址不能变,并不是说这个地址所指向的对象或数组的内容不可以变,但是要注意final类中...原创 2020-03-16 11:32:30 · 79 阅读 · 0 评论 -
Java中的关键字和保留字(共53个)
一、概念Java关键字(Key Word): 对Java的编译器有特殊的意义,他们用来表示一种数据类型或者表示程序的结构.保留字(Reserve Word):即它们在Java现有版本中没有特殊含义,以后版本可能会作为有特殊含义的词,或者该词虽然在Java中没有特殊含义,以后版本也不打算使用,但在其它语言中有特殊含义,不宜在Java中定义为变量名称等,因为容易混淆。注意:关键字和保留字均不能...原创 2020-03-09 16:46:08 · 1040 阅读 · 1 评论 -
为什么java源文件有且只能有一个public类
一个.java文件中只能有一个public修饰的类,编译器就会给出错误信息java将public类作为每个编译单元(java文件)的数据接口,只能有一个,虽然不是很常用,但编译单元内完全不带public类也是可能的如图此时程序编译通过,在相应路径下产生了三个.class文件。直接点击运行,程序是不能运行的,我们需要鼠标右键点击程序----->Run As----->Java ...原创 2020-03-09 16:32:34 · 430 阅读 · 0 评论 -
Java中char类型占用多少个字节
先区分unicode和UTF。unicode :Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。统一的字符编号,仅仅提供字符与编号间映射。符号数量在不断增加,已超百万。详细:[https...原创 2020-03-09 15:34:35 · 6235 阅读 · 0 评论 -
Java中boolean类型占用多少个字节
为什么要问这个问题,首先在Java中定义的八种基本数据类型中,除了其它七种类型都有明确的内存占用字节数外,就boolean类型没有给出具体的占用字节数,因为对虚拟机来说根本就不存在 boolean 这个类型,boolean类型在编译后会使用其他数据类型来表示,那boolean类型究竟占用多少个字节?带着疑问,随便网上一搜,答案五花八门,基本有以下几种:1、1个bit理由是boolean类型的值...原创 2020-03-09 15:07:11 · 397 阅读 · 0 评论