Java零碎知识点 admin 2023-02-10 12:36:01 篇首语:本文由小编为大家整理,主要介绍了Java零碎知识点相关的知识,希望对你有一定的参考价值。 Java零碎知识点 Object的finalize方法 关于Object类中的finalize()方法 1.在object类中的源代码为:protected void finalize() throws Throwable{};finalize()方法只有一个方法体,里面没有代码,而且这个方法是protected修饰的。 2.这个方法不需要程序员手动调用,JVM的垃圾回收器负责调用这个方法。不像equals tostring需要你去手动写,finalize()是需要重写,重写完将来自动会有程序来调用。GC:负责调用finalize()方法 3.finalize()方法的执行时机:当一个java对象即将被垃圾回收器回收时,垃圾回收器负责调用finalize()方法。 4.finalize()方法实际上是SUN公司为java程序员准备的一个时机,垃圾销毁时机,如果希望在对象销毁时机执行一段代码的话,这段代码要写到finalize()方法当中。 5.静态代码块的作用是什么? static{} 静态代码块在类加载时刻执行,并且只执行一次。这是一个SUN准备的类加载时机;finalize()方法同样也是SUN为程序员准备的一个时机。这个时机是垃圾回收时机。 6.提示:Java中的垃圾回收器不是轻易启动的,垃圾太少或者时间没到种种条件下,有可能启动也可能不启动。 Object的hashCode()方法 hashCode()方法 在Object中的hashCode方法是怎样的? public native int hashCode(); 这个方法不是抽象方法,带有native关键字,底层调用c++程序。 native是一个计算机函数,一个Native Method就是一个Java调用非Java代码的接口。方法的实现由非Java语言实现,比如C或C++。 hashCode()方法返回的是哈希码:实际上就是一个Java对象的内存地址,经过哈希算法,得出的一个值。所以hashCode()方法的执行结果可以等同看做一个Java的内存地址。 内部类 在一个类的内部定义的类,叫做内部类。内部类主要分为:实例内部类,静态内部类,局部内部类,匿名内部类。 实例内部类 类似于实例变量 1.创建实例内部类,外部类的实例必须已经创建 2.实例内部类会持有外部类的引用 3.实例内部类不能定义static成员,只能定义实例成员 静态内部类 类似于静态变量 1.静态内部类不会持有外部类的引用,创建时可以不用创建外部类。 2.静态内部类可以访问外部的静态变量,如果访问外部类的成员变量必须用过外部类的实例访问。 局部内部类 类似于局部变量 局部内部类是在方法中定义的,他只能在当前方法中使用。和局部变量的作用一样。局部内部类和实例内部类都不可以包含静态成员。局部变量在内部类中使用必须采用final修饰。 匿名内部类 是一种特殊的内部类,该类没有名字。匿名内部类是局部内部类的一种。 缺点:太复杂,太乱,可读性差,没有名字,不可以复用。 为啥用?:可以看懂别人的代码~ main方法中的String数组 main方法中的String[] args也可以写成String args[],和命名数组时一样,int[] a 等价于 int a[] (这个是c++的风格) main方法上面的一维数组有什么用? JVM负责调用main方法,调用时JVM会传过来一个String数组。 JVM默认传过来数组的长度为0(可以知道args不是null,数组创建了但是里面没有东西) 这个数组什么时候里面会有值呢? 其实这个数组是留给用户的,用户可以在控制台上输入参数,这个参数自动会被转换为“String[] args” 所以main方法上面的String[] args数组主要是用来接收用户输入参数的。(abc def )=>({"abc","def"}) "admin".equals(username)比 username.equals("admin")好,因为可以避免空指针异常!!! StringBuilder StringBuilder概述 stringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是StringBuilder对象中的内容可变 String和StringBuilder的区别就是string不可变,stringbuilder可变。 StringBuffer底层实际上是一个byte[]数组。往StringBuffer中放字符串,实际上是放到byte数组当中了,StringBuffer的初始化容量是16 拼接字符串统一调用append()方法,append的意思是追加。string底层也是byte数组,但是被final修饰了,一旦创建不可改变。 如何优化StringBuffer性能 在创建string buffer的时候尽可能给定一个初始化容量,最好减少扩容次数。 StringBuffer和StringBuilder的区别 StringBuffer是线程安全的,StringBuilder是线程不安全的。 包装类 Java中为八种基本数据类型又对应准备了八种包装类型。八种包装类属于引用数据类型,父类是object。 为啥要提供包装类? Java是面向对象的语言,但并不是“纯面向对象”的,因为我们经常用到的基本数据类型就不是对象。但是我们在实际应用中经常需要将基本数据转化成对象,以便于操作。 集合 什么是集合?有什么用? 数组就是一个集合,集合实际上就是一个容器。可以容纳其他类型的数据。 集合是一个容器,是一个载体,可以一次容纳多个对象。 集合不能直接存储基本数据类型,另外集合也不能直接存储Java对象,集合当中存储的都是Java对象的内存地址。(或者说集合中存储的是引用) list.add(100)自动装箱,存的不是基本数据类型 在Java中集合分为两大类 1.单个方式存储元素:超级父接口:Java.util.Collection 2.以键值对的方式存储元素:超级父接口:java.util.Map 单个方式存储元素 以键值对的方式存储元素 **放在集合中的方法要重写equals方法!**这样的话,才可以保证当出现重复内容时,contains()方法生效! 当集合的结构发生改变时,迭代器必须重新获取,如果还有老的,会报异常。在迭代过程中不可以调用集合的remove()方法,但是可以调用迭代器的remove()方法 ArrayList集合 1.ArrayList集合初始化容量为10。(底层先创建了一个长度为0的数组,当添加了第一个元素后,初始化容量为10。) 2.底层是Object类型的数组 3.扩容到原容量的1.5倍 4.建议给定一个预估计的初始化容量,减少数组的扩容次数,这是ArrayList集合比较重要的优化策略。 5.线程不安全 LinkList集合 LinkList集合是双向链表 Vector集合 1.底层是数组 2.初始容量10 3.线程安全 4.扩容后是原容量的二倍 Collections.synchronizedList(myList);可以将线程不安全的集合转换成线程安全的集合 自定义泛型的时候,<>尖括号中的是一个标识符,随便写。 Java源代码中经常出现的是:和 E是Element单词首字母,T是Type单词的首字母。 增强for循环----foreach Map map和collection没有继承关系。 map集合以Key和Value的方式存储数据:键值对 key和value都是引用数据类型。 key和value都是存储对象的内存地址 key起主导地位,value是key的一个附属品。 对于Map.Entry的解释 HashMap的null只可以有一个,且key可以为空,但value有值。(线程不安全) HashTable的key与value均不可以为空。hashtable的默认容量为11,默认负载因子为0.75。(线程安全) Properties类 properties是一个map集合,继承HashTable,properties的key和value都是string类型。又称为属性类 Sorted 1.TreeSet集合底层实际上是一个TreeMap 2.TreeMap集合底层是一个二叉树。 3.放到TreeSet集合中的元素,等同于放到了TreeMap集合key部分了。 4.TreeSet集合中的元素:无需不可以重复,但是可以按照元素的大小顺序自动排序。 IDEA默认路径是Project的根 以上是关于Java零碎知识点的主要内容,如果未能解决你的问题,请参考以下文章 点云格式转换:txt点云转pcd点云(XYZXYZIXYZRGBXYZIRGBGpstime) 《通信技术 - USB》USB基础知识 您可能还会对下面的文章感兴趣: 相关文章 浏览器打不开网址提示“ERR_CONNECTION_TIMED_OUT”错误代码的解决方法 如何安装ocx控件 VMware的虚拟机为啥ip地址老是自动变化 vbyone和EDP区别 linux/debian到底怎么重启和关机 苹果平板键盘被弄到上方去了,如何调回正常? 机器学习常用距离度量 如何查看kindle型号