1.2 相关软件安装
IDEA: 官网下载 IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains
JDK:官网下载 Java Downloads | Oracle
这两个工具下载完毕后开始配置环境变量,具体参见这个视频 java环境变量的配置哔哩哔哩bilibili
1.3 基本语法
1.3.1 第一个程序 HelloWorld
public class demo1 { public static void main(String[] args) { System.out.println("HelloWorld"); } } 复制代码
注:main方法即程序入口
运行结果如下
1.3.2 单行注释与多行注释
java中注释类型 单行注释、多行注释、文档注释
单行注释和多行注释的作用
- 对程序进行解释说明,增强可读性,方便自己,方便别人
- 调试所写的代码
- 注释了的内容不参与编译,换句话说,编译以后生成的.class结尾的文件不包含注释掉的信息
- 文档注释的使用:注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档
- 多行注释不可以嵌套使用(如下所示)
1.3.3 第一个程序的总结
- 在一个java源文件中可以声明多个class,但是,只能最多有一个类声明为public,而且要求声明为public的类的雷鸣必须与源文件名相同
- 程序的入口是main()方法,格式是固定的
- 输出语句
System.out.println(换行)
System.out.print()(不换行)
- 每一句执行语句都以“ ;”结束
1.3.4 java关键字和保留字
1.3.5 标识符的命名与规则
1.3.6 标识符
java对各种变量、方法和类等要素命名时使用的字符序列称为标识符
技巧:凡是可以自己起名字的地方都叫标识符
1.3.7 定义合法标识符规则
- 由26个英文字母大小写,0-9,_或$组成
- 数字不可以开头
- 不可以使用关键字或保留字,但能包含关键字和保留字
- java中严格区分大小写,长度无限制
- 标识符不能包含空格
1.3.8 定义合法标识符(练习)
1.3.9 Java中的名称命名规范
- 包名:多单词组成时所有字母都小写:xxxyyyzzz
- 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
- 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
1.3.10 变量
1.3.10.1 变量的概念
- 内存中的一个存储区域
- 该区域的数据可以在同一类型范围内不断变化
- 变量是程序中最基本的存储单元
1.3.10.2 变量的作用
用于在内存中保存数据
1.3.10.3 使用变量注意
- Java中每个变量必须先声明,后使用
public class Test { public static void main(String[] arg1s) { int myAge = 12; System.out.println(myAge); } }
- 使用变量名来访问这块区域的数据
- 变量的作用于:其定义所在的一对{}内
- 变量只有在其作用域内才生效
- 同一个作用于,不能定义重名的变量
public class Test { public static void main(String[] arg1s) { int myAge = 12; int myAge = 12; //编译报错 System.out.println(myAge); } }
1.3.11 Java定义的数据类型
1.3.11.1 基本数据类型
数值类型:byte short long int
浮点类型:float double
字符型:char
布尔型:boolean
1.3.11.2 引用数据类型
(字符串属于引用数据类型)
类:class 接口:interface 数组:[ ]
1.9.3 整数类型
- Java各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证java程序的可移植性
- Java的整形常量默认为int型,声明long型常量须后加“L”或“l”
1.3.12 变量在类中声明的位置
- byte范围:-128~127
public class Test { public static void main(String[] arg1s) { byte b1 = 128; //编译报错 byte b2 = -127; byte b3 = 127; } }
b3变量编译不通过
1.3.12.1 浮点类型
- 与整数类型相似,Java浮点类型也有固定的表述范围和字段长度,不受具体操作系统的影响
- 浮点型常量有两种表示方式
(1)十进制数形式,如:5.12 512.0f .512(必须有小数点)
(2)科学计数法形式表示,如:5.12e2 512E2 100E-2
float:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足要求
double:双精度,精度是float的两倍。通常采用此类型
Java浮点型常量默认为double型,声明为float型常量,须后加“f”或“F”
public class Test { public static void main(String[] arg1s) { float f1 = 12.4; //编译报错 System.out.println(f1); } }
(未以“f”或者“F”结尾)
1.3.12.2 字符型:char
①定义char型变量,通常使用 ‘ ’,内部只能写一个字符
public class Test { public static void main(String[] arg1s) { char b1 = 'a'; char b2 = 'ab'; //编译报错 } }
1.3.12.3 布尔类型:Boolean
- 只能取true和false其中一种
public class Test { public static void main(String[] arg1s) { boolean b1 = true; boolean b2 = false; } }
实例如下
public class Test { public static void main(String[] arg1s) { boolean isMarried = true; if (isMarried) { System.out.println("不可以参加"); } else { System.out.println("可以参加"); } } }
1.3.13 基本数据类型之间的运算规则
1.3.13.1 自动类型提升
byte → short → int → long → float → double
public class Test { public static void main(String[] arg1s) { byte b1 = 2 ; int i1 = 129 ; byte b2 = b1 + i1 ; //编译报错 int i2 = b1 + i1 ; long l1 = b1 + i1; System.out.println(i2); //131 float f = b1 + i1; System.out.println(f); //131.0 short s1 = 123; double d1 = s1; System.out.println(d1); //123.0 } }
1.3.13.2 强制类型转换
(说明:此时容量大小指的是:数的范围的大和小)
public class Test { public static void main(String[] arg1s) { char c1 = 'a'; int i3 = 10; int i4 = c1 + i3; System.out.println(i4); //107 short s3 = c1+ s2 ; //编译报错 byte b2 = 10 ; char c3 = c1 + b2 ; //编译报错 } }
当byte、char、short三种类型的变量做运算时,结果为int型
1.3.13.3 强制类型转换注意事项
(1)需要使用强转符
(2)强制类型转换,可能导致精度损失
1.3.14 String与8种基本数据类型间的运算
(1)String
属于引用数据类型,即为字符串
(2)声明String
类型变量时,使用一对 " "
(3)String
可以和8种基本数据类型变量做运算,且运算只能是连接运算
(4)运算的结果仍然是String
类型
String s = 34234; //编译错误 String s1 = "23434"; int i = (int)s1; //编译错误
1.3.15 进制
1.3.15.1 二进制
只有0和1用来表示二进制,满2进1,以0b或0B开头
1.3.15.2 二进制的使用说明
(1)计算机底层的存储方式:所有数字在计算机底层都以二进制形式存在
(2)二进制数据的存储方式:所有的数值,不管正负,底层都以补码的方式存储
1.3.15.3 八进制
用0~7来表示八进制,满8进1,以数字0开头
1.3.15.4 十进制
用0~9来表示十进制,满10进1,以数字0开头
1.3.15.5 十六进制
用数字09及字母AF来表示十六进制,满16进1,以0x或0X开头,此处A~F不区分大小写
1.3.16 源码、反码、补码
(1)正数的源码、反码、补码都是一样的
(2)负数
① 源码:将给定的数值转成二进制数,最高位是符号位
② 反码:将源码按位取反,符号位变号
③ 补码:反码 + 1
1.3.17 运算符
1.3.17.1 算术运算符
+ - / % (前)++ (后)++ (前)-- (后)--
int num1 = 12; int num2 = 5; int result1 = num1 / num2; System.out.println(result1); //2
上方结果解释:此处不得2.4的原因即为int是整数类型,整数类型之间的运算只会得出整数,小数会自动舍弃
int m1 = 12; int n1 = 5; System.out.println("m1 % n1 = " + m1 % n1); //2
上方结果解释:此处不得2.4的原因即为%代表区域,12 / 5 这一表达式商2余2,此处的2表示余数
int m2 = -12; int n2 = 5; System.out.println("m2 % n2 = " + m2 % n2); // -2
上方结果解释:符号看被除数
int m3 = 12; int n3 = -5; System.out.println("m3 % n3 = " + m3 % n3);
上方结果解释:符号看被除数
int m4 = -12; int n4 = -5; System.out.println("m4 % n4 = " + m4 % n4);
上方结果解释:符号看被除数
int a1 = 10; int b1 = ++a1; System.out.println("a1 = " + a1 + ",b1 = " + b1); // a1 = 11 b1 = 11
++a1
主要进行的操作是先自增后赋值,故a1
的值先变成11赋给b1
,此时b1
的值为11,a1
经过自增后也是11
int a2 = 10; int b2 = a2++; System.out.println("a2 = " + a2 + ",b2 = " + b2); // a2 = 11 b2 = 10
a2++
主要进行的操作是先赋值后自增,先把a2=10
这一条件给予b2
,此时b2
的值为10,a2
在赋值操作完成之后,进行自增操作变为11
1.3.17.2 赋值运算符
= += -= *= /= %=
int i2,j2; i2 = j2 = 10; int i3 = 10,j3 = 20; int num1 = 10; num1 += 2; //num1 = num1 + 2; System.out.println(num1);//12
上方代码详解
(1)代码第一行定义i2
和j2
两个变量,代码第三行定义i3
和j3
两个变量,第五行定义变量num1
,令其值为10
(2)代码第二行将10赋值给i2
和j2
(3)代码第五行执行+=
的操作,将num1
的值自增2,故此时num1
的值为12
int num2 = 12; num2 %= 5;//num2 = num2 % 5; System.out.println(num2); // 2
上方代码详解
(1)代码第一行定义一个变量num2
,并将12赋值给它
(2)代码第二行进行赋值运算操作,12 % 5 = 2
,故答案为2
short s1 = 10; s1 = s1 + 2; //编译失败 s1 += 2; System.out.println(s1);
赋值操作不会改变变量本身的数据类型
1.3.17.3 比较运算符
int i = 10; int j = 20; System.out.println(i == j);//false System.out.println(i = j);//20 boolean b1 = true; boolean b2 = false; System.out.println(b2 == b1);//false System.out.println(b2 = b1);//true