简介 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发,并在 1995 年正式推出。
后来 Sun 公司被 Oracle (甲骨文)公司收购,Java 也随之成为 Oracle 公司的产品。
参考资料 IDEA Mac快捷键
IDEA 快捷键
编辑
末尾添加分号:command+shift+enter
向下插入空行:shift+enter
向上插入空行:command+enter
向下复制当前行:command+d
删除当前行:command+x
批量编辑:option+拖动鼠标左键
向上移动一行:shift+option+UP
向下移动一行:shift+option+Down
格式化代码:command+option+l
运行当前类:Control+shift+r
调试部分、编译
报错 IDEA 工具报错 git 提交或拉取代码 443
1 2 3 4 5 6 7 8 git config --global --unset http.proxy git config --global --unset https.proxy ssh -T -p 443 git@ssh.github.com Host github.com Hostname ssh.github.com Port 443 User git
Java 简介 Java 简介 ①Java是一门面向对象的通用程序设计语言 ②不依赖特定平台,Write Once,Run Anywhere ③Java一般用作web系统开发,尤其是大型企业级项目 ④编译型和解释型语言,先编译然后在机器上进行解释 ⑤用Java开发的系统的特点:跨平台,安全性高 ⑥Java是一门面向高薪编程的语言
Java 与 Python 的区别
Java 是一个编译型和解释型的语言,先编译后解释,Python 是一个解释型语言性能相对 Java 要低(据说 Java 比 python 快 3 倍)
Java 是强数据类型,必须要指定数据类型,Python 是可以不定义数据类型
Java 环境校验 需要本地安装 JDK(本系列以 1.8 为例)
编译和解释 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class HelloWord { public static void main (String[] args) { System.out.print("HelloWord" ); } } class Student { public static void main (String[] args) { System.out.print("Hello 阿达" ); } }
Java 程序结构
Java程序由类构成
一个源程序可以包含多个类定义,最多包含一个public类定义
如果包含了public类定义,文件名必须和public类名保持一致
如果源程序无public类,则可选择任意一个类的名称(推荐)或者一个其他的名称作为文件名
对Java应用程序来说,必须在其中的一个类中定义有main()方法,包含main()方法的类是该应用程序的主类
Java语句包含关键字
、标识符
、运算符
和分隔符
等元素。这些元素有着不同的语法含义和组成规则,,它们互相配合,共同组成Java的语句
标识符
什么是标识符
Java 中变量、类、方法的名称就叫做标识符
标识符就是自己定义的名称
标识符的命名规则
以字母、下划线或者$符号开头(不要以数字开头或关键字)
后面的字符可以包含字母、数字、下划线和$符号
遵循大驼峰&小驼峰的命名规范(尽量采用类名采用大驼峰、方法和变量采用小驼峰命名规范)
Java 严格区分字母大小写
分隔符
分隔符
分割符用来区分源程序中的基本成分,可以使编译器确认代码在何处进行分割
分割符有注释符
空白符
普通分割符
注释符
注释是为了提高程序的可读性、可理解性
注释仅用于阅读源程序,编译时会忽略所有注释
注释符:// 单行注释 /* / 多行代码注释 / * */ 文档注释
空白符
空白符包括空格
回车
换行
制表符(Tab)
等符号
作为程序中各基本成分之间的分割符
各基本成分可以有一个或者多个分隔符
系统编译时空白符同注释一样,最后会被忽略
普通分割符
用于区分程序中的各种基本成分
普通分隔符不能忽略
,在程序中有确切的含义
常见的普通分割符
. 点:用于分割包、类、引用变量中的变量和方法
; 分号:语句结束标志
: 冒号:说明语句符号
{} 大括号:定义类体、方法体、复合语句和数组初始化
[] 方括号:定义数组类型、引用数字的元素值
() 小括号:方法定义、方法访问中将参数括起来,或表达式中定义运算先后次序
变量 概念
变量就是用来存储数据的,一个变量在程序中为一个标识符,在内存中是一块空间,提供了信息和数据临时存放的地方,具有记忆数据的功能
变量是可以被改变的,命名通常用小写字母开头的单词,驼峰命名方式
变量的三个元素:名称、类型和值
变量声明
在 Java 中存储一个数据,必须将其保存在一个变量中,变量在使用前必须有定义,即有确定的类型
和名称
定义一个X变量,并赋值 4 给它:在数学中为 x=4
此处 int 是变量类型,在 Java 这门语言中任何数据都是有类型的,所以变量前面需要声明变量的类型
上面这条语句告诉编译器给定义的数据类型和变量名建立一个变量
变量分类 基本数据类型变量
Java 中有八大基本数据类型,按照类型来可以分成四类八种
注意事项:整型的字面值默认是int类型
,声明 long 类型时后面加 L/l,浮点型的字面值默认是double类型
声明 float 类型时后面加 F/f
在同一个作用于中不能有相同的变量名,遵循小驼峰命名规则
类别
数据类型
名称
字节
位长
缺省值
取值范围
举例说明
布尔型
布尔型
boolean
1
1
false
true、false
boolean b = true;
整型(整数)
字节型
byte
1
8
0
-2^7 - 2^7-1
byte aByte = 10;
~
短整型
short
2
16
0
-2^15 - 2^15-1
short aShort = 10;
~
整形
int
4
32
0
-2^31 - 2^31-1
int aInt = 1000;
~
长整形
long
8
64
0
-2^63 - 2^63-1
long aLong = 10L;
字符型
字符型
char
4
32
‘\u0000’
‘\u0000’~’\uffff’
char aChar = ‘c’;
浮点型(小数)
单精度
float
4
32
0.0
-2^31 - 2^31-1
float aFloat = 10.0F;
~
双精度
double
8
64
0.0
-2^63 - 2^63-1
double aDouble = 10.0;
引用数据类型变量
引用类型(复合类型)的变量它就是指的一个内存地址,一个位置信息(相当于门牌号)
只想的内存中保存着变量所表示的一个值或一组值
引用数据类型分类
数组
类(类类型如String或自定义的类)
接口
枚举
常用数据类型 类
类(类类型如String或自定义的类)
所有引用类型的默认值都是为 null 如果不初始化去引用就会报空指针异常
语法:
1 2 String aString = "helloword" ;
字符串类型的变量一般用来存储一串文字信息
字符串可以跟任意类型的数据进行拼接得到新的字符串,拼接符号为【+】例:”hello”+”word” 、”hello”+666
数组
概念:①数组是一种数据结构,它是一个容器,用来盛放数据 ②不同类型的数组可以盛放不同的数据类型
特点:①数组属于引用数据类型,使用的时候需要new 开辟内存空间
的 ②数组的容量是确定的,也就是说在定义数组的时候必须指定数组的大小 ③数组的类型是确定的,也就是在定义数组的时候必须声明数组的类型,一种类型的数组只能放一种类型的数据
分类:一维数组,二维数组(Java 中没有二维数组的概念,是从 C中吸取的所以也这么叫了)
语法:
1 2 3 4 int ages[] = new int [65 ];int [] ages2[] = new int [65 ];
1 2 3 4 5 6 7 int [] ages3 = null ;ages3 = new int [50 ];
1 2 int [] myArr = {0 ,1 ,2 ,3 ,4 };
二维数组:二维数组是一个特殊的一维数组,里面的元素还是一个一维数组,二维数组可以不声明第二维度的长度
运算符 运算符顺序
运算顺序
注意事项
同一优先级运算符顺序为从左至右
运算复杂的时候要一步步拆解运算
建议
不要把一个表达式写的过于复杂,可以分布来写
少使用优先级,可读性差
多使用()来控制运算顺序
算数运算符 双目运算符
算数运算符:双目运算符 单目运算符 三目运算符
一般的双目算数运算符有: + - * / *(取模)
单目运算符
一般的单目运算符有:++ –
单目运算符,操作数在左边先使用操作数,操作数在右边先运算
三目运算符
关系运算符
关系运算符又叫比较运算符
> < == != >= <=
逻辑运算符 示例
&(逻辑与)
&&(短路与)
|(逻辑或)
||(短路或)
!(逻辑非,取反)
两种写法的结果一致
&和&&的区别在于短路与
中,当前面的计算就能得到结果时就不会执行后面的逻辑运算,|和||同理
& && 当两个同时满足结果才为真 | ||当有一个条件满足结果就为真
应用场景 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package com.tester.ada.operational;public class LogicOperatorTester { public static void main (String[] args) { String phone = "13888888888" ; String pwd = "123456" ; if (phone.length() == 11 && pwd.length() == 6 ){ System.out.println("短路与——>登录成功" ); }else { System.out.println("短路与——>账户信息错误" ); } if (phone.length() != 11 || pwd.length() != 6 ){ System.out.println("短路或——>账户信息错误" ); }else { System.out.println("短路或——>登录成功" ); } } }
赋值运算符
等于
扩展的赋值运算符:+= -= *= /= %=
其它运算符 循环控制结构 常见的循环控制结构
任何变成语言的循环控制代码基本都是一样的
循环语句
在满足循环条件(布尔表达式)的情况下,反复的执行某段代码(循环体)
循环语句构成
初始化语句:初始化工作,在循环开始前执行
循环条件:布尔表达式,决定否是执行循环体
循环体:循环条件为真时执行的代码块
迭代语句:每次循环结束后,循环条件的变量,在核实的时候把循环条件设置为假,保证循环可以结束,从而避免死循环
while 与 do…while 比较
区别
do…while…:先执行循环体,然后再判断循环条件,如果循环条件为真,进行下一次循环,否则终止循环,因此循环体里的代码至少执行一次,因为不管条件满不满足,它是先执行判断条件
while:先判断条件,条件为真才执行循环体
注意
do…while…:循环的循环条件必须有一个分号,表示循环结束
while语法
while示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package com.tester.ada.loopControl;public class WhileTester { public static void main (String[] args) { int a = 1 ; while (a <= 100 ) { System.out.println(a); a++; } } }
do…while…语法
do…while…示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package com.tester.ada.loopControl;public class DoWhileTester { public static void main (String[] args) { int a = 1 ; do { System.out.println(a); a++; } while (a <= 100 ); } }
for 循环 简介
for 循环是更为简介的循环语句
执行 for 循环时,先执行初始化语句(只执行一次)
执行循环体之前,先计算循环条件的值,如果为真,执行循环体
执行循环体结束,再执行迭代条件
for 循环的判断条件比循环体多执行一次
基本语法
1 2 3 for (int i = 1 ; i<=10 ; i++){ System.out.println(i); }
语法解释
i 代表循环开始的值
第二个表达式“i <= 10”代表的是循环下去的条件,只有满足条件,循环才会继续下去
i++ 代表走完一次循环,所以 i 要自增,避免死循环
三个表达式之间用“;”号来进行分割
普通 for 循环 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 package com.tester.ada.loopControl;public class ForLoopTesterBase { public static void main (String[] args) { System.out.println("------------------------用 for 循环求 1-100 的和------------------------" ); int sum = 0 ; for (int i = 1 ; i <= 100 ; i++) { sum = sum + i; System.out.println("当i为【" + i + "】时,sum则为【" + sum + "】" ); } System.out.println("------------------------用 while 循环求 1-100 的和------------------------" ); int a = 1 ; int sum2 = 0 ; while (a <= 100 ) { sum2 = sum2 + a; System.out.println("当a为【" + a + "】时,sum2则为【" + sum2 + "】" ); a++; } } }
增强 for 循环 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 package com.tester.ada.loopControl;import java.util.*;public class ForLoopTester { public static void main (String[] args) { for (int a = 0 ; a <= 1000 ; a++) { System.out.println(a); } String[][] allNames = { {"ada1" , "test1" , "base1" }, {"ada2" , "test2" , "base2" , "git2" }, {"ada3" , "test3" , "base3" } }; for (int i = 0 ; i < allNames.length; i++) { String[] names = allNames[i]; for (int j = 0 ; j < names.length; j++) { String name = names[j]; System.out.println("数组allNames【" + i + "】【" + j + "】的值为“" + name + "”" ); } } for (String[] className : allNames ) { for (String name : className ) { System.out.println(name); } } Map<String, Integer> items = new HashMap <>(); items.put("test1" , 100 ); items.put("test2" , 200 ); items.put("test3" , 300 ); items.forEach((k, v) -> System.out.println("Key1: " + k + " Value1: " + v)); items.forEach((k, v) -> { System.out.println("Key2: " + k + " Value2: " + v); if ("test2" .equals(k)) { System.out.println(v); } }); List<String> alist = new ArrayList <>(); alist.add("ada1" ); alist.add("ada2" ); alist.add("ada3" ); alist.add("ada4" ); alist.forEach(item -> System.out.println(item)); alist.forEach(System.out::println); Integer[] integers = {1 , 2 , 3 }; Arrays.asList(integers).forEach(integer -> System.out.println(integer)); } }
三种循环比较
do while 循环次数 = 判断次数
while 循环次数 = 判断次数-1
for 循环次数 = 判断次数-1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 package com.tester.ada.loopControl;public class CompareTester { public static void main (String[] args) { int a = 500 ; do { System.out.println(a); a++; } while (a <= 100 ); int b = 200 ; while (b <= 100 ) { System.out.println(a); b++; } for (int i = 150 ; i <=100 ; i++) { System.out.println(i); } } }
continue关键字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 package com.tester.ada.loopControl;public class ConitueTester { public static void main (String[] args) { System.out.println("------------------------用 for 循环求 1-100 所有奇数的和------------------------" ); int sum = 0 ; for (int i = 1 ; i <= 100 ; i++) { if (i % 2 == 1 ) { sum = sum + i; System.out.println("当i为【" + i + "】时,sum则为【" + sum + "】" ); } } System.out.println("------------------------用 while 循环求 1-100 所有奇数的和------------------------" ); int a = 1 ; int aSum = 0 ; while (a <= 100 ) { if (a % 2 == 1 ) { aSum = aSum + a; System.out.println("当a为【" + a + "】时,aSum则为【" + aSum + "】" ); } a++; } System.out.println("------------------------用 for 循环求 1-100 的和,如果是偶数跳过------------------------" ); int sum2 = 0 ; for (int j = 1 ; j <= 100 ; j++) { if (j % 2 == 0 ) { continue ; } sum2 = sum2 + j; System.out.println("当j为【" + j + "】时,sum2则为【" + sum2 + "】" ); } System.out.println("------------------------用 while 循环求 1-100 的和,如果是偶数跳过------------------------" ); int k = 1 ; int kSum = 0 ; while (k<=100 ){ if (k%2 ==0 ){ k++; continue ; } kSum=kSum+k; System.out.println("当K为【" + k + "】时,kSum2则为【" + kSum + "】" ); k++; } } }
break关键字
break循环控制语句, 跳出整个循环(结束整个循环)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package com.tester.ada.loopControl;public class BreakTester { public static void main (String[] args) { int sum = 0 ; for (int i = 1 ; i <= 100 ; i++) { if (i == 55 ) { break ; } sum = sum + i; System.out.println("当i为【" + i + "】时,sum则为【" + sum + "】" ); } int a = 1 ; int aSum = 0 ; while (a <= 100 ) { if (a == 55 ) { break ; } aSum = aSum + a; System.out.println("当a为【" + a + "】时,aSum则为【" + aSum + "】" ); a++; } } }
条件控制
常见的条件控制语句
1 2 3 4 5 if (条件1 ){ }else if (条件2 ){ }
1 2 3 4 5 6 7 if (条件1 ){ }else if (条件2 ){ }else { }
switch 语句
switch有轮换
的意思,针对 switch 里的变量a去匹配所有的 case 值,若匹配则执行相关 case 下的代码逻辑
case 代表一种情形
“:” 冒号表示若复合此种情形,后面就要执行的代码
break 有打破的意思,这里表述不再往下执行
default 表示若前面的 case 都没有满足条件,将要执行这里的代码
注意事项
switch 语句能够接受的变量类型时有限的,case 常用参数类型为:char
byte
short
int
String
enum
1 2 3 4 5 6 7 8 9 10 11 switch (变量a){ case A: break ; case A: break ; default : break ; }
1 2 3 4 5 6 int adaAge = 20 ;int linkAge = 20 ;String result = adaAge > linkAge ? "1.ada是 link 的大哥" : "2.ada 不是 link 的大哥 " ;System.out.println(result);
if 语法
注意事项 if…else if…else…代码块中至少有一个并且只能有一个 if,可以有多个或零个else if 最多有一个 else 或者零个
语句中只会进入一个分支满足执行完后就会跳出代码块,如示例中的 adaAge > linkAge if 和 else if 都满足,第一个满足后执行完就会跳出整个分支代码块
语法中的条件表达式可以用 & && | || 进行多个条件组合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package com.tester.ada.conditionalControl;public class IfConditionalTester { public static void main (String[] args) { int adaAge = 20 ; int linkAge = 18 ; if (adaAge > linkAge) { System.out.println("1.ada 是 link 的大哥" ); } else if (adaAge > linkAge) { System.out.println("2.ada 是 link 的大哥" ); } else if (linkAge > adaAge) { System.out.println("3.ada 是 link 的大哥" ); } else { System.out.println("4.ada 和 link 同岁" ); } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 package com.tester.ada.conditionalControl;public class IfConditionalTester2 { public static void main (String[] args) { int dayInt = 3 ; if (dayInt == 1 ) { System.out.println("今天是星期一" ); } else if (dayInt == 2 ) { System.out.println("今天是星期二" ); } else if (dayInt == 3 ) { System.out.println("今天是星期三" ); } else if (dayInt == 4 ) { System.out.println("今天是星期四" ); } else if (dayInt == 5 ) { System.out.println("今天是星期五" ); } else if (dayInt == 6 ) { System.out.println("今天是星期六" ); } else if (dayInt == 7 ) { System.out.println("今天是星期天" ); } else { System.out.println("数值不在范围内" ); } } }
switch 语法 switch 语法一 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 package com.tester.ada.conditionalControl;public class SwitchConditionalTester { public static void main (String[] args) { int day = 6 ; switch (day) { case 1 : System.out.println("今天是星期一" ); break ; case 2 : System.out.println("今天是星期二" ); break ; case 3 : System.out.println("今天是星期三" ); break ; case 4 : System.out.println("今天是星期四" ); break ; case 5 : System.out.println("今天是星期五" ); break ; case 6 : System.out.println("今天是星期六" ); break ; case 7 : System.out.println("今天是星期天" ); break ; default : System.out.println("数值不在范围内" ); } } }
switch 语法二 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package com.tester.ada.conditionalControl;public class SwitchConditionalTester { public static void main (String[] args) { int day = 5 ; switch (day) { case 1 : case 2 : case 3 : case 4 : case 5 : System.out.println("今天是工作日" ); break ; case 6 : case 7 : System.out.println("今天是休息日" ); break ; default : System.out.println("数值不在范围内" ); } } }
case 穿透 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 package com.tester.ada.conditionalControl;public class SwitchConditionalTester3 { public static void main (String[] args) { int day = 2 ; switch (day) { case 1 : System.out.println("今天是星期一" ); break ; case 2 : System.out.println("今天是星期二" ); case 3 : System.out.println("今天是星期三" ); case 4 : System.out.println("今天是星期四" ); case 5 : System.out.println("今天是星期五" ); case 6 : System.out.println("今天是星期六" ); break ; case 7 : System.out.println("今天是星期天" ); break ; default : System.out.println("数值不在范围内" ); } } }
三目运算符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package com.tester.ada.conditionalControl;public class ternaryOperatorTester { public static void main (String[] args) { int adaAge = 20 ; int linkAge = 20 ; String result = adaAge > linkAge ? "1.ada是 link 的大哥" : "2.ada 不是 link 的大哥 " ; System.out.println(result); } }
变量的定义 变量的分类
变量定义及范围 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 package com.tester.ada.variable;import java.util.stream.BaseStream;public class VariableTester { static String aStr = "类中的静态全局变量" ; String dStr = "类中的全局变量" ; public static void main (String[] args) { String bStr = "main方法中的局部变量" ; System.out.println(bStr); System.out.println(aStr); System.out.println(cStr); System.out.println(dStr); } public void myFunction () { String cStr = "myFunction 中的局部变量" ; System.out.println(cStr); System.out.println(bStr); System.out.println(aStr); System.out.println(dStr); } }