Java,变量与运算符
虽然想把Java的基本语法速通了,但是看完了之后还是感觉有些东西与c有所不同,而且对于一些基本的计算机眼原理也有更深的理解,所以还是有必要写一些总结。
一、关键字、保留字
关键字:被Java赋予特殊含义的字符串。
>官方规范中有50个关键字
>true、false、null虽然不是关键字,但是可以当作关键字看待
保留字:goto、const
二、标识符
标识符:凡是可以自己命名的地方的都是标识符。
如:类名、变量名、方法名、接口名、包名、常量名等
标识符命名规则:必须遵守否则编译不通过
>由26个英文字母大小写,0~9,_或$组成
>不可以用数字开头
>不可以使用关键字和保留字,但能包含关键字和保留字
>Java严格区分大小写,长度无限制
>标识符不能包含空格
三、变量的基本使用
1.变量的理解:内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化
2.变量的构成:数据类型、变量名、存储的值
3.Java中变量的声明格式:数据类型 变量名 = 变量值
class VariableTest1
{
public static void main(String[] args)
{
//定义变量的方式1:
char gender;//过程1:变量的声明
gender = '男';//过程2:变量的赋值(又叫初始化)
gender = '女';
//定义变量的方式2:声明与初始化合并
int age = 10;
System.out.println(age);
System.out.println("age = " + age);
System.out.println("gender = " + gender);
//在同一个作用域内,不能声明两个同名的变量
//char gender = '女';
gender = '男';
//由于number之前没有声明类型,即当前number变量没有提前定义。所以编译不通过。
//number = 10;
byte b1 = 127;
//超出byte的范围
//byte b1 = 128;
}
}
说明:
1.定义变量时,变量名要遵守标识符命名的规则和规范。
2.变量都有其作用域,变量只在作用域范围内有效。
3.在同一作用域内,不能声明两个同名的变量。
4.定义好变量后,就可以通过变量名的方式对变量进行调用和运算。
5.变量赋值时,必须满足变量的数据类型,并且在数据类型有效范围内变化。
四、基本数据类型变量
1.Java中的变量按照数据类型来分类:
基本数据类型:
整型:byte、short、int、long
浮点型:float、double
字符型:char
布尔型:boolean
引用数据类型:
类(class)
数组(array)
接口(interface)
枚举(enum)
注解(record)
测试整型和浮点型:
class VariableTest
{
public static void main(String[] args)
{
int i1 = 10;
int i2 = i1;
long l1 = i1;
float f1 = l1;
byte b1 = 10;
int i3 = b1;
//byte b2 = b1 +i1;
/*VariableTest.java:30: 错误: 不兼容的类型: 从int转换到byte可能会有损失
byte b2 = b1 +i1;
^
1 个错误*/
//特殊的情况1:
//byte 、short之间做运算结果会自动类型转换为int类型。
byte b3 = 12;
short s1 =10;
//short s2 = b3 + s1;
//编译不通过
//byte b4 = b3 + s1;
//编译不通过
int i4 = b3 + s1;
//编译通过
//特殊情况2:char
char c1 = 'a';
//char c2 = c1 + b3;
//编译不通过
int i5 = c1 + b3;
//编译通过
//***********************************
//练习1:
long l2 = 123L;
long l3 = 123;
//与l2不同,l3为123的int类型自动类型提升为long类型。
//long l4 = 123123123123;
//123123123123理解为int类型,因为超出了int范围,所以报错。
long l5 = 123123123123L;
//此时的123123123123L是使用8字节储存的long类型的值。
//练习2:
float f2 = 12.3F;
//float f3 = 12.3;
//不满足自动类型提升的范围(double ---> float)。
//练习3:
//规定1:整型常量规定为int类型。
byte b5 = 10;
//byte b6 = b5 + 1;
//编译不通过
int i6 = b5 + 1;
//规定2:浮点型常量规定为double类型。
//float f3 = b5 + 12.3;
//编译不通过
double d1 = b5 + 12.3;
}
}
测试字符型和布尔型:
class VariableTest2
{
public static void main(String[] args)
{
char c1 = 'a';
char c2 = '中';
char c3 = '1';
char c4 = '%';
char c5 = 'y';
//编译不通过
//char c6 = '';
//char c7 = 'ab';
//表示形式2:直接使用Unicode值来表示字符型常量。
char c8 = '\u0036';
System.out.println(c8);
//表示形式3:使用转义字符
char c9 = '\n';
char c10 = '\t';
System.out.println("hello" + c10 + "world");
//表示形式4:使用具体字符对应的数值(比如ASCLL码)
char c11 = 97;
System.out.println(c11);//输出为:a
//布尔类型:boolean
//只要两个取值:true、false
boolean bo1 = true;
boolean bo2 = false;
//编译不通过
//boolean bo3 = 0;
//常使用在流程控制语句中。
boolean isMarried = true;
if (isMarried)
{
System.out.println("已婚");
}
else
{
System.out.println("单身");
}
//在内存分配中Boolean类型变量占用4个字节。
}
}
数据类型变量间的运算规则
1.自动类型提升
/*
测试基本数据类型变量间的运算规则。
1.可以做运算的基本数据类型有7种,不包括boolean类型。
2.运算规则包括:
(1)自动类型提升
(2)强制类型转换
规则:当容量小的变量与容量大的变量做运算时,结果制动转换为容量大的数据类型。、
byte、short、char ---> int ---> long ---> float ---> double
特殊:byte 、short、char之间做运算结果会自动类型转换为int类型。
规定:整型常量规定为int类型,浮点型常量规定为double类型。
说明:这里指的容量大与小,并不是指占用内存空间的大小,而是指表示数据的范围的大小。
如:long(8字节)与运算float(4字节)会转换为float类型。
*/
class VariableTest
{
public static void main(String[] args)
{
int i1 = 10;
int i2 = i1;
long l1 = i1;
float f1 = l1;
byte b1 = 10;
int i3 = b1;
//byte b2 = b1 +i1;
/*VariableTest.java:30: 错误: 不兼容的类型: 从int转换到byte可能会有损失
byte b2 = b1 +i1;
^
1 个错误*/
//特殊的情况1:
//byte 、short之间做运算结果会自动类型转换为int类型。
byte b3 = 12;
short s1 =10;
//short s2 = b3 + s1;
//编译不通过
//byte b4 = b3 + s1;
//编译不通过
int i4 = b3 + s1;
//编译通过
//特殊情况2:char
char c1 = 'a';
//char c2 = c1 + b3;
//编译不通过
int i5 = c1 + b3;
//编译通过
//***********************************
//练习1:
long l2 = 123L;
long l3 = 123;
//与l2不同,l3为123的int类型自动类型提升为long类型。
//long l4 = 123123123123;
//123123123123理解为int类型,因为超出了int范围,所以报错。
long l5 = 123123123123L;
//此时的123123123123L是使用8字节储存的long类型的值。
//练习2:
float f2 = 12.3F;
//float f3 = 12.3;
//不满足自动类型提升的范围(double ---> float)。
//练习3:
//规定1:整型常量规定为int类型。
byte b5 = 10;
//byte b6 = b5 + 1;
//编译不通过
int i6 = b5 + 1;
//规定2:浮点型常量规定为double类型。
//float f3 = b5 + 12.3;
//编译不通过
double d1 = b5 + 12.3;
}
}
2.强制类型转换
/*
规则:
1、如果需要将容量大的类型转换为容量小的类型,需要用到强制类型转换。
2、强制类型转换需要使用强转符:()。在()内指明需要转换的数据类型。
3、强制类型转换的过程中,可能导致精度损失。
*/
class VariableTest3
{
public static void main(String[] args)
{
double d1 = 12;//自动类型提升
//int i1 = d1;
int i2 = (int) d1;
System.out.println(i2);
long l1 = 123;
//short s1 = l1;
short s2 = (short) l1;
System.out.println(s2);
//精度损失的例子1:
double d2 = 12.9;
int i4 = (int) d2;
System.out.println(i4);//输出12
//精度损失的例子2:
int i5 = 128;
byte b1 = (byte) i5;
System.out.println(b1);//输出-128
}
}
六、String类的使用、与基本数据类型变量间的运算
String的认识:字符串。使用一对""表示,内部包含0个、1个或多个字符。
String与8种基本数据类型变量间的运算:+表示连接的意思。运算的结果为String类型。
/*
基本数据类型与String类的运算
1、String类,属于引用数据类型,俗称字符串。
2、String类型的变量,可以使用一对“”的方式来赋值。
3、String声明的字符串内部,可以包含0个,1个或多个字符。
4、String与基本数据类型的运算只能相加,其中‘+’表示连接的意思。
*/
class StringTest
{
public static void main(String[]args)
{
String str1 = "HelloWorld!";
System.out.println("str1");//输出str1
System.out.println(str1);//输出Hello World!
int num1 = 10;
boolean b1=true;
String str2 = "hello";
System.out.println(num1 + str2);//输出10hello
System.out.println(b1 + str2);//输出truehello
String str3 = str2 + b1;
String str4 = str2 + b1 + num1;
System.out.println(str3);//输出hellotrue
System.out.println(str4);//输出hellotrue10
//String str5 = num1 + b1 + str2;
//编译不通过,因为num1与b1分别为int与boolean类型,都为基本数据类型‘+’会进行相加,但是boolean类型无法与int类型相加。
//而上面的str4中,str2先与b1连接成一个新的字符串,再与num1连接。
}
}
七、运算符
1.算术运算符
包括:+ 、 - 、* 、/ 、% 、(前)++ 、++(后) 、(前)-- 、--(后)
2.赋值运算符
包括:= 、+= 、-= 、*= 、/= 、%=
3.比较运算符
包括:== 、!= 、> 、 < 、>= 、<= 、instanceof(后面再学)
其中:除instanceof外均适用于基本数据类型(> 、 < 、>= 、<=不适用于boolean类型)运算结果为boolean类型。
== 、!=可以适用于引用数据类型。
4.逻辑运算符
包括:&、&&、|、||、!、^
&与&&、|与||的区别为:&与|都会将两个判断条件都执行一次;
而&&如果前为false则不执行下个条件直接完成判断,前为true时才会将两个条件都判断一次;
||也一致如果前为true则不执行下个条件直接完成判断,前为false时才会将两个条件都判断一次。
5.位运算符
包括:<<、>>、>>>、&、|、^、~
<<:在一定范围,每向左移动一位,结果就在原有基础上*2。
>>:在一定范围,每向右移动一位,结果就在原有基础上/2。
6.条件运算符
三目运算符(三元运算符):(条件表达式)?表达式1:表达式2
更多推荐



所有评论(0)