前言:java是一个纯面向对象的开发语言。面向对象开发其实就是从显示生活中类比而来, 更符合我们人类的思维模式,我们学习java一定要多类比现实生活。(e·g·我们每个【人】都是【人类】这个【类】的对象。)
1.初识 “Hello World !”
//创建类
public class Day_1 {
//“类体”,不允许直接编写Java语句,除声明变量外[e.g. int size = 0;]
public static void main(String[] args){
//“方法体”
//Java语句
System.out.println("Hello World !");
}
}
代码解释:
在java开发中,一切皆对象,所有方法和属性都必须 "包" 在【类】之中,且必须在类中定义变量和方法。
[public] 表示权限是公开的,可以随意访问
像上面代码中 [class] 就是一个【类】
首行中 [public class] 为主类,一个源文件中只能存在一个 [public class]
[Day_1] 为该主类的名称 ,该类名称必须与源文件名保持一致
[static] 是一个关键字,在java中代表【静态】,静态方法在被调用执行过程中都会首先加载,一次运行只加载一次
[void] 是一个关键字,在java中代表 【空】 ,修饰的这个方法时没有返回值 (return)
[main] 则是一个程序的入口,是这个程序启动的钥匙,也必须放在一个类中进行定义
(String[] args) 这个括号中是【字符串】数组,是 [main] 的形式参数列表,表示在运行这个主方法时,由程序外部传入一些调用该方法的信息。
[System.out.println] 这里则是调用了java中的打印命令 ( [print] 后面加了 [ln] 则是换行打印 )
”Hello World“ 中双引号为【半角】的英文符号,程序源代码中只能使用英文半角标点符号,Java中所有的【字符串】都用 “ ” 双引号括起来
java语句必须以 “ ; ” 分号结束
2.变量和类型
2.1变量
1. 变量指的是程序运行时【可变】的量,相当于开辟一块内存空间来保存的一些数据
int a = 10;//其中 [a] 就是一个变量
a = 20;//将 [a] 重新赋值为"20"
[int] 表示它的类型被锁定为整型,[a] 虽然可以重新被赋值,但依然只能用整型。
2.变量作用域:在java中,大括号 {} 会限定变量的作用范围
public class Test {
public static void main(String[] args) {
int i = 2022;
System.out.println(i); //编译成功
}
System.out.println(i); //编译失败,找不到变量 i
}
上图中,编译器显示第6行报错,因为 [i] 变量只有在第二个大括号中被定义,出了这个大括号则无法再被找到。
变量有着严格的命名规则:
1.变量只能使用包含数字、字母、下划线、美元符号
2.变量名不能以数字开头,不能使用空格
3.变量名严格区分大小写,[index] 和 [Index] 是两个完全不同的变量
4.变量名不能使用java中的【关键字】
5.变量名允许使用中文和美元符号 [$] ,但强烈不推荐这么做
变量名应注意:
1.要能表达该变量的具体意义
2.变量名不宜使用拼音
3. [studentName] 存在多个单词时,变量名推荐使用小驼峰命名法,首字母小写, 其他单词首字母大写
2.2 类型
类型通常指【数据类型】,是对变量的种类进行了划分,不同类型的变量具有不同的特性。
【数据类型】主要分为【基本数据类型】和【引用数据类型】,目前阶段主要接触的是【基本数据类型】,在基本数据类型中又分为【整型】,【字符型】和【布尔型】。
字节类型 | 关键字 | 取值范围 | 占用空间 | 默认值 |
---|---|---|---|---|
字节类型 | byte | [-128 ~ 127] | 1字节 | 0 |
短整型 | short | [-32768 ~ 32767] | 2字节 | 0 |
整型 | int | [-2^31 ~ 2^31 - 1] | 4字节 | 0 |
长整型 | long | [-2^63 ~ 2^63 - 1] | 8字节 | 0L |
单精度浮点型 | float | [1.4E - 45 ~ 3.4028235E38] | 4字节 | 0.0f |
双精度浮点型 | double | [ 4.9E-324~1.7976931348623157E308] | 8字节 | 0.0 |
字符型 | char | [0 ~ 65535] | 2字节 | \u0000 |
布尔型 | boolean | [true , false] | --- | false |
注:
[short] 和 [char] 所表示的种类总数是一样的,只不过 [char] 可以表示更大的正整数,[char] 没有负数。
八种数据类型默认值基本向 [0] 看齐
java中 “ 整数型字面值 ” 被默认当做 [int] 类型来处理,要让这个 “ 整数型字面值 ”被当做 [long] 类型来处理,需要在 “ 整数型字面值 ” 后面添加 [l] 或 [L],建议使用大写的 [L]
java中 “ 整数型字面值 ” 有三种表达方式:
第一种方式:十进制 【是一种缺省默认的方式】 常用
第二种方式:八进制 【编写八进制 “ 整数型字面值 ” 需要以 [0] 开始】
第三种方式:十六进制 【在编写十六进制 “ 整数型字面值 ” 的时候需要以 [0x] 开始】
5.数值类型有严格的取值范围,超出此范围则会编译报错。
//short i = 32767; //编译通过
//short i = 32768;//编译报错
附.char类型:
转义字符 “ \”
转义字符出现在特殊字符之前,会将特殊字符砖换成普通字符。
\n 换行符
\t 制表符
\' 普通的单引号
\\ 普通的反斜杠
\" 普通的双引号
2.3 类型转换
1. 小容量向大容量转换,称为自动类型转换,"容量"从小到大排序:
byte < short < int < long < float < double < char
2. 浮点型不管占用多少字节,都比整数型 "容量" 大
3. [char] 和 [short] 可以表示种类数量相同,但是 [char] 可以取更大的正整数
4. 多种数据类型混合运算,先转换成容量最大的那种类型再做运算
5. 大容量转小容量可能会造成"精度损失",这里涉及计算机底层编码的原码和补码
6. 当一个整数没有超出 [byte、short、chat] 的取值范围时,这个字面值可以直接赋值给 [byte、 short、chat] 类型的变量。这种机制是为了方便编程。
7. [double] 类型转 [float] 类型需要在后面加 [f] ,或者进行强制类型转换
// double i = 4.3; //小数默认都是 [double] 类型
// float i = (float)4.3; //强制类型转换
// float i = 4.3f; //没有类型转换
1. 自动类型转换
// int 类型字面值 2022 赋值给 long 类型的变量 x,存在类型转换
// int 类型转换为 long 类型,int 是小容量, long 是大容量,小转大被称为 "自动类型转换机制"
long x = 2022;
2. 超出容量报错
//2147483648被当做int类型4个字节处理,但是这个字面值超过int类型范围
int x = 2147483648; //编译错误:过大的整数:2147483648
//需转换为
long x = 2147483648;
3. 强制转换精度损失原理
//原始数据:00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000
//强转后数据:10000000 00000000 00000000 00000000
//强转后的数据储存在计算机内部,计算机储存数据都是采用补码形式存储
//10000000 00000000 00000000 00000000现在是一个补码形式
//将以上补码转换到原码就是最终结果
long a = 2147483648L;
int b = (int)a; //损失精度严重,结果是负数 [-2147483648]
4. 整型与浮点型之间的丢失精度
int a = 5;
double b = 10.5;
a = b; //b赋值给a,提示会丢失精度
b = a; //a赋值给b,编译通过
5. 整型与浮点型之间的转换
int a = 2022;
double b = 2011.1;
a = (int) b; // b可以正常赋值给a
2.4 运算符
1、算术运算符
主要在需要进行赋值运算时使用
+ 求和
- 相减
* 乘积
/ 商
% 求余数【取模】 12/10...2,x = 2
++ 自增【自动加一】 i++,先做赋值运算再加一;++i,先加一再做赋值运算
-- 自减【自动减一】 i--,先做赋值运算再减一;--i,先减一在做赋值运算
一个表达式有多个运算符,运算符有优先级,不确定的加小括号,优先级提升
2、关系运算符
主要在需要进行判断时使用
> 大于
>= 大于等于
< 小于
<= 小于等于
== 等于(相同)
!= 不等于
1. 区分 := 是赋值运算符,==是关系运算符
int a = 10; // 给a赋予值为10 ,结果为 a = 10
if(a == 10); //判断a是否等于10,结果为 true / false
2. 关系运算符运算结果一定是布尔类型:true/false
3、逻辑运算符
主要在需要进行判断时使用
& 逻辑 与 【并且】 (两边的算子都是true ,结果才是 true)
| 逻辑 或 【或者】 (两边的算子只要有一个true,结果就是true)
! 逻辑 非 (取反,!false 就是 true,!true 就是 false, 单目运算符)
^ 逻辑 异 (两边的算子只要不一样,结果就是true)
&& 短路 与
|| 短路 或
逻辑运算符要求两边的算子都是布尔类型 (判断 “是” 或 “否” ),其运算结果也是一个布尔类型。
“ 短路 ”与 “ 逻辑 ” 最终的运算结果都是相同的,只不过 “ 短路 ” 运算存在 “ 短路 ” 现象
“ 短路 ” 现象就是前者已经完成判断的情况下,后者已不需要再进行判断
e.g. if( i < 1 && i > index),若条件为 int i = 0 ,则前者已经满足条件返回true,直接跳过后者判断进入 if 语句中。
3.关键字
各种类名,方法名,变量名都不可以使用的单词!关键字对于编译器有特殊含义,不能当做一般标识符使用。
数据类型 | boolean、int、long、short、byte、float、double、char、class、interface |
流程控制 | if、else、do、while、for、switch、case、default、break、continue、return、try、catch、finally |
修饰符 | public、protected、private、final、void、static、strict、abstract、transient、synchronized、volatile、native |
动作 | package、import、throw、throws、extends、implements、this、supper、instanceof、new |
保留字 | true、false、null、goto、const |
注意:Java区分大小写,public是关键字,而Public则不是关键字,为了程序的可读性,尽量避免使用关键字来命名。