尚硅谷JAVA笔记第二章--关键字保留字 标识符 变量 运算符 流程控制

尚硅谷JAVA Bilibili
自己之前学过python,所以这份笔记总体上记录自己觉得的新东西

一、关键字和保留字

1. 关键字

class if public 等
特点:所有字母都小写

2. 保留字

goto、const

二、标识符

定义:各种名字
规则(必须遵守):

  • 字母大小写、数字、_ 、$ 组成
  • 数字不可开头
  • 区分大小写,长度不限
  • 不可关键字保留字(可包含)
  • 不能含空格

规范(建议遵守:见名知意):

  • 包名:xxxyyyzzz
  • 类名、接口名:XxxYyyZzz
  • 变量名、方法名: xxxYyyZzz
  • 常量名:XXX_YYY_ZZZ

三、变量

//example
class VariableTest {
	public static void main(String[] args){
		int myAge = 12;    //变量的定义(声明+赋值)
		System.out.println(myAge);
	}
}

1. 基本数据类型

基本数据类型

  • 数值型: 整数类型(byte1,short2,int4,long8); 浮点类型(float4,double8) --“数字为字节数”
  • 字符型(char2):定义通常用英文单引号,只能且必须写一个字符 | ‘\n’:换行符 ; ‘\t’:制表符;’\u0043’: 对应C
  • 布尔型(boolean)
  1. 变量或常量: 整型默认int, 声明long后加l或者L
  2. 浮点型默认double, 声明float后加f或者F
  3. 举例:terminal默认GBK解析,存的时候就要用ANSI存,防止乱码
  4. 想输出123"456"789\n需要"123"456"789\n"

引用数据类型

  • 类(class): 字符串在这里
  • 接口(interface)
  • 数组([])

2. 基本数据类型变量间转换

自动类型提升
byte char short -> int -> long -> float -> double
前三种怎么运算结果都是int
强制类型转换
自动类型提升的逆运算

double d1= 1.9
int i1= (int)d1  // i1 --1 截断,损失精度
long l = 12232
//未加L并不会报错,其实是将其看作int
long l = 2313123213213213213213
//超出int表示范围,报错

float f1 = 1.2
//报错,因为不加F默认为double, double转float必然报错(大转小)
// float f1 = (float)1.2   可解


byte b = 12
byte b1 = b +1  //1 作为整型常量默认int  另外 1.1 作为浮点型常量默认double

3. 基本数据类型与String间转换

string

不是基本数据类型,是引用数据类型
String 可以和八种基本数据类型运算,且只能说hi连接运算,且结果类型仍为String

String str1 = "123"
int num1 = str1 // 报错
int num2 = (int)str1 // 报错
// 因为String不参与上述类型转换等运算
// 正确做法
int num 3 = Interger.parseInt(str1)

4. 进制间转换

对于整数

  • 二进制 binary: 0b 0B
  • 八进制 octal: 0
  • 十进制 decimal
  • 十六进制 hex: 0x 0X

在这里插入图片描述
int 128 强转 byte , 得 -128

4 运算符

算术运算符

// /
int num1 = 12
int num2 = 5
double result = num1 / (num2 + 0.0) //2.4

// % 取模运算
// 结果的符号与被模数符号相同
int m1 = -12
int m2 = 5
int m3 = m1 % m2 // -2   与-12符号同,就算m2是-5也是如此

// ++
++i //先+1再i(赋值)
i++ //先i(赋值)再+1
// 另外注意自增1不会改变变量本身数据类型,效率更高
short i = 2
i = i + 1 //报错,因为1为int型

赋值运算符

//+= 不会改变变量本身的数据类型
short i = 1
i = i + 2 //报错,自动转成int
i += 2  //正确,不改变数据类型
//练习
int n = 10
n += (n++) + (++n)  //32
// 即 n = n + (n++) + (++n) = 10 + 10 + 12(n++)之后n已经成为11,所以后面(++n)时加的是12

比较运算符

