Java基础2.Java基础语法

导语:整理了一下Java基础语法部分的笔记,以及部分案例

2.1关键字,标识符,注释

一.关键字keyword的定义和特点
定义:被Java语言赋予了特殊含义,用作专门用途的字符串
特点:关键字中所有字母都为小写
在这里插入图片描述
二.保留字reserved word
goto,const

三.标识符
标识符Identifier
java对各种变量,方法和类等要素命名时使用的字符序列成为标识符

四.标识符的使用
1.凡是可以起名字的地方都叫做标识符
2.标识符的命名规则(必须遵守)
在这里插入图片描述

五.命名的规范
在这里插入图片描述

六.注释Comment
单行注释://
多行注释:/* /*/(多行注释不可以嵌套使用)
文档注释:/**
文档注释(是可以被解析的,Java特有的)
@author shkstart
*/
javadot -d mydoc(文档名字) -author -version HelloWorld.java(java文件的名字)
七.分隔符
空白分隔符包括空格,回车,换行,制表符(Tab键)
普通分隔符包括{}用来定义块、类、方法及局部范围
[]对数组进行声明
()定义和调用方法
;语句的结束符号
,分隔变量与变量
:说明语句标号
.用于类、对象和他的属性或方法之间的分隔

2.2变量及变量的数据类型及计算

2.2.1变量及变量的数据类型
一.变量
1.变量的概念:
内存中的一个储存区域
该区域的数据可以在同一类型范围内不断变化
变量是程序中最基本的储存单元,包含变量类型(Java属于强类型语言),变量名和存储的值
2.变量的作用:
用于在内存中保存数据
3.使用变量注意:
Java中每个变量必须先声明,后使用,使用变量名来访问这块区域的数据
变量的作用域:其定义所在的一对{}内,变量只有在其作用域内才有效
同一作用域内,不能定义重名的变量

//案例
class VariableTest{
    
    
	public static void main(String[] args){
    
    
		//变量的定义,定义整型
		int myAge = 12;
		//变量的输出
		System.out.println(myAge);
		int myNumber;
		myNumber = 1001;
		System.out.println(myNumber);
	}
}

二.变量的分类
按数据类型来分类
在这里插入图片描述

引用数据类型还包括:枚举(enum)、注释(Annotation)、null

按变量在中声明的位置来分类
在这里插入图片描述

1.整数类型:byte,short,int,long
①byte:1字节 = 8bit, 范围-128 -127
②short:2字节
③int:4字节
④long:8字节,long型常量须后加‘l’或‘L’
⑤通常定义整型变量使用int
2.浮点类型:float,double
①单精度float:4字节,尾数可以精确到7位,float常量须后加‘f’或‘F’
②双精度double:8字节,尾数是float的两倍
③通常定义浮点型变量使用double型
3.字符型char
①char:1字符 = 2字节
②定义char型变量,通常使用一对’’,内部只能写一个字符
③表示方式:1.声明一个字符 2.转义字符 3.直接使用Unicode值来表示字符型常量‘\u+代表字符的值’
④\n换行符 \t制表符
4.布尔型:boolean
①boolean:一字节
②只能去两个值之一:true,false
③常常在条件判断、循环结构中使用
5.String类型变量
①String不是基本数据类型,属于引用数据类型,是一个类,翻译为:字符串
②声明String类型变量时,使用一对“”
③String可以和8中数据类型变量进行运算,且只能做连接运算。
④接收只能用String类型
引用数据类型:类(String),接口,数组

//案例
class StringTest{
    
    
	public static void main(String[] args){
    
    
		String s1 = "Hello World!";
		String s2 = "a";
		String s3 = "";
		//char c = "";编译不通过
		int number = 1001;
		String numberStr = "学号:";
		String info = numberStr + number;
		boolean b1 = true;
		String info1 = number + b1;
		//String练习1
		char c = 'a';//97
		int num = 10;
		String str = "hello";
		System.out.println(c + num + str);//107hello
		System.out.println(c + str + num);//ahello10
		System.out.println(c + (num + str));//a10hello
		System.out.println((c + num) + str);//107hello
		System.out.println(str + num + c);//hello10a
		//String练习2
		//*  *打出来两个乘号
		System.out.println("*  *");//*  *
		System.out.println('*' + '\t' + '*');//93
		System.out.println('*' + "\t" + '*');//*  *
		System.out.println('*' + '\t' + "*");//51*
		System.out.println('*' + ('\t' + '*'));//*  *
		//双引号代表String类型+表示连接,单引号+表示运算	
	}
}

