Java知识
文章平均质量分 76
这个专栏根据Thinking in Java内容整理来,中文翻译参考https://github.com/LingCoder/OnJava8,加入了一些自己准备秋招时的知识储备
你回到了你的家
这个作者很懒,什么都没留下…
展开
-
基本数据类型和包装类
一、基本数据类型和引用类型Java是面向对象的语言,一切都是对象,但是为了编程的方便还是引入了基本数据类型,为了能够将这些基本数据类型当成对象操作,java为每一个基本数据类型都引入了对应的包装类型,int的包装类就是Integer,从java5开始引入了自动装箱/拆箱机制,使得二者可以互项转换,对应如下原始类型:boolean, char, byte, short, int ,long, float, double包装类型:Boolean, Character, Byte, Short, Int原创 2020-07-04 18:25:35 · 1042 阅读 · 0 评论 -
String、StringBuffer和StringBuilder的区别
一、String类String类是不可变类,即一个String类对象被创建后,包含在这个对象中的字符序列是不可变的,直到这个对象被销毁。对String类的修改实际上是生成了一个新的对象,并将原来的String类对象指向这个对象,之前的实例对象依然存在,如果没有被再次引用,会被垃圾回收。二、StringBufferStringBufffer对象则代表一个字符串序列可变的字符串,当一个StringBuffer被创建后,通过StringBuffer提供的append,insert,reverse,setC原创 2020-07-15 17:29:29 · 513 阅读 · 0 评论 -
java自带数据结构(set/list/stack/queue)
一、set1.1 创建Set set=new HashSet();1.2 添加元素set.add(1);1.3 set转化为listList<String> list1 = new ArrayList<String>(set); 二、List2.1 新建一个ListList<String> test=new ArrayList<String>();https://www.cnblogs.com/llq1214/p/11383075原创 2020-07-10 20:07:08 · 1050 阅读 · 0 评论 -
3.5 Java经典垃圾收集器介绍
《Java虚拟机规范》中对垃圾收集器应该如何实现并没有做出任何规定,因此不同的厂商、不同版本的虚拟机所包含的垃圾收集器都可能会有很大差别,不同的虚拟机一般也都会提供各种参数供用户根据自己的应用特点和要求组合出各个内存分代所使用的收集器。标题中“经典”二字并非情怀,它其实是讨论范围的限定语,这里讨论的是在JDK 7 Update 4之后(在这个版本中正式提供了商用的G1收集器,此前G1仍处于实验状态)、JDK 11正式发布之前,OracleJDK中的HotSpot虚拟机[1]所包含的全部可用的垃圾收集器。使原创 2021-03-12 14:33:15 · 122 阅读 · 0 评论 -
9.1 多态
一、向上转型回顾我们在第八章中看到了可以将一个对象视作它的自身类型或者它的基类类型。这种把一个对象引用当作它的基类引用的做法称为向上转型,因为继承图中基类一般都位于最上方。...原创 2020-12-10 14:16:15 · 79 阅读 · 0 评论 -
11.1 内部类
一个定义在另一个类中的类,叫做内部类内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可见性。然而必须要了解,内部类与组合是完全不同的概念,这一点很重要。在最初,内部类看起来就像是一种代码隐藏机制:将类置于其他类的内部。但是,你将会了解到,内部类远不止如此,它了解外部类,并能与之通信,而且你用内部类写出的代码更加优雅而清晰,尽管并不总是这样(而且 Java 8 的 Lambda 表达式和方法引用减少了编写内部类的需求)。最初,内部类可能看起来有些奇怪,而且要花.原创 2020-12-07 22:29:04 · 85 阅读 · 0 评论 -
15.1 异常(异常的基本概念+自定义异常)
错误恢复在我们所编写的每一个程序中都是基本的要素,并且在 Java 中它显得格外重要,因为 Java 的主要目标之一就是创建供他人使用的程序构件。发现错误的理想时机是在编译阶段,也就是在你试图运行程序之前。然而,编译期间并不能找出所有的错误,余下的问题必须在运行期间解决。这就需要错误源能通过某种方式,把适当的信息传递给某个接收者——该接收者将知道如何正确处理这个问题。Java 使用异常来提供一致的错误报告模型,使得构件能够与客户端代码可靠地沟通问题。Java 中的异常处理的目的在于通过使用少于目前数量原创 2020-12-07 22:16:06 · 369 阅读 · 0 评论 -
8.2 复用(protected+向上转型+final关键字+类的初始化)
一、protected在编写代码时,有时候我们希望将一个模块尽量对外界隐藏,却希望派生类的成员能够访问,关键字protected就起到这个作用。它表示“就类的用户而言,这是 private 的。但对于任何继承它的子类或在同一包中的类,它是可访问的。”(protected 也提供了包访问权限)尽管可以创建 protected 属性,但是最好的方式是将属性声明为 private,然后定义 protected 方法来控制类的继承者的访问权限。// reuse/Orc.java// The protecte原创 2020-12-07 10:48:37 · 471 阅读 · 0 评论 -
8.1 复用(组合/继承)
对于像 C 语言等面向过程语言来说,“复用”通常指的就是“复制代码”。任何语言都可通过简单复制来达到代码复用的目的,但是这样做的效果并不好。Java 围绕“类”(Class)来解决问题。我们可以直接使用别人构建或调试过的代码,而非创建新类、重新开始。如何在不污染源代码的前提下使用现存代码是需要技巧的。在本章里,将介绍两种方式来达到这个目的:第一种方式直接了当。在新类中创建现有类的对象。这种方式叫做“组合”(Composition),通过这种方式复用代码的功能,而非其形式。第二种方式叫做“继承”(In原创 2020-12-06 16:54:22 · 1123 阅读 · 0 评论 -
7.1 封装(Java包(package)的概念+访问权限修饰符(public/private/protected/default))
一、包的概念包内包含一组类,它们被组织在一个单独的命名空间(namespace)下。例如,标准 Java 发布中有一个工具库,它被组织在 java.util 命名空间下。java.util 中含有一个类,叫做 ArrayList。使用 ArrayList 的一种方式是用其全名 java.util.ArrayList:// hiding/FullQualification.javapublic class FullQualification { public static void main原创 2020-12-06 15:26:08 · 529 阅读 · 0 评论 -
6.3 初始化和清理(成员初始化)
一、成员初始化Java 尽量保证所有变量在使用前都能得到恰当的初始化。对于方法的局部变量,这种保证会以编译时错误的方式呈现,所以如果写成如下的形式会报错:void f() { int i; i++;}要是类的成员变量是基本类型,情况就会变得有些不同。正如在"万物皆对象"一章中所看到的,类的每个基本类型数据成员保证都会有一个初始值。下面的程序可以验证这类情况,并显示它们的值:// housekeeping/InitialValues.java// Shows default原创 2020-12-05 10:16:14 · 241 阅读 · 0 评论 -
初始化和清理(垃圾回收器)
一、垃圾回收器Java中存在着垃圾回收器来回收无用对象的内存,但是存在着一种特殊的情况:因为垃圾回收器只知道如何释放用new创建的对象的内存,假如我们创建的对象不是通过new来分配内存的,那么垃圾回收器就不知道如何回收这部分内存。为了处理这种情况,Java允许在类中定义一个名为finalize()的方法。它的工作原理"假定"是这样的:当垃圾回收器准备回收对象的内存时,首先会调用其 finalize() 方法,并在下一轮的垃圾回收动作发生时,才会真正回收对象占用的内存。所以如果你打算使用 finalize原创 2020-12-05 09:25:27 · 145 阅读 · 0 评论 -
初始化和清理(构造器+重载/重写+this关键字)
C++引入了构造器的概念,这是一个特殊的方法,每创建一个对象,这个方法就会被自动调用,Java沿用了c++中构造器的概念。一、利用构造器保证初始化我们可以为每个类创建一个initialize()方法,该方法名暗示着在使用类之前先调用它进行初始化,但这样做的缺点是必须得记得去调用它。在 Java 中,类的设计者通过构造器保证每个对象的初始化。如果一个类有构造器,那么 Java 会在用户使用对象之前(即对象刚创建完成)自动调用对象的构造器方法,从而保证初始化。使用构造器的一个问题是如何命名构造器方法。这个问原创 2020-12-04 20:06:45 · 264 阅读 · 0 评论 -
并发编程-代码实现
一、并行流Java 8 流的一个显著优点是,在某些情况下,它们可以很容易地并行化。这来自库的仔细设计,特别是流使用内部迭代的方式 - 也就是说,它们控制着自己的迭代器,这是一种特殊的迭代器,称为 Spliterator,它被限制为易于自动分割。使用.parallel()会产生魔法般的结果-流中的所有内容都作为一组并行任务运行。如果你的代码是使用 Streams 编写的,那并行化以提高速度似乎是一种琐事。例如,考虑来自 Streams 的 Prime.java。查找质数可能是一个耗时的过程,我们可以看到该原创 2020-12-03 23:58:32 · 500 阅读 · 0 评论 -
并发编程-基础概念介绍
一、术语问题术语“并发”,“并行”,“多任务”,“多处理”,“多线程”,”分布式系统“(可能还有其他)在很多编程文献中都以多种相互冲突的方式使用,并且经常被混为一谈。 Brian Goetz 在他 2016 年《从并发到并行》的演讲中指出了这一点,之后提出了合理的二分法:并发是关于正确有效地控制对共享资源的访问并行是使用额外的资源来更快的产生结果“并发”通常表示:不止一个任务正在执行。而“并行”几乎总是代表:不止一个任务同时执行。所以问题就是:“并行”也有不止一个任务正在执行的语义在里面。区别就原创 2020-12-03 18:48:26 · 232 阅读 · 0 评论