// == != <= 等
// instanceof  检查是否为类的对象

//结果都为boolean型

逻辑运算符

& 逻辑与
&& 短路与
| 逻辑或
|| 短路或
!逻辑非
^ 逻辑异或

//& 与 && 的区别
// 当符号左边是false时,&会继续执行右边的运算,&&则不会(因为一个false就知道结果了)
//| 与 || 同理

位运算符

在这里插入图片描述

在这里插入图片描述

& 左右如果是boolean,则是逻辑与
左右如果是整数,则是与运算

//高效计算2*8
2 << 3 或者 8 << 1


// 练习 交换变量的值
int num1 = 10
int num2 = 20

num1 = num1 + num2
num2 = num1 - num2
num1 = num1 - num2
// 节省内存空间,但可能会溢出,且非数值型不支持加减

//方法2
num1 =  num1 ^ num2
num2 =  num1 ^ num2
num1 =  num1 ^ num2
// 节省内存空间,但非数值型不支持加减

方法2 背后原理
在这里插入图片描述

三元运算符

(条件表达式)? 表达式1 : 表达式2
如果条件表达式为true则执行表达式1,反之表达式2
要求表达式1和表达式2类型统一,方可用统一的变量接收

m = 10
n = 20
String maxStr = (m > n) ? "m大" : ((m == n) ? "m等于n " : "n大") //可嵌套

凡是可以使用三元运算符的地方都可以改写成if-else, 反之不行(if-else结构更复杂)
但相比来说三元运算符简洁且运行效率高(能用则用)

五、程序流程控制

顺序结构

分支结构

if else

// 导包,实例化,调用方法 SCAN
import java.util.Scanner;
class Test{
	public static void main(String [] args){
		Scanner scan = new Scanner(System.in);
		int num = scan.nextInt();
		System.out.println(num);
		
		//没有nextChar,需要用如下方法获取一个字符(在一个字符串中获取索引为0的字符)
		String gender = scan.next();
		char genderChar = gender.charAt(0);
		System.out.prinln(genderChar);
	}
}
// 要求: 产生随机数: 10-99
// 公式:[a,b] :(int)(Math.random()*(b-a+1)+a)
class Test{
	public static void main(String [] args){
		//double value = Math.random(); // [0.0,1.0)
		// 需要处理成10-99
		//首先Math.random() * 90 --> [0.0,90.0), 然后再加10,变[10.0,100.0),然后int强转即可
		int value = (int)(Math.random()*90+10);
		System.out.println(value);
	}
}

switch-case

// 表达式只能是一下六种类型
// byte, short, char, int, 枚举类型, String类型
// 如果语句1。。。语句n相同,则考虑合并
// break 是可选的,视情况而定
// 如果可以与if-else相互替代且写起来不负责,使用switch-case(效率稍高)
switch(表达式){
case 常量1:
	语句1break;
}
...
case 常量n:
	语句n;
	break;
}
default:
	语句;
	break;

循环结构

for 循环

① 初始化条件
② 循环条件(boolean)
③ 循环体
④ 迭代条件
for(;;){}->->->->->->-...- ②

while循环

// for 和 while 初始化条件中的变量的作用范围不同while(){
	③
	④
}->->->->->->-...- ②

do while 循环

do{;;
}while()->->->->->->-...- ②

// 相比for 和 while 至少也执行一次③④,如果执行多次则没有区别
for(;;){}while(true){}效果相同

//结束循环的方式
//一、循环条件返回false
//二、循环体中执行break

嵌套循环

//外层控制行数,内层控制列数

break,continued的使用

都使用在循环中,break结束当前循环(默认当前最近的循环 ),continue结束当次循环(默认当前最近的循环 )
另外两者后面都不能有执行语句

那么如何结束指定循环?

label:for (int i =1; i <= 4; i++){
	for (int j = 1; j <= 10; j++){
		if (j % 4 == 0){
			break label; //结束指定标识的一层,continue同理
		}
	}
}

over
接下来是第三章 数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值