▶寒暄_Java
重新学一遍Java,一个知识点也不放过
寒 暄
自渡
展开
-
使用IDEA创建一个Scala项目
VS Code社区对Scala的支持还不是很成熟(组件安装繁琐,不支持关键词提示,不支持直接运行),为了更好的进行学习,Scala还是使用IDEA进行开发合适。1.配置Scala开发环境下载地址:https://www.scala-lang.org/download/all.html随便选一个版本,不过提前看看你使用的spark的版本号对应的scala版本。然后安装,配置环境变量。略注:scala通过jvm编译运行,必须安装java环境2.在IDEA中下载Scala插件打开idea,在“文件”原创 2020-06-25 19:24:18 · 5304 阅读 · 0 评论 -
Scala语言基础-基础语法
注意点scala语言区分大小写类名遵循大驼峰写法(AaaBbbCcc)方法名遵循小驼峰写法(aaaBbbCcc)类名与文件名一致注释单行注释: // 单行注释多行注释:/*多行注释*/包定义:package com.oneclass HelloScala{…}package con.one{class HelloScala…}导包:import java.awt.Color选择导包:import java.awt.{Color,Font}导包别名:i原创 2020-06-29 20:38:17 · 341 阅读 · 0 评论 -
Scala语言基础-运算符
Scala在运算符上并没有和Java有太大出入。(好像所有语言遵循的规则都是那一套)算术运算符运算符解释范例结果+正号+33-负号-4-4+加号2+35-减号3-21*乘号2*36/处号6/32%取余7%31+字符串连接“hello”+“world”“helloworld”...原创 2020-07-01 21:43:28 · 709 阅读 · 0 评论 -
Scala语言基础-数据类型
与Java对比scala中的数据类型在java中都能找到对应的,他们之间最大的区别是scala中的数据类型全部都是对象,并没有类似于java原生类型这样的东西。scala的基础数据类型分为值类型(AnyVal)与引用类型(AnyRef),他们都有一个共同的父类=>Any,引用类型都有一个共同的子类=>Null,所有类型都有一个共同的子类=>Nothing。这张图表现了scala数据类型的两大特点:同一数据类型同一底层特殊的数据类型数据类型特点描述A原创 2020-07-02 10:12:20 · 301 阅读 · 0 评论 -
Java语言进阶-反射
Java反射机制概述反射被视为动态语言的关键,反射机制允许程序在执行期间借助反射API获得任何类的内部信息,并能直接操作任意对象的内部属性与方法。加载完类后,在堆内存的方法区就产生了一个Class类型的对象(一个类只有一个class对象)。这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子就可以看到类的结构,所以,我们形象的称为:反射。Java反射机制提供的功能在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判断任意一个原创 2020-06-20 16:52:23 · 173 阅读 · 0 评论 -
Java语言进阶-泛型
为什么要有泛型我们来看一个程序:import java.util.ArrayList;import java.util.List;public class GeneTest { public static void main(String[] args) { List arrayList = new ArrayList(); arrayList.add("aaaa"); arrayList.add(100); for(int原创 2020-06-19 17:11:46 · 120 阅读 · 0 评论 -
Java语言进阶-集合-HashMap源码解析
首先看一下属性//默认的初始容量为 16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;//最大的容量上限为 2^30static final int MAXIMUM_CAPACITY = 1 << 30;//默认的负载因子为 0.75static final float DEFAULT_LOAD_FACTOR = 0.75f;//变成树型结构的临界值为 8static final int TREEIFY_T原创 2020-06-19 14:35:25 · 133 阅读 · 0 评论 -
Java语言进阶-集合-Map接口
Map接口Map:双列数据,存储Key-Value对的数据HashMap:Map的主要实现类,线程不安全,效率高,可以存储null值,底层是数组+链表+红黑树LinkedHashMap:线程安全的实现类,效率低。保证在遍历map元素时,可以按照添加的顺序实现遍历。因为他自带一对指针,适合做频繁的遍历TreeMap:保证按照添加的Key-value对进行排序,实现排序遍历。底层是红黑树Hashtable:古老的实现类Properties:常用来处理配置文件HashMap的底原创 2020-06-18 17:16:19 · 151 阅读 · 0 评论 -
Java语言进阶-集合-LinkedList源码解析
LinkedList源码的代码量就没有ArrayList的多。同时有一个很特别的数据类型-node,他用来存储与链接数据。他的空参构造器是真·空参构造器,带参构造器调用的是addAll方法(直接全倒进去就行,不用管其他的了)。这样的话,我们还是看点有意义的部分,比如如何构建底层的链表: /** * Links e as last element. */ void linkLast(E e) { // 因为last没有赋过值,所以第一次调用时,l等于nu原创 2020-06-17 21:05:50 · 102 阅读 · 0 评论 -
Java语言进阶-集合-ArrayList源码解析
ArrayList类位于java.util包下。第一步:创建一个ArrayList对象,定位到ArrayList构造器java.util.ArrayList__164---------- public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}可以看到他给 elementData 赋了一个常量,这个常量在上面有定义。 java.util.ArrayList__126-----原创 2020-06-17 20:26:32 · 146 阅读 · 2 评论 -
Java语言进阶-集合-Collection接口
Collection接口Collection接口常用方法如下:import java.util.ArrayList;import java.util.Collection;import java.util.Date;import org.junit.Test;public class CollectionTest { @Test public void test1(){ Collection coll = new ArrayList(); /原创 2020-06-17 15:47:49 · 103 阅读 · 0 评论 -
Java语言进阶-集合
集合概述一方面,面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而JAVA集合就像一种容器,可以动态的把多个对象的引用放入容器中。数组存储的优点:数组初始化以后,长度就确定了数组声明的类型,就决定了进行元素初始化时的类型数组存储的弊端:数据初始化以后,长度就不可变了,不便于扩展数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,且效率不高,无法同时获取存储元素的个数数组存储的数据是有序原创 2020-06-17 15:47:23 · 146 阅读 · 0 评论 -
Java语言进阶-注解
什么是注解从JDK5.0之后,Java增加了对元数据的支持,也就是Annotation。注解其实就是代码里的特殊标记,这些标记可以在编译,加载,运行时被读取,并执行相应的处理。通过注解,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。注解可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量的声明,这些信息被保存在注解的name=value对中。未来的开发模式基本就是基于注解,可以说框原创 2020-06-13 13:43:30 · 142 阅读 · 0 评论 -
Java语言进阶-枚举类
什么是枚举类当类的对象有有限个,是确定的就可以使用枚举类。需要定义一组常量来提供选择的类建议使用枚举类。在JDK5.0之前需要自定义枚举类,JDK5.0之后新增的enum关键字用于定义枚举类。如何自定义枚举类如何使用关键字enum定义枚举类Enum类的主要方法实现接口的枚举类...原创 2020-06-12 20:53:33 · 140 阅读 · 0 评论 -
Java语言进阶-常用类-其他常用类
java.lang.SystemSystem类表示系统类,系统级的很多属性与方法都在此类中。该类的构造器是private,所以无法创建该类的对象,也无法实例化该类。但是其内部的属性与方法都是static声明的,所以也可以很方便的进行调用。System类内部包含in,out,err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。常用方法:currentTimeMillis()该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT原创 2020-06-12 15:51:44 · 110 阅读 · 0 评论 -
Java语言进阶-常用类-Comparator类
java.util.Comparator当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用Comparator的对象来排序,强行对多个对象进行整体排序的比较。重写compare(Object o1,Object o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大o2;如果返回0,表示相等;返回负整数,表示o1小于o2。可以将 Comparato原创 2020-06-12 15:05:39 · 1204 阅读 · 1 评论 -
Java语言进阶-常用类-Comparable类
java.lang.ComparableComparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。如果当前对象this大 于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回负整数,如果当前对象this等于形参对象obj,则返回零。实现Comparable接原创 2020-06-12 15:04:46 · 2607 阅读 · 0 评论 -
Java语言进阶-常用类-日期时间类
java.lang.System类System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。此方法适合用于计算时间差计算世界时间主要有三个标准:UTC/GMT/CSTjava.util.Date类表示特定的瞬间,精确到毫秒这个类有两个构造器:Date()/Date(long date)常用方法:getTime()返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位原创 2020-06-11 16:54:57 · 217 阅读 · 0 评论 -
Java语言进阶-常用类-StringBuffer类
String/StringBuffer/StringBuilderTest的区别String:不可变的字符序列,底层使用char[]存储StringBuffer:可变的字符序列,线程安全(都是同步方法),效率低,底层使用char[]存储StringBuilderTest:可变的字符序列,jdk5.0新增,线程不安全,效率高,底层使用char[]存储创建StringBuffer对象stringbuffer类不同于string,其对象必须使用构造器生成。一共有三个构造器:stringbuffer(原创 2020-06-11 15:20:50 · 120 阅读 · 0 评论 -
Java语言进阶-常用类-String类
String的特性String类:代表字符串。Java程序中的所有字符串字面值都为此类的实例对象String类是一个final类,代表不可变的字符序列字符串是常量,用双引号括起来,他们的值在创建后就不能被更改string对象的字符内容时存储在一个字符数组value[]上的实现了Serializable接口,表示字符串支持序列化实现了Comparable接口,表示字符串可以比较大小import org.junit.Test;public class StringTest{ @Te原创 2020-06-11 11:44:05 · 120 阅读 · 0 评论 -
Java语言进阶-罪恶的开始-多线程(下)
线程的生命周期当一个线程被创建直到这个线程被销毁,中间的过程就是这个线程的生命周期。一个完整的生命周期通信要经历如下五个步骤:新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时他已经具备了运行的条件,只是没分配到CPU资源运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run()方法定义了线程的操作和功能阻塞:在某种特殊情况下,被人挂起或执行输入输出操作时,让出CPU并原创 2020-06-10 14:28:06 · 119 阅读 · 0 评论 -
Java语言进阶-罪恶的开始-多线程(上)
基本概念程序是为了完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有他自身的产生、存在和消亡的过程。比如正在运行的APP。程序是静态的,进程是动态的。线程进程可进一步细化为线程,是一个程序内部的一条执行路径。若一个进程同一时间并行执行多个线程,就是支持多线程。线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器,线程切换的开销小。一个进程中的多个线程共享相同的内存单元/内存地址空间原创 2020-06-08 11:46:00 · 139 阅读 · 0 评论 -
Java语言基础-如何让程序优雅的报错-异常处理
异常概述在使用计算机语言进行项目开发的过程中,即使程序员把代码写的尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是考代码就能避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等。异常:在Java语言中,将程序执行中发生的不正常的情况称为“异常”(开发过程中的语法错误与逻辑错误不叫异常)。Java程序在执行中出现的异常分两类:Error:Java虚拟机无法解决的严重问题,例如:JVM内部错误,资源耗尽等严重情况。一般不编写针对性的代码进行修复举两个例子原创 2020-05-29 21:25:00 · 1547 阅读 · 0 评论 -
Java语言基础-类中有类之内部类
内部类概述当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使用内部类。在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。inner class 一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。有成员内部类与局部内部类之分。public class InnerClassTest { public static void main(final String[] a原创 2020-05-27 15:26:10 · 313 阅读 · 0 评论 -
Java语言基础-面向对象编程三步走之关上冰箱门
面向对象编程高阶关键字:staticStatic关键字可以用来修饰属性、方法、代码块、内部类。使用Static修饰的属性叫做静态变量。我们在实例化类时,会开辟一块内存空间,空间内存放着各自的属性与方法。假如类中有一个属性不管声明多少次,值都是一个固定的值,那么我们可以把他设置成一个静态变量。这样的话这个属性就不是所有对象都有一个,而是所有对象共享一个,可以极大的降低内存使用。public class StaticTest { public static void main(String[]原创 2020-05-27 14:11:39 · 153 阅读 · 0 评论 -
Java语言基础-接口与实现类
接口概述一方面,有时必须从几个类中派生一个子类,继承他们所有的属性和方法。但是Java不支持多重继承。有了接口,就可以得到多重继承的效果。另一方面,有时必须从几个类抽取一些共同的行为特征,而他们之间又没有is-a的关系,仅仅是具有相同的行为特征而已。例如鼠标,键盘,摄像头都属于输入设备,使用USB连接。接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要…则必须能…”的思想。继承是一个是不是的关系,接口是一个能不能的关系。接口的本质是契约,标准,规范,就像我们的法律一样。指定好后大家都要遵原创 2020-05-26 21:54:02 · 6740 阅读 · 0 评论 -
Java语言基础-包装类
什么是包装类针对八种基本数据类型定义相应的引用类型–包装类(封装类)有了类的特点,就可以调用类中的方法,Java才是真正的面向对象。基本数据类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublebooleanBooleancharCharacter基本数据类型转换为包装类后,就可以调用包装类的方法,功能和使用起来的健壮性得到了直线提升。可以把基本数原创 2020-05-22 21:25:40 · 129 阅读 · 0 评论 -
Java语言基础-JUnit单元测试
使用vs code 创建一个规范的java项目Ctrl+Shift+p打开搜索栏,输入java,选择Java:Create Java Project创建一个Java项目,然后会问你创建一个普通项目还是maven项目,然后选择本地目录,最后回车确认。然后md文件内有说明目录结构的解释(test和main目录是我自己建立的)。将junit.jar包放到lib目录中即可。然后再test中新建文件:package test;import org.junit.Test;/** * 测试类:原创 2020-05-22 16:33:35 · 153 阅读 · 0 评论 -
Java语言基础-Object类
object类的使用object类是所有Java类的根父类。如果在定义Java类中没有使用extends关键字指明父类,默认父类都是java.lang.object类。在文档中写明object类在jdk1.0时就作为所有类的父类来使用。内部没有定义多余的属性。只有一个无参构造器。但是有很多经常使用的方法,本文主要阐述这些常用方法。clone()克隆方法语法:对象类型 对象名 = (对象类型) 克隆对象名.clone();Animal a2 = (Animal) a1.clon原创 2020-05-22 15:10:12 · 212 阅读 · 0 评论 -
85%的人都会回答错的一道面试题:==和equals的区别
==即可以比较基本类型也可以比较引用类型,对于基本类型比较值的大小,对于引用数据类型比较内存地址。equals的话,它是属于java.lang.object类里面的方法,如果该方法没有被重写过默认也是==;我们可以看到string等类的equals方法时被重写过的,而且String类在日常开发中用到的比较多,久而久之就形成了equals是比较值的错误观点。具体要看自定义类里面有没有重写object类的equals方法来判断。通常情况下,重写equals方法,会比较类中的相应数据是否都相等。pac.原创 2020-05-22 14:49:58 · 238 阅读 · 0 评论 -
Java语言基础-面向对象编程三步走之把大象放进去
面向对象编程进阶继承我们先定义两个类:package com.advan.inher;public class Person { String name; int age; public Person(){ } public Person(String name,int age){ this.name = name; this.age = age; } public void eat(){原创 2020-05-21 17:30:05 · 439 阅读 · 0 评论 -
Java语言基础-package、import关键字
packagepackage的翻译就是包。我们在完成一个Java工程时,肯定需要写大量的类,为了方便运用这些类肯定要创建大量的java文件,那么怎么来划分这些代码文件呢?毕竟应该没有人希望自己的工程内有数十个上百个零散文件。可以创建几个文件夹将他们放起来呀,将功能类似的类放到一个文件夹中,这个文件夹就是包。package关键字的功能:为了更好的实现项目中类的管理,提供包的概念使用package声明类或接口所属的包,声明在源文件的首行包,属于标识符,遵循标识符的命名规则、规范(xxxyyyzz原创 2020-05-20 10:08:28 · 288 阅读 · 0 评论 -
Java语言基础-面向对象编程补充-对象数组
对象数组的概念如果一个数组中的元素是对象类型,则称该数组为对象数组。当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象。对象数组的定义和使用对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例化。对象数组的声明形式类名 对象数组名 [ ];内存空间对象数组名=new 类名[数组长度];//注意 :此处不是构造方法了可以将对象数组的声明和创建用一条语句来完成。例如:定义一个学生类对象数组,可以用下面的语句定义:Student stu[ ]=ne原创 2020-05-19 13:52:06 · 198 阅读 · 0 评论 -
Java语言基础-面向对象编程三步走之打开冰箱门
开头:何谓"面向对象"面向对象是一种编程思想。思想是一个很虚无缥缈的东西,但是它可以从一个人的具体行动中体现出来,如果说你坚持每天跑步,每天读书,做一些有益于身心健康的事情,那么可以说你有让自己更上进的思想。(白日梦是想,不是思想)思想是行动的原则,行动是思想的体现。编程是一种行动,编程思想是一种思想,可以说编程的原则是编程思想。然后最后来看"面向对象",他是一种编程思想,展开一下就是面向对象编程的原则是面向对象编程思想。OK,现在我们只要弄清楚什么是面向对象编程就弄懂什么是面向对象编程思想了原创 2020-05-13 11:21:49 · 575 阅读 · 0 评论 -
Java语言基础-从入门到入坟的开始之数组
基础概念数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。概述数据本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。数组的长度一旦确定,就不能修改。我们可以直接通过下标(或索引)的方式调用指定位置...原创 2020-05-06 17:07:19 · 158 阅读 · 0 评论 -
Java语言基础-图解流程控制加全套练习题(保姆级教学)
流程控制我们来想一个工厂的生产销售过程,从接单,物料的进厂,上线,加工过程1,加工过程2,加工过程3,包装,下线,出厂,进仓库,转运,售出。这是一整套的流程,而且每个阶段都是可以人为设置更改的,这就是人对这套流程的流程控制。例如在加工过程1中,只要符合规格的物料;在包装中,有的用红色包装,有的用蓝色包装;例如在加工过程3中,要重复进行三次等等。在整套流程中,每个环节按照顺序依次执行,这对应着程...原创 2020-05-03 20:39:55 · 588 阅读 · 0 评论 -
Java语言基础-运算符大礼包(加练习题)
算术运算符运算符运算范例结果+正号+33-符号-4-4+加3+47-减6-42*乘2*36/除6/23%取模(取余)7%52++自增,先运算后取值a=2;b=++aa=3;b=3++自增,先取值后运算a=2;b=a++a=3;b=2–自减,先运算后取值a=2;b...原创 2020-04-26 17:15:15 · 632 阅读 · 0 评论 -
Java语言基础-进制
关于进制所有数字在计算机底层都以二进制形式存在。对于整数,有四种表现方式:二进制(binary):0-1,满2进1,以0b或0B开头八进制(octal):0-7,满8进1,以数字0开头十进制(decimal):0-9,满10进1十六进制(hex):0-9及A-F,满16进1,以0x或0X开头,A-F不区分大小写、二进制八进制十进制十六进制1111...原创 2020-04-23 09:05:18 · 151 阅读 · 0 评论 -
Java语言基础-三分钟入门String
StringString是引用数据类型,又称字符串声明String类型时使用双引号""String类型可以和8种基础类型做运算,且运算只能是连接运算:+运算的结果仍然是String类型class StringTest { public static void main(String[] args) { String s1 = "hello wo...原创 2020-04-22 16:53:07 · 132 阅读 · 0 评论 -
Java语言基础-基础数据类型
数据类型总览Java的数据类型分为基本数据类型与引用数据类型。一共有8种基础数据类型,3种引用数据类型。这里有个要注意的地方是在Java内字符串String是一个类。英文名称中文名称长度(位)表数范围byte字节型8-128~127short短整型16-215~215-1int整型32-231~231-1(约21亿)long长整...原创 2020-04-22 15:55:20 · 140 阅读 · 0 评论