2.2.2运算规则及作用域
前提:这里只讨论七种数据类型变量间的运算。不包含boolean类型。
1.自动类型提升
结论:当容量小的数据类型变量与容量大的数据类型变量做运算时,结果自动提升为容量大的类型
byte 、char、 short --> int --> long --> float --> double
特别的:当byte、char、short三种类型做变量时结果为int型,当运算时只要在int范围里,全都定义为int类型
说明:此时的容量大小指的是,表示数的范围的大小

//案例
class VariableTest2{
    
    
	public static void main(String[] args){
    
    
		byte b1 = 2;
		int i1 = 129;
		//编译不通过,超出byte的范围
		//byte b2 = b1 + i1;
		int b2 = b1 + i1;
		long l1 = b1 + i1;
		//单浮点型可以接收,会保留一位小数
		float f = b1 + i1;
		char c1 = "a";
		int x1 = c1 + b1;
	}
}

2.强制类型转换:
自动类型提升运算的逆运算
①需要使用强转符:()
②注意点:强制类型转换,可能导致精度损失

//案例
class VariableTest3{
    
    
	public static void main(String[] args){
    
    
		double d1 = 12.9;
		int i1 = (int)d1;//截断操作

		int i2 = 128;
		byte b = (byte)i2;
		System.out.print(b);//输出b值为-128
	}
}
//案例
class VariableTest4{
    
    
	public static void main(String[] args){
    
    
		//情况1.没有加l自动默认为整型
		long l = 123111;
		//编译失败:过大的整数
		//long l1 = 123546846846486;
		long l1 = 516151651654646l;
		System.out.print(l);
		//情况2.整型常量,默认类型为int型
		//浮点常量,默认类型为double型
		byte b = 12;
		//byte b1 = b + 1;编译失败
 		//float f1 = b + 12.3;编译失败
	}
}

3.变量的作用域
变量的作用域分为:类级,对象实例级,方法级,块级
①类级:又称为全局变量,需要用static修饰,类级变量在类定以后就存在,占用内存空间,可以通过类名来访问,不需要实例化
②对象实例级:又称为成员变量,实例化后才会分配内存空间,才能访问
③方法级:又称局部变量,在方法内定义的变量
2.2.3变量的进制及进制转换
1.进制的种类
二进制:0,1,以0b或0B开头
十进制:0-9
八进制:0-8,以0开头
十六进制:0-9及A-F,以0x或0X开头

//案例
class BinaryTest{
    
    
	public static void main(String[] args){
    
    
		int num1 = 0b110;
		int num2 = 110;
		int num3 = 0127;
		int num4 = 0x110A;
		System.out.println(num1);//6
		System.out.println(num2);//110
		System.out.println(num3);//87
		System.out.println(num4);//4362
	}
}

2.二进制转换为十进制
00001110 = 0*2º+2+2²+2³
最高位为符号位0为正,1为负
正数原码,反码,补码都是一样的
-14原码10001110 = 反码11110001 = 补码11110010
计算机底层都以补码的方式来存储数据
3.十进制转换为二进制:除2取余的逆
13/2 = 6…1
6/2 = 3…01
同理得1101
4.进制的转换
八进制和十六进制可以转换为二进制
在进一步转化为十进制
5.Java中的进制转换
toBinaryString(int i);转化为二进制
toHexString(int i);转化为十六进制
toOctalString(int i);转化为八进制

