笔记大纲预览
JAVA学习
这是一篇自己目前学习java的一些笔记,主要就是根据尚学堂的java300集写的一些笔记。希望能给大家带来一些帮助,也是为了鞭策自己每天努力学习。有不对的地方希望提出然后更正。
java的一些数据类型和运算符
数据类型
java中定义了3类8中基本数据类型
- 数值型:
byte
(1字节)、short
(2字节)、int
(4字节)、long
(8字节)、float
(4字节)、double
(8字节) - 字符型:
char
(2字节) - 布尔型:
boolean
(1位)
数据类型分为:基本数据类型:数值型,字符型,布尔型-
引用数据类型(用来引用对象,4个字节):类(class),接口(interface),数组
整型变量/常量
含有:byte
,short
,int
,long
四类
long a = 7400000000L;
后面加L代表这是一个Long类型的常量
八进制:0开头,如:015
十六进制:0x开头 如0x15
二进制:以0b开头 如:0b01110011
浮点型变量/常量
含有:float
(单精度,精确到7个有效数字)
double
(双精度)
java浮点类型常量有两种表示形式
- 十进制数形式 例如:3.14 314.0 0.314
- 科学记数法形式 例如 : 314e2 (e2代表10的2次方,即314x100) 314E-2 (即314x10的-2次方)
使用科学记数法赋值:
double f = 314e2; //即314*10^2
double f = 314e-2; //即314*10^-2 ---->3.14
float类型的数值要加后缀F,不加就默认为double类型的数值,在数值后加D可明确为double类型
float f = 3.14F;
double d1 = 3.14;
double d2 = 3.14D;
浮点数是不精确的,一定不要用于比较
例1:
float f =0.1f;
double d = 1.0/10;
System.out,println(f==d);
//代码的运行结果会输出false
例2:
float d1 = 423432423f;
float d2 = d1+1;
if(d1==d2){
System.out.println("d1=d2");
}else{
System.out.println("d1!=d2");
}
//代码运行的结果会是“d1=d2”
想要比较浮点数,建议使用java.math
包下面的两个类:BigInteger
和BigDecimal
,这两个类可以处理任意长度的数值。BigInteger
实现了任意精度的整数运算,BigDecimal
实现了任意精度的浮点运算
示例:使用Bigdecimal
进行浮点数的比较:
import java.math.BigDecimal;
public class Main{
public static void main(String[] args){
BigDecimal bd = BigDecimal.valueOf(1.0);
bd = bd.subtract(BigDecimal.valueOf(0.1)); //bd减0.1
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
bd = bd.subtract(BigDecimal.valueOf(0.1));
System.out.println(bd); //0.5
System.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1); //0.5000000000000001
BigDecimal bd2 = BigDecimal.valueOf(0.1);
BigDecimal bd3 = BigDecimal.valueOf(1.0/10.0);
System.out.println(bd2.equals(bd3)); //会返回true
}
}
字符型变量/常量
char
类型用来表示在Unicode编码表中的字符,共65536个字符,即十六进制表示是从’\u0000’到’\uFFFF’,占2个字节,用单引号表示,如:‘A’
例:
char a = 'A';
char b = '中';
char c = '\u0061';
常见的 一些转义字符:
转义符 | 含义 | Unicode值 |
---|---|---|
\b | 退格(backspace) | \u0008 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\t | 制表符(tab) | \u0009 |
\ \ | 反斜杠 | \u005c |
\ ’ | 单引号 | \u0027 |
\ " | 双引号 | \u0022 |
布尔型变量/常量
boolean
类型只有两个常量值,即true和false,在内存中占一位,不可以使用0或非0 常数代替true和false,常用来判断逻辑条件。
例:
boolean flag;
flag = true;
if(flag){
\\true的分支
}else{
\\false的分支
}
运算符(operator)
运算符大概分为:算术运算符,赋值运算符,扩展运算符,关系运算符,逻辑运算符,位运算符,条件运算符,字符串运算符等。
算数运算符
-
二元运算符: +,-,*,/,%
二元运算符需要两个操作数完成运算
二元运算符运算规则:
整数运算:
- 两个操作数一个为long,则结果也为long
- 没有long时,结果为int
浮点运算:
- 两个操作数有一个为double,则结果为double
- 只有两个操作数都为float,结果才为float
取模运算
- 操作数可为浮点数,一般为证书,结果为“余数”,“余数”的符号和左边的操作数符号相同,如:7%3=1,-7%3=-1,7%-3=1.
-
一元运算符:++,–
该运算符只需要一个操作数即可运算。
赋值及其扩展赋值运算符
常见的扩展赋值运算符:+=
,-=
,·*=
,/=
,%=
\
例:
int a = 3;
int b = 4;
a+=b; //相当于a=a+b
a*=b+3; //相当于a=a*(b+3)
关系运算符
关系运算符用来比较运算,关系运算的结果是布尔值:即true和false
常见关系运算符:==
,!=
,>
,<
,>=
,<=
逻辑运算符
常见逻辑运算符:
运算符 | 说明 |
---|---|
逻辑与:& | 两个操作数都为true,结果为true |
逻辑或: | | 两个操作数有一个为true,则结果为true |
短路与:&& | 只要有一个为false,则直接返回false |
短路或:|| | 只要有一个为true,则直接返回true |
逻辑非:! | 取反,例:!true 为false |
逻辑异或:^ | 相同为false,不同为true |
在实际使用的时候,通常使用&&和||,而不是&和|,因为这样会提高效率
位运算符
位运算符 | 说明 |
---|---|
~ | 取反 |
& | 按位与(与:遇0则0) |
| | 按位或(或:遇1则1) |
^ | 按位异或(异或:相同为0,不同为1) |
<< | 左移运算符,左移一位相当于乘2 |
>> | 右移运算符,右移一位相当于除2取商 |
字符串连接符
字符串连接符即 +
例:
String a = "123";
String b = "456";
System.out.println(a+b);
//结果为123456
条件运算符(三元运算符)
语法格式:
x?y:z
其中x为boolean
类型的表达式,先计算x的值,若x的值为true,则整个运算的结果为表达式y的值,否则为z的值
例:
int score = 80;
String score<60?"不及格":"及格";
//80>60,结果string的值是及格
int x = 1;
System.out.println(x>0?1:(x==0?0:-1));
//因为x=1>0,所以结果输出1
//若x=0,输出0
//若x=-100,输出-1
运算符的优先级问题
- 表达式里面优先使用小括号组织
- 逻辑非>逻辑与>逻辑或
类型转化
自动类型转换
自动类型转化指的是容量小(范围大小)的数据类型可以自动转化为容量大的数据类型。
自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
低--------------------------------------------->高
byte,short,char-> int -> long -> float -> double
int 和long类型向float类型转化,long向double类型转化,会有精度损失
强制类型转换
语法格式
(目标数据类型)x
示例:
double x= 3.14;
int nx = (int)x;
//此时nx的值就变为了3
转化中常见的问题
注意:
- 操作数比较大的时候要注意是否溢出
- 尽量不要命名名字为l的变量,l和数字1容易混淆,long类型尽量使用大写L
使用Scanner获取键盘输入
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
String favor = scanner.nextLine();
int age = scanner.nextInt();
接下来的内容会随着自己的学习进行更新。加油,奥力给!!!