Java基础语法01——变量与运算符
Java基础语法01——变量与运算符
本文是对Java基础语法的第一部分的学习,包括注释;标识符的命名规则与规范;变量的数据类型分类以及转换;以及六种运算符(算术、赋值、比较、逻辑、三元和位运算符)。
注释(commment)
书写注释是一种良好的习惯,注释是写给人看的,并不会在代码运行时展示出来。注释主要分为以下三类:单行注释、多行注释、文档注释
-
单行注释:一行,格式://
-
多行注释:一段,格式:/* 注释文字 */
-
文档注释:是专门为了用javadoc工具自动生成文档而写的注释,它是一种带有特殊功能的注释。
格式:/** 文字 */ (这一部分还有很多需要扩展学习的地f方)
标识符
identifier在Java中,有很多需要自己起名字的地方,而这些就被称为标识符。
用来命名:类名、变量名、方法名、包名、接口名、常量名等。
-
标识符命名规则:【必须遵循,否则会报错】
- 首字母只能以英文字母大小写、$、下划线(_)开始
- 首字母之后可以是英文字母大小写、$、下划线(_)或数字的任意组合
- 标识符的命名是大小写敏感的
- 不能使用关键字(被java语言赋予了特殊含义,用作专门用途的字符串,所有字母全部是小写的),但可以包含
- 可以使用中文命名,但是一般不建议使用
-
Java标识符的命名规范:【非必须遵守,但是一种良好的代码习惯】
- 类名、接口名:多单词组成时,每个单词的首字母大写:XxxYyyZzz
- 变量名、方法名:首个单词全部小写,其余单词首字母大写:xxxYyyZzz
- 包名:所有字母都小写:xxxyyyzzz
- 常量名:所有字母都大写且每个单词用下划线连接:XXX_YYY_ZZZ
-
合法标识符举例:age、$salary、_value、__1_value
-
非法标识符举例:123abc、-salary
变量
- Java是一种强类型语言,即所有的变量都必须严格符合规定,所有变量都必须先定义再使用。
- 变量的定义格式:
数据类型 变量名 = 值;
- 变量只在它的作用域内有效,一般作用域是{}
- 在一个作用域内不能声明重名的多个变量
数据类型
数据类型分为基本数据类型和引用数据类型两种
- 整数类型:byte(1字节=8bit)、short(2字节)、int(4字节)、long(8字节)
byte范围:-128~127
定义long类型时,变量的值后要加L或l,例如:long l = 1000000L
整数类型常量默认为int型
- 浮点类型:float(4字节,但其表示的数范围比long大)、double(8字节)
定义float类型时,变量的值后要加F或f,例如:float f = 100.1f
浮点类型常量默认为double型
- 字符型:char(1字符=2字节)
声明char类型时,使用一对单引号(‘ ’)进行赋值,只能对一个字符进行赋值
表示方法:(1)表示一个字符(2)转义字符{\n——换行符,\t——制表符}(3)使Unicode字符集表 示字符{eg:\u0043——C}
-
布尔类型:boolean,只有true\false两个值,常常用在条件判断和循环结构中
-
拓展:
\\n
运行时会输出\n(不再表示换行的意义);"\"
可以将符号变成普通的字符
类型转换
- 首先知道一下基本数据类型容量大小的顺序:byte、short、char——>int——>long——>float——>double(顺序由低容量到高容量)(此处容量大小,指的是类型的数据的范围大小)
- 类型转换有两种类型:自动转换、强制转换(注意:不包括布尔类型)
- 自动转换:低——高
- 强制转换:高——低,需使用强转符:(强转类型)变量名 【可能导致精度损失】
- 举例:
//强转类型举例
public class Demo01{
public static void main(String[] args){
double d1 = 129.4;
int i1 = (int)d1;//将double型强转为int型
System.out.println(i1);//运行结果为129
}
}
//自动提升类型举例
public class Demo02{
public static void main(String[] args){
byte b1 = 12;
char c1 = 'a';
int i1 = 129;
int i2 = b1 + c1;//byte\char\short互相做运算或自身做运算时,都将自动转换成int类型
int i3 = b1 + i1;//当容量大的和容量小的做运算时,结果为容量大的类型
System.out.println(i2);//int型——12+97
System.out.println(i3);//int型——12+129
}
}
拓展1——String字符串类型
- 属于引用数据类型
- 声明String类型时,使用一对双引号,表示字符串
- String类型可以与其他8中基本类型做运算,且只能是连接运算:+,运算结果仍为String类型
拓展2——不同进制间的转换(了解)
所有数字在计算机底层都以二进制存在
二进制(以0b或0B开头)、十进制、八进制(以0开头)、十六进制(以0x或0X开头,用0-9及A-F[16]表示)
public class Test1{
public static void main(String[] args){
int num1 = 0b110;//二进制???为啥这条运行不了???
int num2 = 123;//十进制
int num3 = 0127;//八进制
int num4 = 0x123A;//十六进制
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
System.out.println("num3 = " + num3);
System.out.println("num4 = " + num4);
}
}
运算符
算术运算符
算术运算符包括正负号(+、-)、加减乘除(+、-、*、/)、取模(取余)(%)、++(前++、后++)、--(前--、后--)
通过下面的程序代码解释相关的运算(正负号和加减乘比较简单就不说了):
-
//除法运算 public class Demo01{ public static void main(String[] args){ int num1 = 12; int num2 = 7; int num3 = num1 / num2; System.out.println("num3 = " + num3);//1 double num4 = num1/num2;//自动类型提升为double System.out.println("num4 = " + num4);//1.0 double num5 = num1/num2+0.0; System.out.println("num5 = " + num5);//1.0 double num6 = num1/(num2+0.0); System.out.println("num6 = " + num6);//1.714...(除不尽) } } //掌握住基本数据类型运算的本质
-
//取余运算 public class Domo02{ public static void main(String[] args){ int i1 = 12; int i2 = 5; System.out.println("i1%i2 = " + i1%i2);//2 int ii1 = -12; int ii2 = 5; System.out.println("ii1%ii2 = " + ii1%ii2);//-2 int iii1 = 12; int iii2 = -5; System.out.println("iii1%iii2 = " + iii1%iii2);//2 int iiii1 = -12; int iiii2 = -5; System.out.println("iiii1%iiii2 = " + iiii1%iiii2);//-2 //取模结果的符号于被取模数相同 } }
-
//前++(--):先自增(减)1.后做运算 //后++(--):先做运算,后自增(减)1 public class Demo03{ public static void main(String[] args){ int a = 5; int b = ++a; System.out.println("a="+a+",b="+b);//a=6,b=6 b = a++; System.out.println("a="+a+",b="+b);//a=7,b=6 b = --a; System.out.println("a="+a+",b="+b);//a=6,b=6 b = a--; System.out.println("a="+a+",b="+b);//a=5,b=6 } } //自增运算不改变 变量的数据类型
赋值运算符
赋值运算符号:=
扩展赋值运算符:+=、-=、*= 、/=、%=
//+=(其余的类似)
public class Demo04{
public static void main(String[] args){
int i1 = 7;
i1 += 2;//相当于i1=i1+2
System.out.println(i1);//9
short i2 = 7;
//i2 = i2 + 2;//编译失败,因为数据类型
i2 += 2;//结论:不会改变变量的数据类型
System.out.println(i2);//9
int i3 = 1;
i3 *= 0.2;//i3=i3*0.2(注意数据类型是整型的)
System.out.println(i3);//0
i3 += 1;//i3=i3+1
System.out.println(i3);//1
}
}
/*
1. 在开发中,使得整数+2的方法:
num=num+2;
num+=2;(推荐)
2. 在开发中,使得整数+1的方法:
num=num+1;
num+=1;
num++;(推荐)
*/
比较运算符
比较运算符:==、!=、<、>、<=、>=、instanceof
比较运算符的结果都是布尔类型:true或false
//注意区分好==和=
public class Demo05{
public static void main(String[] args){
boolean b1 = true;
boolean b2 = false;
System.out.println(b2 == b1);//false
System.out.println(b2 = b1);//true
}
}
逻辑运算符
- 逻辑运算符:&(逻辑与)、&&(短路与)、|(逻辑或)、||(短路或)、!(逻辑非)、^(逻辑异或)
- 逻辑运算符两边操作的都是布尔类型的变量
- 区分:&和&&(二者的运算结果相同,只是运行过程不同)【|、||的区分类似】
&:左右两边都运行
&&:如果左边的值可以判断出整体的值,那么右边的就不再运行
//举例说明两者区别
public class Demo05{
public static void main(String[] args) {
boolean b1=false;
int n1 =10;
if(b1 & (n1++ >0)){
System.out.println("我在北京");
}else{
System.out.println("我在南京");
}
System.out.println("n1=" + n1);
//我在南京
n1=11
boolean b2=false;
int n2 =10;
if(b2 && (n2++ >0)){
System.out.println("我在北京");
}else{
System.out.println("我在南京");
}
System.out.println("n2=" + n2);
//我在南京
n1=10
}
}
位运算符
(了解即可,平时用到的不太多)
-
位运算符:<<(左移)、>>(右移)、>>>(无符号右移)、&(与)、|(或)、^(异或)、~(取反)
-
位运算符运算的是整数的二进制,操作的是整数
-
左移<<:将整数的二进制数整体向左移,在空缺位补0【规律:<<n(左移n位) = 相当于原数乘2^n】
右移>>:将整数的二进制数整体向右移,如果原整数为正数,则在空缺位补0;若为负数,则补1【规律:<<n(右移n位) = 相当于原数除以2^n】
无符号右移>>>:右移,补0
-
与运算&:12&5——写成二进制——只有都是1才1,其余情况是0——结果:4
00001100——12
00000101——5
00000100——4
或运算|:12|5——写成二进制——只要有一个1就是1——结果:13
00001100——12
00000101——5
00001101——13
异或运算:125——写成二进制——两者不相同就是1——结果:9
00001100——12
00000101——5
00001001——9
取反运算:12——写成二进制——包括最高位按位取反
00001100——12
11110011—— -13
三元运算符
-
三元运算符结构:(条件表达式)?表达式1:表达式2
-
注意几点:条件表达式的结果须是布尔类型
若条件表达式的结果为true,则执行表达式1;若条件表达式的结果为false,则执行表达式2
表达式1与表达式2的值要求可以统一为一个数据类型