JAVA 语言基础
2.0 关键字
- 关键字:被Java语言赋予特殊含义的单词,不能乱用!
- 关键字特点:组成关键字的字母全部小写
- 关键字注意事项:goto和const作为保留存在,不推荐使用。高级记事本对其有特殊颜色标记
2.1 标识符的概述和组成规则
在编程过程中,经常需要在程序中定义一些符号来标记一些名称,如包名、类名、方法名、参数名、变量名等,这些符号被称为标识符。标识符可以由任意顺序的大小写字母、数字、下划线(_)和美元符($)组成,但标识符不能以数字开头,不能是Java中的关键字,数字不能开头
2.2 标识符中常见的命名规范
在Java程序中定义的标识符必须严格遵守上面列出的规则,否则程序在编译时会报错。除了上面列出的规则,为了增加代码的可读性,还需要遵守以下规范:
- 包名所有字母一律小写,单词与单词之间用.连接 例如openlab.java.test。
- 类名和接口名每个单词的首字母都要大写,例如ArrayList、StringDemo。大驼峰
- 常量名所有字母大写,单词之间用下划线连接,例如INTEGER_MAX、DAY_OF_MONTH。
- 变量名和方法名的第一个单词首字母小写,从第二个单词开始每个单词首字母大写,例如userName、getUserName。小驼峰
- 在程序中,应该尽量使用有意义的英文单词来定义标识符,使得程序便于阅读
2.3 注释概述及其分类
在编写程序时,为了使代码易于阅读,通常会在实现功能的同时为代码加一些注释。注释是对程序的某个功能或者某行代码的解释说明,它只在Java源文件中有效,在编译程序时编译器会忽略这些注释信息,不会将其编译到class字节码文件中去。
Java中注释分类格式:
- 单行注释 //注释文字
- 多行注释 /注释文字/ 多行注释中不能有多行注释
- 文档注释 /*注释文字/
2.4 注释的作用
解释说明程序,提高程序的阅读性可以帮助我们调试程序
严重提醒:
- 注释是一个程序员必须要具有的良好编程习惯
- 初学者编写程序可以养成习惯:先写注释再写代码
将自己的思想通过注释先整理出来,再用代码去体现
因为代码仅仅是思想的一种体现形式而已
2.5 常量的概述和使用
常量就是在程序中固定不变的值,是不能改变的数据。例如数字1、字符‘a’、浮点数3.14等。
Java中包含的常量如下所示。字面值常量(直接在程序中出现的数据),自定义常量
- 整型常量
整型常量是整数类型的数据,有二进制、八进制、十进制、十六进制4种表示形式,具体表示形式如
下。
二进制:由数字0和1组成的数字序列。在JDK1.7中允许使用字面量来表
示二进制数,前面要以0b或者0B开头,目的是为了和十进制进行区分,如
0b1001。
八进制:以0开头,并且其后由0~7范围内的整数组成的数字序列,如
0432。
十六进制:以0x或0X开头,并且其后由09、AF组成的数字序列,如
0Xed13。 - 浮点数常量
浮点数常量就是数学中用到的小数,分为float单精度浮点数和double双精度浮点数两种类型。
其中,单精度浮点数后面以F或f结尾,而双精度浮点数以D或d结尾。当然,在使用浮点数时,也可以不写结尾处的后缀,此时虚拟机默认是double双精度浮点数。 - 字符常量
字符常量用于表示一个字符,一个字符常量要用一对英文半角格式的单引号’’引起来,它可以是英文字母、数字、标点符号以及由其他转义序列来表示的特殊字符。
其中’\u0000’表示一个空白字符,即在单引号之间没有任何字符。之所以能这样表示,是因为Java采用的是Unicode字符集,Unicode字符以\u开头。 - 字符串常量
字符串常量用于表示一串连续的字符,一个字符串常量要用一对英文半角格式的双引号””引起来。 - 布尔常量
布尔常量即布尔型的两个值true和false,该常量用于区分一个事物的真与假。 - null常量
null常量只有一个值null,表示对象的引用为空。
2.6 进制转换
Java针对整数常量提供了四种表现形式:
二进制
八进制
十进制
十六进制
进制:就是进位制,是人们规定的一种进位方法。对于任何一种进制,X进制,就表示某一位置上的
数运算时逢X进一位。二进制就是逢而进一,以此类推。
2.7 变量的概述及格式
变量:在程序执行的过程中,在某个范围内其值可以发生改变的量。
变量定义格式:
数据类型 变量名=常量值;
深入:
- 变量其实就是内存区域中的一个小空间
- 该空间有其物理地址值,但是不方便访问,所以用变量名去替代
- 该空间是有大小的,具体大小看具体数据类型
- 该空间的值只能在能够相互兼容的两种数据类型之间进行改变
- 常量值不是存在变量的小空间里面的,而是存在常量池
- 变量小空间里存储的仅仅是常量在常量池中的地址
注意:变量存储的仅仅是地址,常量池中常量的地址,堆内存中对象的地址
2.8 数据类型的概述和分类
Java语言是静态编译型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。
在定义变量时必须声明变量的类型,在为变量赋值时必须赋予和变量同一种类型的值,否则程序会报错。
在Java中所有的整数常量默认是int型,所有的小数常量默认是double型。
- 整数类型变量
整数类型变量用于存储整数数值,即没有小数部分的值。为了给不同大小范围的整数合理地分配存储空间,整数分为4种不同的类型:字节型(byte)、短整型(short)、整型(int)和长整形(long),4中类型所占存储空间的大小以及取值范围如下所示。
- 浮点类型变量
浮点类型变量用来存储小数数值。在Java中,浮点数类型分为两种:单精度浮点数(float)和双精度(double)。double型所表示的浮点数比float型更精确,两种浮点数所占存储空间大小以及取值范围如下所示。
- 字符类型变量
字符类型变量用于存储一个单一字符,在Java中用char表示。Java中每个char类型的字符都会占用2个字节。在给char类型的变量赋值时,需要使用一对英文半角格式的单引号’’把字符括起来,如’a’,也可以将char类型的变量赋值为0~65535范围内的整数,计算机会自动将这些整数转化为所对应的字符,如数值97对应的字符为’a’。 - 布尔类型变量
布尔型变量用来存储布尔值,在Java中用boolean表示,该类型的变量只有两个值,即true和
false。
2.9使用变量的注意事项
- 作用域:变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。相同的作用域不能定义两个重名的变量。
- 初始化值:没有初始化值不能直接使用
在一行上建议之定义一个变量,可以定义多个,但不建议
2.10 数据类型转换
在程序中,当把一种数据类型的值赋给另一个数据类型的变量时,需要进行数据类型转换。根据转换方式的不同,数据类型转换可分为两种:自动类型转换和强制类型转换。
在程序中,当把一种数据类型的值赋给另一个数据类型的变量时,需要进行数据类型转换。根据转换方式的不同,数据类型转换可分为两种:自动类型转换和强制类型转换。
- 自动类型转换
自动类型转换也叫隐式类型转换,指的是两种数据类型在转换的过程中不需要显示地进行声明。要实现自动类型转换,必须同时满足两个条件,第一是两种数据类型彼此兼容,第二是目标类型的取值范围大于源类型的取值范围。 - 整数类型之间可以实现转换,如byte类型的数据可以赋值给short、int、long类型的变量,short、char类型的数据可以赋值给int、long类型的变量,int类型的数据可以赋值给long类型的变量。
- 整数类型转换为float类型,如byte、char、short、int类型的数据可以赋值给float类型的变量。
- 其他类型装换位double类型,如byte、char、short、int、long、float类型的数据都可以赋值给double类型的变量。
- 强制类型转换
强制类型转换也叫显示类型转换,指的是两种数据类型之间的转换需要进行显示地声明。当两种类型彼此不兼容,或者目标类型取值范围小于源类型时,自动类型转换无罚进行,此时需要进行强制类型转换。 - boolean类型不能转换为其他的数据类型
默认转换:byte,short,char→int→long→float→double
强制类型转换:目标类型 变量名=(目标类型)(被转换的数据)
class Test1{
public static void main(String[] args){
//整型常量默认int 4byte 浮点型常量默认double 8byte
//定义一个byte变量 1byte
byte b1=10;
//00000000 0000000 0000000 00001010 四斤容量的碗里有二两饭
// 00001010 一斤容量的碗里能放二两饭
//不兼容的类型: 从int转换到byte可能会有损失
//byte b2=128;
//00000000 0000000 0000000 10000000 四斤容量的碗里有一斤二两饭
// 10000000 一斤容量的碗里最多能放一斤饭
//悬念:反码 补码 负数二进制码
byte b3=(byte)128;//强制转换
System.out.println(b3);//Byte
//定义一个short变量 2byte
short s1=180;
//不兼容的类型: 从int转换到short可能会有损失
short s2=(byte)6666666;//Short
System.out.println(s2);
//定义一个int变量 4字节
int i1=123123123;
System.out.println(i1);
System.out.println(Integer.MAX_VALUE);//MIN_VALUE
//定义一个long变量 8字节
//错误: 过大的整数:
System.out.println(Long.MAX_VALUE);
long l1=123123123123123123L;//整数常量(int)+L->Long常量
System.out.println(l1);
System.out.println("==============");
byte b4=100;
byte b5=100;
byte b6=(byte)(b4+b5);//因为b4+b5的结果可能会超出byte
//不兼容的类型: 从int转换到byte可能会有损失
System.out.println(b6);
short s3=5;
short s4=7;
//不兼容的类型: 从int转换到short可能会有损失
//short s5=s3+s4;
int i2=Integer.MAX_VALUE;
int i3=1;
int i4=i2+i3;
System.out.println(i4);
//上述的byte和short变量之和是个int 然后从int转byte/short的时候 可能损失
//int和int之和本身还是int 再赋给int 没问题
//哪怕是超出int范围了,也能加
}
}
2.11 算数运算符的基本用法
显示格林时间
import java.util.Scanner;
class java2_4
{
public static void main (String[] ages){
System.out.println("Enter the time zone offsets of GMT :");
Scanner scanner=new Scanner(System.in);
int time=scanner.nextInt();//时区偏移量
long totalMilliseconds=System.currentTimeMillis();
//获取从时间戳到当前时间的总毫秒数
long totalSecond=totalMilliseconds/1000;
//转化为总秒数
long totalMinute=totalSecond/60;
//转化为总分钟数
long totalHour=totalMinute/60;
//转化为总小时数
long currenthour=(totalHour%24)+time;
//计算当前小时+时区偏移量(time)
long currentminute=totalMinute%60;
//计算当前分钟
long currentsecond=totalSecond%60;
//计算当前秒数
System.out.println("The currrent time is"+currenthour+":"+currentminute+":"+currentsecond);
//输出当前时间
}
}
2.12 赋值运算符的基本用法
2.13 比较运算符的基本用法
2.14 逻辑运算符的基本用法
在使用逻辑运算符的过程中,需要注意以下几个细节:
逻辑运算符可以针对结果为布尔值的表达式进行运算。
运算符&和&&都表示与操作,当且仅当运算符两边的操作数都为true时,其结果才是true,否则结果为false。当运算符&和&&的右边为表达式时,两者在使用上还有一点的区别。在使用&进行运算时,不论左边为true或者false,右边的表达式都会进行运算。如果使用&&进行运算时,当左边为false时,右边的表达式不会进行运算,因此&&被称为短路与
class Test4{
public static void main(String[] args){
/*
运算符:
算数运算符:+ - * / % ++ --
赋值运算符
比较运算符
逻辑运算符
位运算符
三元运算符
*/
int i=11;
System.out.println(i%5);//1
//取余 能用在什么地方
//1.判断奇偶 偶数%2=>0 奇数%2=>1
//2.周期计算 1月1号是周二 1月20号是周几?
/*
0 周一
1%7=1 周二
2 周三
3 周四
4 周五
5 周六
6 周日
18%7=4
*/
System.out.println(-10%3);//-1
System.out.println(10%-3);//1
System.out.println(-10%-3);//-1
//自增 n++ ++n 自减同理
//++n 直接加1再参与运算 不对的!
//n++ 先调用再加1
/* n++
第一步:开辟临时存储区
第二步:将变量的值复制给存储区
第三步:变量自身的值+1
第四步:存储区的值等待被调用(赋值,打印)
*/
int a=3;
a++;//a=4
System.out.println(a);//a=4
System.out.println(a++);//4 a=5
int b=a++;//b=5 a=6
System.out.println(a);//6
System.out.println(b);//5
a=a++;//a=7
System.out.println(a);//6
a=a++;//a=8
System.out.println(a);//6
//赋值运算符:+= -= *= /= %=
int age=10;
age+=10;//age=age+10
age*=10;//age=age*10
short s=10;
s+=100000000;//s=s+10
//不兼容的类型: 从int转换到short可能会有损失
//s=s+10;
System.out.println(s);
//比较运算符:> < >= <= == != 计算的结果为布尔类型
//System.out.println(3>2>1);
int num1=3;//0x123
int num2=5;//0x321
//比的其实就是两个变量中个存储的常量在常量池中的地址
System.out.println(num1==num2);
System.out.println(num1!=num2);
//逻辑运算符:& | ! ^ && || 结果为布尔类型
//与 有假则假 全真则真
//或 有真则真 全假则假
//非 取反
//异或 相同为假 不同为真
System.out.println(3>2&1>2);
System.out.println(3>2|1>2);
System.out.println(3>2^1>2);
System.out.println(!(3>2));
int p=0;
int v=0;
System.out.println(p++>0&v++>0);
System.out.println(p);//1
System.out.println(v);//1
System.out.println(p++>1&&v++>1);
System.out.println(p);//2
System.out.println(v);//1
//& 与 && 的区别在于:&两边都执行 &&如果前者为假 后者不执行
// || 前者为真 则后者不执行
//位运算: & | ^ >> <<
int r=10;
int t=6;
System.out.println(r&t);//2
/*
1010
0110
0010
*/
System.out.println(r|t);
/*
1010
0110
1110
*/
System.out.println(r^t);
/*
1010
0110
1100
*/
System.out.println(t>>2);//t/2^2
//0110->0001
System.out.println(t<<4);//t*2^4
//0110->0110 0000
//0001->0100
}
}
2.15 三元运算符的基本用法
- 数据类型 变量名=布尔表达式?值1:值2;
2.16 输入和输出功能
- Scanner scanner=new Scanner(System.in);
- print()
- println()
- printf()
class Test3{
public static void main(String[] args){
int a=3;
int b=7;
int c=a+b;
System.out.println(c);
int d=10;
double e=10;
double f=10.1;
System.out.println(c==d);
System.out.println(e==d);
//Intger Double
System.out.println(d==f);//d->double
int i='c';//'c'->int
byte j=24;
i=j;//j->int
//i=f;
System.out.println(i);
System.out.println('a'==f);
//字符串与别的数据类型相加 + 是连接符
String s="123";
System.out.println(s+1);//"123"+1->"1231"
//二元运算符 '-' 的操作数类型错误
//System.out.println(s-1);
System.out.println(1+2+3+s+(1+2+3));
int age=20;
int money=200;
//"一个20岁的男生手里有200块钱"
System.out.println("一个"+age+"岁的男生手里有"+money+"块钱");
System.out.println('a'+10+3.14);
byte b1=2;
char c1='c';
System.out.println(b1+c1+"!!");//b1+c1=int
short s1=3;
int i1=4;
long l1=5;
System.out.println(b1+s1);//short
System.out.println(b1+s1+i1);//int
System.out.println(b1+s1+i1+l1);//long
float f1=3.0F;
System.out.println(b1+s1+i1+l1+f1);//float
double d1=3.14;
System.out.println(b1+s1+i1+l1+f1+d1);//double
boolean flag=true;//false;
//二元运算符 '+' 的操作数类型错误
System.out.println(true&&true);//只能逻辑运算
//三元运算符:数据类型 变量名=布尔表达式?值1:值2;
char c=97>98?97:98;
System.out.println(c);
}
}