꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱
ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶
系列专栏:xiaoxie的JAVA系列专栏——CSDN博客●'ᴗ'σσணღ*
我的目标:"团团等我💪( ◡̀_◡́ ҂)"
( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝+关注(互三必回)!
本文将会系统的详细的介绍关于JAVASE的所有内容,里面也会掺杂一些面试题,希望能够对同样在学习的Java的你带来帮助
一.初始Java
1.准备工作
首先我们在学习Java时需要提前准备好编译器,博主建议大家使用idea,最主要的原因就是它功能强大,很合适新手使用,但在使用之前我们需要提前准备好配置环境,在这里博主推荐博主之前总结好的教程初识JAVA-CSDN博客
2.Java的口号
“Write once, Run anywhere”,一次编译到处运行
3.JAVA的基础知识
JDK:JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
JRE:
Java运行环境(Java Runtime Environment,简称JRE)是一个软件,由太阳微系统所研发,JRE可以让计算机系统运行Java应用程序(Java Application)。
JRE的内部有一个Java虚拟机(Java Virtual Machine,JVM)以及一些标准的类别函数库(Class Library)。
JVM:
JVM即Java虚拟机,是一种抽象计算机,它有一个指令集,在运行时操作各种内存区域。
而它们三者的关系为下图
2.一些注意事项
1.注意:在一个源文件中只能有一个public修饰的类,而且源文件名字必须与public修饰的类名字相同。
2.一个文件里我们可以写多个类,一个类就对应着一个字节码文件
3.main函数有且只有一个
4.标识符
1.标识符中可以包含:字母、数字以及下划线和$符号等等。
2.命名规则
标识符不可以使用数字,关键字开头,并且大小写也要严格区分。
5.关键字
1.关键字有哪些
2.关键字的含义
关键字 |
含义 |
abstract |
表明类或者成员方法具有抽象属性 |
assert |
断言,用来进行程序调试 |
boolean |
基本数据类型之一,声明布尔类型的关键字 |
break |
提前跳出一个块 |
byte |
基本数据类型之一,字节类型 |
case |
用在switch语句之中,表示其中的一个分支 |
catch |
用在异常处理中,用来捕捉异常 |
char |
基本数据类型之一,字符类型 |
class |
声明一个类 |
const |
保留关键字,没有具体含义 |
continue |
回到一个块的开始处 |
default |
默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现 |
do |
用在do-while循环结构中 |
double |
基本数据类型之一,双精度浮点数类型 |
else |
用在条件语句中,表明当条件不成立时的分支 |
enum |
枚举 |
extends |
表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口 |
final |
用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量 |
finally |
用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
float |
基本数据类型之一,单精度浮点数类型 |
for |
一种循环结构的引导词 |
goto |
保留关键字,没有具体含义 |
if |
条件语句的引导词 |
implements |
表明一个类实现了给定的接口 |
import |
表明要访问指定的类或包 |
instanceof |
用来测试一个对象是否是指定类型的实例对象 |
int |
基本数据类型之一,整数类型 |
interface |
接口 |
long |
基本数据类型之一,长整数类型 |
native |
用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
new |
用来创建新实例对象 |
package |
包 |
private |
一种访问控制方式:私用模式 |
protected |
一种访问控制方式:保护模式 |
public |
一种访问控制方式:共用模式 |
return |
从成员方法中返回数据 |
short |
基本数据类型之一,短整数类型 |
static |
表明具有静态属性 |
strictfp |
用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范 |
super |
表明当前对象的父类型的引用或者父类型的构造方法 |
switch |
分支语句结构的引导词 |
synchronized |
表明一段代码需要同步执行 |
this |
指向当前实例对象的引用 |
throw |
抛出一个异常 |
throws |
声明在当前定义的成员方法中所有需要抛出的异常 |
transient |
声明不用序列化的成员域 |
try |
尝试一个可能抛出异常的程序块 |
void |
声明当前成员方法没有返回值 |
volatile |
表明两个或者多个变量必须同步地发生变化 |
while |
用在循环结构中 |
显示详细信息
3.关键字一律用小写字母标识,按其用途划分为如下几组。
(1)用于数据类型
用于数据类型的关键字有 boolean、byte、char、 double、 float、int、long、new、short、void、instanceof。
(2)用于语句
用于语句的关键字有break、case、 catch、 continue、 default 、do、 else、 for、 if、return、switch、try、 while、 finally、 throw、this、 super。
(3)用于修饰用于修饰的关键字
abstract、final、native、private、 protected、public、static、synchronized、transient、 volatile。
(4)用于方法、类、接口、包和异常。用于方法、类、接口、包和异常的关键字
class、 extends、 implements、interface、 package、import、throws。还有些关键字,如 future、 generic、 operator、 outer、rest、var等都是Java保留的没有意义的关键字。
[4]另外Java还有3个保留字
goto、const、null。它们不是关键字,而是文字。包含Java定义的值。和关键字一样,它们也不可以作为标识符使用。
4.说明
以上就是Java中的一些关键字,需要注意的是,这些关键字不需要刻意的去背诵它们,在之后的学习之中我们都会使用到他们,随着学习的深入我相信大家都会记住它们并且灵活的使用它们
二.数据类型与变量
1.八大基本数据类型
1.int
1.定义
使用最广泛的整数类型,占4个字节
2.包装类型
int的包装类型为Integer
3.取值范围
int的取值范围为 -2^31---(2^31)-1
2.byte
1.定义
用于处理文件和网络传输等字节级别的数据,占1个字节
2.包装类型
byte的包装类型为Byte
3.取值范围
byte的取值范围为 -128—127
3.short
1.定义
可以用于节约内存空间的需求,占2个字节
2.包装类型
short的包装类型为Short
3.取值范围
byte的取值范围为 -2^15----(2^15)-1
4.long
1.定义
用于处理需要较大值的整数计算,占8个字节
2.包装类型
long的包装类型为Long
3.取值范围
long的取值范围为 -2^63--(2^63)-1
5.float
1.定义
用于科学计算和需要高精度计算的场景,占4个字节
2.包装类型
float的包装类型为Float
3.取值范围
float的取值范围为 -2^31--(2^31)-1
6.double
1.定义
使用最广泛的浮点数类型,占8个字节
2.包装类型
double的包装类型为Double
3.取值范围
double的取值范围为 -2^63--(2^63)-1
7.char
1.定义
可以表示任何字符,占2个字节
2.包装类型
char的包装类型为Charzcter
3.取值范围
char的取值范围为 -2^15--(2^15)-1
8.boolean
1.定义
是一种只能取两个值(true或false)的数据类型,它主要用于条件判断和布尔运算
2.包装类型
boolean的包装类型为Boolean
3.取值范围
boolean的取值范围为只能为true或者是falase
2.基本数据类型之间的赋值和运算
1.例子
int a=10;
byte b=15;
b=a;
像上图,要把int类型的a赋值给byte类型的b,编译器会报错,不能把数据类型大的赋值给数据类型小的,如果是 a=b;那就可以。
2.强制类型转换
假如你想强行把a赋值给b,可以通过强制类型转换,但一般不建议用,因为可能会造成数据泄露
int a=10;
byte b=15;
b=(byte)a;
3.整形提升
int a=10;
byte b=15;
int c=a+b;
小于四个字节的数据会被提升成4个字节再运算
4.字符串类型
1.说明
在Java中并没有字符串的基本数据类型,只有字符串这个类,其中有包含许多库函数方法,十分简便,在这里就先不过多赘述,在之后的知识点中博主会为大家详细介绍
三.运算符和逻辑运算符
1.说明
关于运算符博主就不过的的叙述了,主要需要注意以下几个注意事项以及位运算符,和移位运算符就足够了
2.注意事项
- 除零错误:在进行除法运算时,需要注意被除数是否为零,以避免出现除零错误。
- 优先级:不同的运算符有不同的优先级,需要根据运算符的优先级来确定运算的顺序。
- 溢出:在进行运算时,需要注意运算结果是否会溢出,尤其是在使用整数进行运算时。
3.位运算符
1.什么是位运算符
位操作表示 按二进制位运算 . 计算机中都是使用二进制来表示数据的 (01 构成的序列 ), 按位运算就是在按照二进制位 的每一位依次进行计算。
2.位运算符有哪些
位运算符主要有四个 : & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符。
3.按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.
举例:
int a = 10; int b = 20; int c = a & b; c =0;
4.按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
举例:
int a = 10; int b = 20; int c = a|b; c = 30
5.按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
此运算符位一元运算符,博主就不举例说明,并且在之后的学习中,几乎不怎么使用
6..按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.
如果两个数相同,则异或的结果为 0
3.位移运算符
1.左移 <<: 最左侧位不要了, 最右侧补 0.
2.右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
3.无符号右移 >>>: 最右侧位不要了, 最左侧补 0
4.注意:
1. 左移 1 位 , 相当于原数字 * 2. 左移 N 位 , 相当于原数字 * 2 的 N 次方 .
2. 右移 1 位 , 相当于原数字 / 2. 右移 N 位 , 相当于原数字 / 2 的 N 次方 .
3. 由于计算机计算移位效率高于计算乘除 , 当某个代码正好乘除 2 的 N 次方的时候可以用移位运算代替 .
4. 移动负数位或者移位位数过大都没有意义 .
5.位移运算符和位运算符的妙用
写一个函数返回参数二进制中 1 的个数
比如: 15 0000 1111 4 个 1
public static void main(String[] args) { int a = 15; System.out.println(countOnes(num)); } public static int countOnes(int num) { int count = 0;//计数器 while(num != 0) { count += num & 1;// 检查最低位是否为1 num >>= 1;// 右移一位,继续检查下一位 } }
结果如下:
6.逻辑运算符
注意的地方
在逻辑运算符的表达式后面必须是布尔表达式,以及注意逻辑短路的问题
四.方法
1.什么方法
方法就是一个代码片段 . 类似于 C 语言中的 " 函数 " 。方法存在的意义 ( 不要背 , 重在体会 ):
1. 是能够模块化的组织代码 ( 当代码规模比较复杂的时候 ).
2. 做到代码被重复使用 , 一份代码可以在多个位置使用 .
3. 让代码更好理解更简单 .
4. 直接调用现有方法开发 , 不必重复造轮子 .
2.实参和形参的关系
Java 中方法的形参就相当于 sum 函数中的自变量 n ,用来接收 sum 函数在调用时传递的值的 。形参的名字可以随意
取,对方法都没有任何影响, 形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值 。
在 Java中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体,如果想要和c语言一样传的地址,就需要传引用类型参数,例如数组等等
3.递归
关于递归的知识点可以参考博主之前的博客一种艺术般的问题解决办法-----递归-CSDN博客在这里就不过多的赘述了,需要注意的一点是,要想熟练的使用递归还需要大家在平常的学习中多使用多感悟
五.数组
1.一维数组
数组(Array)是有序的元素序列。 [1] 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 [1] 这些有序排列的同类数据元素的集合称为数组。数组是用于储存多个相同类型数据的集合
1.下标
数组的下标是从0开始,使用下标可以访问数组里的元素
2.表示形式
和c/c++:int arry[]不同的是 Java的表示方式如上图。注意中括号中不可以写上任何数字
3.Java中使用导Arays包
和c/c++ 不同的是使用IDEAJava可以使用导Arrays包的方法简化很多关于数组中的一些常规操作现在博主就为大家总结以下几个常用的方法
1.遍历数组
import java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry = {1,5,9,6,7,9}; System.out.println(Arrays.toString(arry)); } }
输出结果如下
只需要Array.toString()就可以做到遍历数组的作用
2.排序数组
import java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry = {1,5,10,6,7,9}; Arrays.sort(arry); System.out.println(Arrays.toString(arry)); }
输出结果如下
只需要Array.sort()就可以做到排序数组的作用
3.指定的值填充数组的所有元素
import java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry = {1,5,10,6,7,9}; Arrays.fill(arry,1); System.out.println(Arrays.toString(arry)); } }
输出结果如下
Arrays.fill()的作用是用指定的值填充数组的所有元素。它接受四个参数:数组,要填充的元素,起始索引和结束索引。起始索引是要填充的起始位置,结束索引是要填充的结束位置(不包括结束位置)。如果不提供起始索引和结束索引,则默认填充整个数组。
如果我们需要填充到指定位置可以如下图
import java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry = {1,5,10,6,7,9}; Arrays.fill(arry,2,5,11);//参数分别为数组名,起始位置,终点位置,填充的元素 System.out.println(Arrays.toString(arry)); } }
输出结果如下
需要注意的一点是:起始位置到终点位置的下标是左闭右开的
4.二分查找法
这里也有博主之前整理的二分查找的模板二分查找之红蓝二分查找-CSDN博客
比如我们经常使用的二分查找法也可以通过Arrays类里的方法快速实现
import java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry = {1,2,3,4,5,6,7,8,9}; int k = 7; int ret = Arrays.binarySearch(arry,k); System.out.println(ret); } }
输出结果如下
5.复制指定的数组
import java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry1 = {1,2,3,4,5,6,7,8,9}; int[] arry2 = Arrays.copyOf(arry1,9);//参数为指定的数组名和数组长度 System.out.println("arry1 ="+Arrays.toString(arry1)); System.out.println("arry2 ="+Arrays.toString(arry2)); } }
输出结果如下
当然我们也可以指定输出数组的长度,可以复制不同长度的新数组,注意:如果指定的长度大于要复制的对象的数组长度,多出来的元素将会被赋初始值即“0”
如图:
mport java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry1 = {1,2,3,4,5,6,7,8,9}; int[] arry2 = Arrays.copyOf(arry1,13);//参数为指定的数组名和数组长度 System.out.println("arry1 ="+Arrays.toString(arry1)); System.out.println("arry2 ="+Arrays.toString(arry2)); } }
输出结果如下
6.说明
以上五个就是博主总结的一些常用的使用Arryas类的一些书写代码格式以及一些注意事项
一文让你深入了解JavaSE的知识点(下)
https://developer.aliyun.com/article/1496454?spm=a2c6h.13148508.setting.25.7a0d4f0eEgX0HD