//案例:用Java将一个数转化为十六进制
{
    
    
int i1 = 60;
int i2 = i1 & 15;
String j = (i2 > 9) ? (char)(i2 - 10 + 'A' ) : i2 + "";
int temp = i1 >>> 4;
i2 = temp & 15;
String k = (i2 > 9)?(char)(i2-10 + 'A')+"":i2 + "";
System.out.println(k + "" + j);
}

2.3运算符

一.运算符
1.算数运算符:+,-,*,/,%,++(在前先赋值在运算,在后先运算后赋值),–(),+(字符串连接)

//案例
int num1 = 12;
int num2 = 5;
double result1 = num1 / num2;//2.0
double result2 = (double)num1 / num2;//2.4 
double result3 = num1 + (num2 + 0.0);//2.4
//案例 %:取余运算
结果的符号与被模数的符号相同
{
    
    
int m1 = -12;
int n1 = 5;
System.out.println(m1 % n1);//-2
}

//案例问题
{
    
    
byte b1 = 127;
b1++;
System.out.print(b1);//-128
}
//案例:给一个三位数的整数,打印出他的个位数,十位数,百位数。
{
    
    
int num = 123;
int bai = num/100;
int shi = num%100/10;
int ge = num%10;
System.out.println("百位为" + bai);
System.out.println("十位为" + shi);
System.out.println("个位为" + ge);
}

2.赋值运算符:=,+=,-=,*=,/=,%=

//案例
{
    
    
short s1 = 10;
s1 += 10;//不会改变本身的数据类型 
}
//如果要实现+2的操作,推荐:num += 2;
//如果要实现+1的操作,推荐:num++;
//案例
{
    
    
int m = 10;
int n = 5;
n *= m++;//m = 100;
n += (n++) + (++n);//n = n + (n++5) + (++n7);
}

3.比较运算符(关系运算符):==,!=,<,>,<=,>=,instanceof(检查是否是类的对象)
比较结果为boolean型
4.逻辑运算符&,|,!,&&,||,^(运算优先级:非,与,或)

//案例 区分&,&&
{
    
    
boolean b1 = false;
int num1 = 10;
if(b1 & (num1++ > 0)){
    
    
	System.out.println("aaa");
}else{
    
    
	System.out.println("bbb");
}//bbb
System.out.println(num1);//11

boolean b2 = false;
int num2 = 10;
if(b2 && (num2++ > 0)){
    
     
	System.out.println("aaa");
}else{
    
    
	System.out.println("bbb");
}//bbb
System.out.println(num2);//10(短路,不给num2+1)
}
//&和&&的区别
//相同点1:& 和 && 的运算结果相同
//相同点2:当符号左边是true时,二者都会执行符号右边的运算
//不同点:当符号左边是false时,&继续执行符号右边的运算。&&不在执行

//|和||的区别
//相同点1:| 和 || 的运算结果相同
//相同点2:当符号左边是false时,二者都会执行符号右边的运算
//不同点3:当符号左边是true时,|继续执行符号右边的运算。||不再执行

//开发中推荐使用 && 和 ||

5.位运算符<<,>>,>>>,&,|,^,~
//<<左移,在一定范围内,每向左移一位,数值*2
//>>右移,在一定范围内,每向右移一位,数值/2
//>>>无符号右移,无论正负最高位都拿0补
&,都为1时为1,0101 & 0001 得 0001
|,有一个为1时为1,0101 | 0001 得 0101
^,不相同时为1,0101 ^ 0001 得 0100
~,取反1变0,0变1,0101 和 1010 互为取反

//案例 交换两个变量的值
{
    
    
int num1 = 10;
int num2 = 20;
//方法一:定义临时变量
int one = num1;
num1 = num2;
num2 = one;
//方法二:弊端①可能超出储存范围②只适合于数值运算
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2; 
//方法三:(m^n)n == m
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2; 
}

6.三元运算符
结构:(条件表达式)?表达式1:表达式2
说明
①条件表达式的结果为boolean类型
②根据条件表达式的真或假,决定执行表达式的1还是表达式2
如果表达式为true,则执行表达式1,反之执行表达式2
③表达式1和表达式2的类型要求是一致的。
④凡是可以使用三元运算符的地方,都可以改写为if-else
⑤如果程序既可以使用三元运算符又可以使用if-else,那选择使用三元运算符

