Java学习笔记
1.常量的分类
字符串常量,整数常量,浮点数常量,字符常量,布尔常量,空常量(null)
2.基本数据类型
整数型:byte short int long
浮点型:float double
字符型:char
布尔型:boolean
java中默认的类型:整数类型是int 浮点类型是double
数据类型 | 关键子 | 内存占用 | 取值范围 |
---|---|---|---|
字节型 | bype | 1个字节 | -128~127b |
短整型 | short | 2个字节 | -128~127 |
整型 | int | 4个字节 | -231次方~2的31次方-1 |
长整型 | long | 8个字节 | -2的63次方~2的63次方-1 |
单精度浮点型 | float | 4个字节 | 1.4013E-45~3.4028E+38 |
双精度浮点型 | double | 8个字节 | 4.9E-324~1.7977E+308 |
字符型 | char | 2个字节 | 0-65535 |
布尔类型 | boolean | 1个字节 | true false |
3.引用数据类型(今后学习再补充)
字符串,数组,类,接口,Lambda。
注意事项:
1.字符串不是基本类型,而是引用数据类型。
2.浮点型可能是近似的值,并非是精确值。
3.数据范围与字节数不一定相关。
4.浮点数中默认的类型是double,如果要使用float,需要加上后缀F
如果是整数,默认使用int,如果要使用long,默认加上后缀L。
System.out.println(“100L”)
使用变量注意事项
(1)多个变量名称不能重复。
(2)对于float和long类型的变量,后缀名L和F不能去掉。
(3)如果使用byte和short类型的变量,不能超出对应类型取值范围
(4)变量必须要先赋值,再使用。
(5)变量不能超过作用域的范围【作用域:从定义变量开始,一直到所属的大括号结束】
(6)可以使用一个语句创建多个变量,但是一般不推荐这样使用。
4.数据类型转换
在java中,当数据类型不一样时,将会发生数据类型转换。
1.自动数据类型转换(隐式)
- 特点:代码不需要特殊处理,
- 规则:数据范围从小到大
例如:
//这个时候,左边是long类型,右边默认是int类型。
//int--->long符合了从小到大的规则,自动数据类型转换。
long num1=100;
System.out.println(num1);
//这个时候,左边是float类型,右边默认是long类型。
//long--->float符合了从小到大的规则,自动数据类型转换。
float num1=30L;
System.out.println(num1);
2.强制数据类型转换(显示)
- 特点:代码需要特殊处理,不能自动完成
- 格式:范围小的类型 范围小的变量名=(范围小的类型)范围大的数据
//格式:范围小的类型 范围小的变量名=(范围小的类型)范围大的数据
int num1=(int)100L;
System.out.println(num1);
注意事项:
1.强制数据类型转换,一般不推荐使用。因为有可能发生精度损失,数据溢出。
//对于整数的情况 long强制转换为int
int num1=(int)6000000000L;
System.out.println(num1);1705032704 此时发生了数据溢出
//对于小数的情况 double--->int
int num1=(int)6.5;
System.out.println(num1);6
//此时发生了精度损失 这个并不是四舍五入,而是所以小数被舍弃
2.byte/short/char这三种数据类型都可以发生数学运算,例如加法"+"
char num1='A'; //这是字符型变量,里面是大写字母A
System.out.println(num1+1); //输出66,也就是大写字母A被当作65处理了
//计算机的底层会用一个二进制的数字来代表字符A,65
//一旦char类型进行了数学的运算,那么对应的字符就会翻译成对应的数字
3.byte/short/char这三种数据类型在进行数学运算的时候,首先都会被提升为int类型,然后再进行运算。
byte num1=40;
byte num2=50;
//byte+byte---->int+int
int result=num1+num2;
System.out.println(result);
4.boolean不能进行任何数据类型转换
5.ASCII码
ASCII码(American Standard Code for Information InterChange 美国信息交换码表 0-127)
Unicode码表(万国表 0-127和Ascii一样,128以后包含更多的字符)
ASCII | 控制字符 | ASCII | 控制字符 | ASCII | 控制字符 |
---|---|---|---|---|---|
48 | 0 | 65 | A | 97 | a |
49 | 1 | 66 | B | 98 | b |
50 | 2 | 67 | C | 99 | c |
6.算数运算符
运算符:进行特定操作的符号,+ - * /
表达式:使用运算符连接起来的式子。例如:20+5,又如:a+b
算数运算符包括 | Value |
---|---|
- | 加法运算,字符串连接运算 |
- | 减法运算 |
- | 乘法运算 |
/ | 除法运算 |
% | 取模运算,两个数字相除取余数 |
++ – | 自增自减运算 |
四则运算:加减乘除
int a=10;
int b=20;
System.out.println(a+b); //输出30
System.out.println(a-b); //输出-10
int x=10;
int y=3;
//对于一个整数的除法,整数除以整数,得到的依旧是整数。(取商,不要余数)
int result=x/y;
System.out.println(result); //输出3
取模运算% 取余数—只有对于整数的运算,这个取模运算符才有意义。
int x=10;
int y=3;
int result=x%y;
System.out.println(result); //输出1 取得是余数
注意事项:一旦运算过程中有不同类型的数据,那么结果将会是数据范围大的那一种。
//int+double--->double+double=double
int x=10;
double result=x+3.5;
System.out.println(result); //输出13.5
四则运算当中,"+"加法运算的常用三种用法:
- 对于数值来说,就是简单的加法。
- 对于char字符来说,先转换成对应的ascii码,在进行计算之前,char被提升为int类型,然后再进行计算。
- 对于字符串String类型来说,加号代表字符串的连接操作。(任何数据类型和字符串连接的时候,结果都是字符串)
// 字符串连接
String str="Hello";
System.out.println(str+"World');//输出HelloWorld
System.out.println("Hello"+20);//输出Hello20
自增自减运算
自增运算符++
自减运算符- -
含义:让一个变量数据加1,或者让一个变量数字减1
使用格式:++num --num num++ num–
使用方式:
- 单独使用:不和其他的任何操作使用,自己单独操纵。
- 混合使用:和其他操作混合,例如和赋值操作混合。,
使用区别:
- 单独使用的时候前++和后++没有任何区别。
- 在混合使用的时候,前++和后++有重大区别
– A:如果是【前++】,那么变量值立马加1,然后再作为结果使用。
– B:如果是【后++】,那么首先使用变量原来的值,然后再进行加1操作。
//单独使用
int num=1;
++num;
System.out.println(num); //输出2
num++;
System.out.println(num); //输出3
// 混合使用【前++】 与打印操作混合使用
int num1=20;
System.out.println(++num1); //输出21
// 混合使用【后++】与打印操作混合使用
int num2=20;
System.out.println(num2++); //输出20
// 混合使用【前--】 与赋值操作混合使用
int num3=40;
int result=--num3; //前--。变量马上变成了39,然后再赋值给result
System.out.println(result); //输出39
int num4=50;
int result=num4--;后--,变量先把值赋值给result,然后再--
System.out.println(result); //输出50
7.赋值运算符
赋值运算符包括 | Value |
---|---|
= | 等于号 |
+= | 加等于 |
-+ | 减等于 |
*= | 承等于 |
/= | 除等于 |
%= | 取模等于 |
赋值运算符:就是将符号右边的值,赋值给左边。
基本赋值运算符:
- = int a=30;
复合赋值运算符:
- += a+=1相当于a=a+1;
- -= a-=1相当于a=a-1;
- = a=1相当于a=a*1;
- /= a/=1相当于a=a/1;
- %= a%=1相当于a=a%1;
int a=10;
a+=5;
System.out.println(a); //输出15
注意事项:
- 只有变量才能使用赋值运算符。
- 赋值运算符中隐含了一个强制类型转换
byte num=5;
//byte+int---->int + int;
//num=(byte) int;
num+=5;
8.比较运算符
比较运算符包括 | Value |
---|---|
== | 比较两边数据是否相等,相等结果是true |
< | 比较符号左边的数据是否小于右边的数据,如果小于结果是true。 |
> | 比较符号左边的数据是否大于右边的数据,如果大于结果是true。 |
<= | 比较符号左边的数据是否小于或者等于右边的数据,如果小于结果是true。 |
>= | 比较符号左边的数据是否大于或者等于右边的数据,如果小于结果是true。 |
!= | 不等于符号 ,如果符号两边的数据不相等,结果是true。 |
比较运算符是比较两个数据的大小,比较运算符的结果是true或者false;
System.out.println(10>5); //输出true
注意:
- 一个等号是赋值运算,两个等号是比较是否相等运算。
- 比较运算符的结果只能是true或者false
- 如果进行多次判断,不能连着写。(数学中1<x<2,但是程序中不允许这样写)
9.逻辑运算符
逻辑运算符包括 | Value |
---|---|
&& 短路与 | 1. 两边都是true,结果是true 2. 一边是false,结果是false 短路特点:符号左边是false,右边不再运算 |
|| 短路或 | 1. 两边都是false,结果是false 2. 一边是true,结果是true 短路特点: 符号左边是true,右边不再运算 |
!取反 | 1. ! true 结果是false 2. ! false结果是true |
与或运算符可以连着写。
System.out.println(true && true); //输出true
System.out.println(3>1 && 2<5); //输出true
System.out.println(true || false); //输出true
System.out.println(false || false); //输出false
System.out.println(!false); //输出true
注意–什么是短路
当左边可以得到最终的结果的时候,那么不管右边结果是什么,都不再进行判断,节省了一步操作。
// 短路例子
int a=10;
System.out.println(3>4 && ++a); //输出false
System.out.println(a); //输出10 由于3不大于4,所以++a并没有被执行。
10.三元运算符
三元运算符格式:
数据类型 变量名 = 布尔类型表达式?结果1:结果2
三元运算符计算方式:
- 布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
- 布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。
一元,二元,三元运算怎么区分。
- 一元运算符:只需要一个数据就可以进行操作的运算符。++ – !
- 二元运算符:需要两个数据才能进行操作的运算符。赋值= 加法+
- 三元运算符:需要三个数据。
//使用三元运算符计算最大值
int a=20;
int b=10;
int max=a > b : a ? b //判断a是否大于b,如果成立,取a,否则取b;
注意事项
表达式a和表达式b都必须符合左侧的数据标准
11.方法
概述:我们在学习运算符的时候,都为每个运算符单独的创建一个新的类和main方法,我们会发现这样编写代码非常的繁琐,而且 重复的代码过多。能否避免这些重复的代码呢,就需要使用方法来实现
方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。 当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。
方法的定义
- 定义格式:
修饰符 返回值类型 方法名 (参数列表){
代码...
return ;
}
- 定义格式解释:
1.修饰符: 目前固定写法 public static 。
2.返回值类型: 目前固定写法 void
3.方法名:为我们定义的方法起名,满足标识符的规范(小驼峰式),用来调用方法。
4.参数列表: 小括号内的参数。
5.return:方法结束。因为返回值类型是void,方法大括号内的return可以不写。
// 举例
public static void methodName() {
System.out.println("这是一个方法");
}
方法的调用
方法在定义完毕后,方法不会自己运行,必须被调用才能执行,我们可以在主方法main中来调用我们自己定义好的方法。在 主方法中,直接写要调用的方法名字就可以调用了。
public static void main(String[] args) {
//调用定义的方法
method method();
}
//定义方法,被main方法调用
public static void method() {
System.out.println("自己定义的方法,需要被main调用运行");
}
注意事项
- 方法必须定义在一类中方法外
- 方法不能定义在另一个方法的里面
public class Demo {
public static void main(String[] args){
}
//正确写法,类中,main方法外面可以定义方法
public static void method(){
}
}
public class Demo {
public static void main(String[] args){
//错误写法,一个方法不能定义在另一方法内部
public static void method(){
}
}
}