java--第三章:java语言基础2
1 关键字
概念:被java语言赋予特殊含义的单词
特点:组成关键字的字母全部小写
注意事项:goto和const作为保留字(目前只是保留,以后有可能作为关键字)存在,目前并不使用;类似Notepad++这样的高级记事本,针对关键字有特殊的颜色标记,非常好区分。
常用的关键字:
-
定义数据类型:class interface byte short int long float double char boolean void 定义数据类型值:true false null 定义流程控制:if else switch case default while do for break continue return 定义访问权限修饰符:private protected public 定义类、函数、变量修饰符:sbstract final static synchronized 定义类与类之间的关系:extends implements 定义建立实例、引用实例及判断实例:new this super instanceof 定义异常处理:try catch finally throw throws 用于包:package import 其他修饰符:native等
2 标识符(起名字时的标记)
概念:给类、接口、方法、变量等起名字时使用的字符序列
组成规则:英文大小写字母;数字字符;$和_
注意事项:不能以数字开头;不能是java的关键字;严格区分大小写
常见命名规则:(见名知意)
1包:其实就是文件夹,用于把相同的类名进行区分
全部小写
单级:liuyi
多级:cn.itcast
2 类或者接口:
一个单词:单词的首字母必须大写,比如Student,Dog
多个单词:每个单词的首字母必须大写,比如HelloWorld,MakeName
3方法或者变量:
一个单词:单词的首字母小写,比如main
多个单词:从第二个单词开始,每个单词的首字母大写,比如studentAge
4常量:
一个单词:全部大写,比如PI
多个单词:每个字母都大写,用_隔开,比如STUDENT_MAX_AGE
3 注释
初学者一定要先写注释,再写代码
概述:用于解释说明程序的文字
分类:
单行注释:// 注释文字
多行注释:/* 注释文字 */ (多行注释不可以嵌套使用,单行注释可以嵌套使用)
文档注释:/** 注释文字 */(被javadoc工具解析生成一个说明书,面向对象部分讲解)
比如把HelloWorld.java这个案例写成带注释版的,我们可以像下面这么写
/* 需求:写一个java程序,把"HelloWorld"这句话输出在控制台 分析: A:要写一个java程序,必须定义类 B:把数据能够输出,说明程序是可以独立运行的。而程序要独立运行,必须定义main方法。 C:把数据输出在控制台,必须使用输出语句 实现: A:java语言提供了一个关键字:class用来定义类,后面跟的是类名 B:main方法的格式是固定的: public static void main(String[] args){ } C:输出语句的格式是固定的: System.out.println("HelloWorld") */ class HelloWorld { /* 为了使程序能够独立运行,定义main方法 main方法是程序的入口 被jvm调用 */ public static void main(String[] args){ //为了把数据显示在控制台,使用输出语句 System.out.println("HelloWorld"); } }
作用:解释说明程序,提高程序的阅读性;可以帮助调试程序
4 常量
概述:在程序执行的过程中,其值不可以发生改变
分类:
A:字面值常量
-
字符串常量:用双引号括起来的多个内容,例如"hello","world" 字符常量:用单引号括起来的单个内容,例如a,A 整数常量:所有的整数,例如100,200 小数常量:所有的小数,例如10.23,110.11 布尔常量:只有true和false 空常量:null,后面讲
B:自定义常量(后面讲)
5 进制
java针对整数常量提供了4种表现形式:二进制、八进制、十进制、十六进制
进制概述:就是进位制,人们规定的一种进位方法。对于任何一种进制--X进制,就表示某一位置上的数运算时是逢X进一位,二进制就是逢二进一,八进制就是逢八进一,十进制就是逢十进一,十六进制就是逢十六进一。
计算机电子原件的状态:开、关。那么,我们表达数据的时候,也是按照开、关的状态来表示的。
如果表达数据仅仅用这两种状态,那么能够表达的数据是很少的。而我们常见的数据:英文字母,数字,标点符号。这就很多了。两个状态是肯定不够的。为了能够表示更多的数据,国际化标准组织就规定:用8个这样的信号来表示一个数据,这个数据的单位叫:字节。
后来我们用数字1和0分别表示开和关。由1和0组成的数据就是二进制数据。
1byte=8bit
1k=1024byte
1m=1024k
1g=1024m
1t=1024g
但是,用二进制表达数据的表现形式有点长,所以我们应该简化一下。
如何简化呢?
把二进制的数据,从右开始,每三位一组合,最左边不够的时候,补0。然后分别计算出对应的十进制数值,最后再把每个十进制的数据组合起来,就是一个八进制数据。
这种表现形式还不是最简单的,还有更简单的。
把二进制的数据,从右开始,每四位一组合,最左边不够的时候,补0。然后分别计算出对应的十进制数值,最后再把每个十进制的数据组合起来,就是一个十六进制数据。
规则:进制越大,表现形式越短。
不同进制的数据组成:
-
二进制:由0和1组成,以0b开头 八进制:由0,1,...7组成,以0开头 十进制:由0,1,...9组成,整数默认是十进制的 十六进制:由0,1,...9,a,b,c,d,e,f(大小写均可),以0x开头
class JinZhi { public static void main(String[] args){ //十进制100 System.out.println(100); //二进制4 System.out.println(0b100); //八进制64 System.out.println(0100); //十六进制256 System.out.println(0x100); } }
十进制到其他进制的转换:
任意进制到十进制的转换:
快速的进制转换法:
6 原码反码补码
为什么讲解这个知识点呢?因为计算机在操作的时候,都是采用数据对应的二进制的补码来进行计算的。
有符号数据表示法:
在计算机内,有符号数有3种表示方法:原码、反码和补码。所有数据的运算都是采用补码进行的。
原码:就是二进制定点表示法,即最高位为符号位,‘0’表示正,‘1’表示负,其余位表示数值的大小。
反码:正数的反码与其原码相同,负数的反码是对其原码逐位取反,符号位除外。
补码:正数的补码与其原码相同,负数的补码是在其反码的末位加1.
7 变量
概述:在程序执行的过程中,在某个范围内其值可以发生改变的量。
定义格式:
数据类型 变量名 = 初始化值
注意:格式是固定的
组成规则:
A:必须对其限定。用什么限定呢?数据类型
B:我们在运算的时候,不可能拿着空间去运算,真正运算时,使用的是该空间中的值,我们起名为 变量名
C:即使有数据类型和变量名了,但是如果没有值,这个空间也是一个垃圾空间,没有任何意义,所以我们需要 初始化值
数据类型:
数据类型分类:
A:基本数据类型
B:引用数据类型
基本数据类型:
A:整数 占用字节数
byte(字节) 1
short(短整型) 2
int(整型) 4
long(长整型) 8
B:浮点数
float(单精度) 4
double(双精度) 8
C:字符
char 2
D:布尔
boolean 1
整数默认为int,小数默认为double,
长整型后缀用L或者l标记,建议用L。
单精度浮点型数后缀用F或者f标记,建议用F。
定义不同数据类型的变量:
class DataType { public static void main(String[] args){ //定义一个字节变量 byte b = 10; System.out.println(b); //定义一个短整型 short s = 100; System.out.println(s); //定义一个整型 int i = 1000; System.out.println(i); //定义一个长整型(后缀名加一个L) long l = 1000000000L; System.out.println(l); //定义单精度浮点类型 float f = 12.345F; System.out.println(f); //定义双精度浮点类型 double d = 12.345; System.out.println(d); //定义字符类型 char ch = a; System.out.println(ch); //定义布尔变量 boolean flag = true; System.out.println(flag); } }
使用变量的注意事项:
A:作用域:变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。相同的作用域中不能定义两个同名变量。
B:初始化值:没有初始化值不能直接使用。只要在使用前给值,不一定非要在使用的时候立马给值。推荐在定义的时候给值。
定义变量的格式:
a:数据类型 变量名 = 初始化值;
b:数据类型 变量名;
变量名 = 初始化值;
C:在一行上建议只定义一个变量:可以定义多个,但是不建议。
class DataType2 { public static void main(String[] args){ //定义变量 int x = 100; //错误,不能有同名的。 //int x = 200; //定义变量必须在使用前给值 //int y; //System.out.println(y); //在一行上定义多个变量 int a = 10;int b = 20;int c = 30; //上面的写法可以,但是不建议 //下面的写法也不报错,但是不建议这么写 int d,e; d = 40; e = 50; //下面的写法会报错 //int d,int e; } }
数据类型转换之默认转换:
+是一个运算符,做加法运算的。
一般来说,我们在做运算的时候,要求参与运算的数据类型必须一致。
注意:boolean类型不能转换为其他的数据类型。
默认转换:(从小到大的转换)
A:byte,short,char--int--long--float--double
B:byte,short,char相互之间不转换,他们参与运算首先转换为int类型。
class DataType3 { public static void main(String[] args){ //直接输出的方式做加法 System.out.println(3 + 4); //两int类型做加法 int x=3; int y=4; int z=x + y; System.out.println(z); //定义一个byte类型,一个int类型,做加法 byte a = 3; int b = 4; System.out.println(a + b); //可能损失精度 //byte c = a + b; int c = a + b; System.out.println(c); } }
byte类型和int类型数据相加,会转换为int类型。所以如果把相加的结果赋值给一个byte类型的话,系统会提示:可能损失精度。
数据类型转换之强制转换:(从大的数据类型到小的数据类型)
目标类型 变量名=(目标类型)(被转换的数据)
注意:不要随意的去使用强制转换,因为它隐含了精度损失问题。
class DataType4{ public static void main(String[] args){ byte b = 3; int a = 4; //这个是有问题的 //byte c = a + b; //用强制类型转换 byte c = (byte)(a + b); System.out.println(c); } } /* 思考题1:请问下面这个有没有问题 double d = 12.345; float f = d; 思考题2:看看下面两定义有没有区别呢? float f1 = (float)12.345; float f2 = 12.345f; f1其实是通过一个double类型转换过来的, 而f2本身就是一个float类型。 */ class DataType5{ public static void main(String[] args){ //解决思考题1 double d = 12.345; float f = (float)d; //看看下面两定义有没有区别呢? float f1 = (float)12.345; float f2 = 12.345f; } }
变量相加和常量相加的区别面试题:
//面试题1:哪句是编译失败的呢?为什么? /* byte b1 = 3,b2 = 4,b; b = b1 + b2; b = 3 + 4; */ //面试题2:下面这句有没有问题?如果我想赋值正确,可以怎么做?结果是多少? /*byte b = 130;*/ class DataType6 { public static void main(String[] args){ //面试题1 byte b1 = 3,b2 = 4,b; //b = b1 + b2;//变量相加,首先看类型问题,这个是类型提升,所以有问题 b = 3 + 4;//常量相加,先把结果计算出来,然后看是否在赋值的数据类型范围内,如果在就不报错 //面试题2 //byte b3 = 130; //因为byte的范围是-128到127,而130不在范围内,所以报错 //我们可以强制类型转换 byte b3 = (byte)130; System.out.println(b3);//-126 /* 分析过程:我们想知道结果是什么,应该知道如何进行计算的。 而我们又知道计算机中数据的运算都是补码进行的。 而要得到补码,首先要计算出数据的二进制。 A:获取130这个数据的二进制 00000000 00000000 00000000 10000010 这是130的原码,也是反码,还是补码 B:做截取操作,截成byte类型的了 10000010 这个结果是补码 c:已知补码为10000010,求原码 结果为-126 */ } }
字符参与运算:
通过字符和一个整数相加,我们给出一张表,ASCII码表
看完这张表,我们需要记住三个值:
‘a’ ---- 97
‘A’ ---- 65
‘0’ ----- 48
class DataType7{ public static void main(String[] args){ //直接输出一个字符 System.out.println(a);//a //输出一个字符和一个整数做加法 System.out.println(a+1);//98 /*字符串数据和其他数据做加,结果是字符串类型, 这里的+不是加,而是字符串连*/ System.out.println("hello"+a+1);//helloa1 System.out.println(a+1+"hello");//98hello System.out.println("5+5="+5+5);//5+5=55 System.out.println(5+5+"=5+5");//10=5+5 } }