//案例 获取两个数的较大值
{
    
    
int m = 12;
int n = 5;
int max = (m > n) ? m : n;//12
}

2.4流程控制

一.顺序结构
程序从上到下执行
二.分支结构
1.if-else

//案例
{
    
    
bolean x = true;
bolean y = false;
short z =40;
if((z++ == 40) && (y = true)){
    
    
	z++;//42
}
if((x = false) || (++z == 43)){
    
    
	z++;//44
}
System.out.println(z);
}
//案例
//从键盘获取不同类型的变量,需要使用Scanner类
//实现步骤
//1.导包:import java.util.Scanner;
//2.Scanner的实例化:Scanner scan = new Scanner(System.in);
//3.调用Scanner类的相关方法,来获取指定类型的变量
import java.util.Scanner;//导包
class ScannerTest{
    
    
	public static void main(String[] args){
    
    
		Scanner scan = new Scanner(System.in);//Scanner实例化
		System.out.println("请输入你的姓名");
		String name = scan.next();
		System.out.println(name);
		
		System.out.println("请输入你的年龄");
		int age = scan.nextInt();
		System.out.println(age);//命令行输出后输入int类型的值

		System.out.println("请输入你的性别:(男/女)");
		String gender = scan.next();
		char genderChar = gender.charAt(0);//索引位置0上的字符
		System.out.println(genderChar);
	}
}
//案例
//三个变量进行排序,从小到大输出
import java.util.Scanner;//导包
class IfTest{
    
    
	public static void main(String[] args){
    
    
		Scanner scan = new Scanner(System.in);

		System.out.println("请输入第一个数");
		int num1 = scan.nextInt();
		System.out.println("请输入第二个数");
		int num2 = scan.nextInt();
		System.out.println("请输入第三个数");
		int num3 = scan.nextInt();	
		
		if(num1 < num2){
    
    
			if(num1 < num3){
    
    
				if(num2 < num3){
    
    
					System.out.println(num1+","+num2+","+num3);
				}else{
    
    
					System.out.println(num1+","+num3+","+num2);
				}
			}else{
    
    
				System.out.println(num3+","+num1+","+num2);
			}
		}else{
    
    
			if(num2 < num3){
    
    
				if(num1 < num3){
    
    
					System.out.println(num2+","+num1+","+num3);
				}else{
    
    
					System.out.println(num2+","+num3+","+num1);
				}
			}else{
    
    
					System.out.println(num3+","+num2+","+num1);
			}
		}
	}
}
//案例
{
    
    
int x = 4;
int y = 1;
if(x>2)
	if(y>2)
		System.out.println(x+y);
	else//就近原则
		System.out.println(x);//输出4
}

2.switch-case
//说明
//1.根据switch表达式中的值,一次匹配各个case中的常量,一旦匹配成功,则进入相应的语句执行。当执行完以后,则继续执行下面的语句,直到break或者末尾结束为止。
//2.switch中的表达式,只能是如下的六种类型:byte,short,char,int,枚举类型,String类型
//3.case后只能声明常量
//4.break关键字是可选的,可以加,可以不加
//5.default也是可选的,位置也是灵活的

//案例 对于成绩大于60分的输出合格,反之不合格
{
    
    
int score = 78;
switch(score / 10){
    
    
	case 0:
		System.out.println("不及格");
		break;
	....
	case 10:
		System.out.println("及格");
		break;
}
}
//案例 输入一个月份和日期,输出他是今年的第几天
{
    
    
Scanner scan = new Scanner(System.in);
System.out.println("请输入月份");
int month = scan.nextInt();
System.out.println("请输入日期");
int day = scan.nextInt();

//定义一个变量保存天数
int sumDays = 0;
switch(month){
    
    
	case 13:
		sumDays +=31;
	case 12:
		sumDays +=30;
	case 11:
		sumDays +=31;	
...
	case 2:
		sumDays +=31;
	case 1:
		sumDays +=day;
}
}

三.循环结构
1.for循环
循环结构的四个要素
①初始化条件
②循环条件
③循环体
④迭代条件
for(①;②;④){

}

//案例
{
    
    
int num = 1;
for(System.ou.print("a");num<=3;System.ou.print("c"),num++){
    
    
	System.ou.print("b")
}//abcbcbc
}
//案例
//获取最大公约数
{
    
    
int min = (m <= n)?m:n;
for(int i = min;i>= 1;i--){
    
    
	if(m % i ==0&& n % i == 0){
    
    
		System.out.println(i);
		break;//求最大公约数,最小公倍数同理
	}
}
}

2.while循环
循环结构的四个要素
①初始化条件
②循环条件
③循环体
④迭代条件

while(②){
③;
④;
}
//说明:①不能丢失迭代条件,防止死循环②for循环和while循环可以相互转换
//不同点:①定义的变量,for循环定义在循环体里,外部不可用,while定义在循环体外,外部可用。
do…while

do{
②;
③;
}while(④);
① ——> ② ——> ③ ——> ④ ——②③④…
//说明do…while至少会执行一次循环体

//案例 输出数,提取负数和正数的个数,当输入0时停止
import java.util.Scanner;
class ForWhileTest{
    
    
	public static void main(String[] args){
    
    
		Scanner scan = new Scanner(System.in);
		int positiveNumber = 0;//正数的个数
		int negativeNumber = 0;//负数的个数
		while(true){
    
    
			int number = scan.nextInt();
			if(number > 0){
    
    
				positiveNumber++;
			}else if(number < 0){
    
    
				negativeNumber++;
			}else{
    
    
				break;
			}
		}
		System.out.println("输入正数的个数" + positiveNumber);
		System.out.println("输入负数的个数" + negativeNumber);
	}
}
//特别注意:
//1.不在循环体中限制次数的结构:for(;;)和while(true)
//结束循环有几种方式?
//方式一:循环条件部分返回false
//方式二:循环体中,执行break

四.嵌套循环

//案例 输入一个三角形的*
{
    
    
for(int i = 1; i <= 5;i++){
    
    
	for(int j = 1;1 <= i;j++){
    
    
		System.out.println("*");
	}
}
}
//案例 99乘法表
{
    
    
for(int i = 1;i <= 9;i++){
    
    
	for(int j = 1;j <= i;j++){
    
    
		System.out.print(i + "*" + j + "=" + (i*j));
	}
	System.out.println();
}
}
//案例 输出100以内的所有质数{
    
    
	for(var i = 2;i < 100;i++){
    
    
		for(var j = 2;j < Math.sqrt(i);j++){
    
    //设置计算范围到根号i的范围减少计算量
			if(i % j == 0){
    
    
				break;//优化计算时间
			}else if(j == i-1){
    
    
				System.out.println(i);
			}
		}
				
				
	}
}{
    
    
	for(var i = 2;i < 100;i++){
    
    
		boolean isFlag = true;
		for(var j = 2;j < i;j++){
    
    
			if(i % j == 0){
    
    
				isFlag = false;
			}
		}
		if(isFlag == true){
    
    
			System.out.println(i);
		}
}
}{
    
    
label:for(var i = 2;i < 100;i++){
    
    
			for(var j = 2;j < Math.sqrt(i);j++){
    
    
				if(i % j == 0){
    
    
					continue label;//直接跳出此次数的循环进行下一次循环
				}
			}
			System.out.println(i);	
				
}
}

五.break,continue和return语句的使用
break:结束当前循环
continue:结束当次循环
return:无需判断条件返回一个值

//案例
{
    
    
label:for(){
    
    
		for(int i = 1; i < 10 ;i++){
    
    
			if(i % 4 == 0){
    
    
				break;//输出123
				continue;//输出1235679
				break label;//结束对应标签的循环
				continue label;//结束对应标签的当次循环
			}
			System.out.println(i);
		}
}
}

结束:希望对你有用!

猜你喜欢

转载自blog.csdn.net/OrangeNotFat/article/details/108552129