一、关键字
关键字:被java语言赋予特定含义的单词。
特点:组成关键字单词的字母全部小写。
注意:
A:goto和const是保留字
B:类似于Notepad++这样的高级记事本,针对关键字都有特殊的颜色标记。
二、标识符
2.1 标识符介绍
标识符:就是给类,接口,方法,变量等起名字。
组成规则:
A:英文字母大小写
B:数字字符
C:$和_
//正确做法 int x = 100;
注意事项:
A:不能以数字开头
B:不能是Java中的关键字
C:Java语言严格区分大小写
//不能以数字开头 //int 1y = 100; int y1 = 100; //不能是Java中的关键字 //int public = 100; int Public = 100;
2.2 常见的命名规则
命名规则要做到“见名知意”,比如:我要定义一个学生类class Student {}
【包】
其实就是文件夹,用于把相同的类名进行区分,要求全部小写。
单级包:test
多级包:com.baidu
【类或者接口】
一个单词:单词的首字母必须大写
举例:Student,Dog
多个单词:每个单词的首字母必须大写
举例:HelloWorld,StudentName
【方法或者变量】
一个单词:单词的首字母小写
举例:main,age
多个单词:从第二个单词开始,每个单词的首字母大写
举例:studentAge,showAllNames()
【常量】
一个单词:全部大写
举例:PI
多个单词:每个字母都大写,用_隔开
举例:STUDENT_MAX_AGE
三、注释
【概述】
注释:用于解释说明程序的文字
Java中注释的分类及格式
单行注释://
多行注释:/* */ (注意:多行不可以嵌套使用,而单行是可以的)
文档注释:被javadoc工具解析生成一个说明书
【作用】
A:解释说明程序,提高程序的阅读性
B:可以帮助我们调试程序。
注释是一个程序员必须要具有的良好编程习惯。初学者编写程序可以养成习惯:先写注释再写代码。将自己的思想通过注释先整理出来,再用代码去体现。因为代码仅仅是思想的一种体现形式而已。
/* 需求:我准备写一个java程序,把"HelloWorld"这句话输出在控制台 分析: A:要写一个Java程序,必须定义类 B:把数据能够输出,说明我们的程序是可以独立运行的,而程序要独立运行,必须定义main方法 C:把数据输出在控制台,必须使用输出语句 实现: A:java语言提供了一个关键字:class用来定义类,后面跟的是类名 B:main方法的格式是固定的: public static void main(String[] args) { } C:输出语句的格式是固定的: System.out.println("HelloWorld"); "HelloWorld"这个内容是可以改变的 */ //这是我的HelloWorld案例 class HelloWorld { /* 为了程序能够独立运行,定义main方法 main方法是程序的入口 被jvm自动调用 */ public static void main(String[] args) { //为了把数据显示在控制台,我们就使用了输出语句 System.out.println("HelloWorld"); } }
三、常量
【概述】
在程序执行过程中,其值不发生改变的量。
【分类】
A:字面值常量
B:自定义常量
【字面值常量】
A:字符串常量:用双引号括起来的内容。
举例:"hello","world","HelloWorld"
B:整数常量:所有的整数
举例:100,200
C:小数常量:所有的小数
举例:10.23,110.11
D:字符常量:用单引号括起来的内容
举例:'a','A','0'
错误的:'ab'
E:布尔常量:比较特殊
举例:true,false
F:空常量
举例:null
【自定义常量】
被final关键字修饰的变量就变成了变量,只能被赋值一次。如final int x = 10;
在Java中针对整数常量提供了四种表现形式
- 二进制 由0,1组成。以0b开头。
- 八进制 由0,1,...7组成。以0开头。
- 十进制 由0,1,...9组成。整数默认是十进制。
- 十六进制 由0,1,...9,a,b,c,d,e,f(大小写均可)组成。以0x开头。
public class JinZhiDemo { public static void main(String[] args) { System.out.println(100); //十进制 System.out.println(0b100); //二进制,结果为:4 System.out.println(0100); //八进制,结果为:64 System.out.println(0x100); //十六进制,结果为256 } }
四、进制转换
4.1 进制概述
进制:是一种进位的方式。x进制,表示逢x进1.
计算机的电子原件的状态:开,关。
那么我们表达数据的时候,也是按照开,关的状态来表示的。
如果我们表达数据仅仅用这两种状态,那么能够表达的数据是比较少的,而我们常见的数据:英文字母、数字、标点符号等。两个状态肯定是不够的。
为了能够表示更多的数据,国际化标准组织就规定:用8个这样的信号来表示一个数据,这个数据的单位叫:字节。
后来,我们就通过数字1,0分别来表示开和关。
这个时候,我们把上面的数据用1,0改进。
由这样的1,0组成的数据就是二进制数据。
1byte=8bit 1k=1024byte 1m=1024k 1g=1024m 1t=1024g
但是,用二进制表达数据的表现形式有点长,所以我们就要简化一下。如何简化呢?
把二进制的数据,从右开始,每三位一组合,最左边不够的时候,补0。然后分别计算出对应的十进制数值,最后,再把每个十进制的数据组合起来,就是一个八进制数据。
这种表现形式还不是最简单的,我们还有更简单的。
把二进制的数据,从右开始,每四位一组合,最左边不够的时候,补0。然后分别计算出对应的十进制数值。最后再把每个十进制的数据组合起来,就是一个十六进制数据。
规则:进制越大,表现形式越短。
4.2 任意进制到十进制的转换
得到下面数据的十进制值:
0b10101
=1*2^4 + 1*2^2 + 1*2^0
=16 + 4 + 1
=21
0123
=1*8^2 + 2*8^1 + 3*8^0
=64 + 16 + 3
=83
0x3c
=3*16^1 + c*16^0
=48 + 12
4.3 十进制到任意进制的转换
除基取余,直到商为0,余数反转。
52分别得到二进制,十进制,十六进制
得到二进制:
52 / 2 = 26 0
26 / 2 = 13 0
13 / 2 = 6 1
6 / 2 = 3 0
3 / 2 = 1 1
1 / 2 = 0 1
0b110100
得到八进制:
52 / 8 = 6 4
6 / 8 = 0 6
064
得到十六进制:
52 / 16 = 3 4
3 / 16 = 0 3
0x34
4.3 快速的进制转换法
8421码,是bcd码的一种。
它表达的意思是每一个二进制位上的数据对应一个固定的值,只需要把对应的1位置的数据值给相加,即可得到该二进制对应的十进制的值。
4.4 原码反码补码
有符号数据的表示法:原码、反码、补码。
为什么讲解这个知识点呢?因为计算机在操作的时候,都是采用数据对应的二进制的补码来计算的。
用原码、反码、补码来分别表示+7和-7
首先我们得到7的二进制:111
补充:已知某数X的原码为10110100B,试求X的补码和反码。
已知某数X的补码11101110B,试求其原码。
五、变量
【什么是变量】
变量就是在程序的执行过程中,其值是可以在一定范围内发生改变的量。(如同数学中的未知数)
【变量的组成规则】
A:必须对其进行限定。如何限定呢?用数据类型。
B:我们在运算的时候,不可能是拿着这个空间去运算,我们真正运算时使用的是该空间中的值,我们就给该空间起了一个名字:变量名。
C:即使你有数据类型了,你有变量名了,但是如果没有值,这个空间是一个垃圾空间,没有任何意义,所以要初始化值。
【定义变量的格式】
数据类型 变量名 = 初始化值
【使用变量的时候要注意的问题】
- 作用域:变量定义在哪个大括号内,它就在这个大括号内有效。并且,在同一个大括号内不能同时定义同名的变量。
- 初始化值:没有初始化值的变量不能直接使用。你只要在使用前给值就行,不一定非要在定义的时候立即给值。推荐在定义的时候给值。
定义变量的格式: a:数据类型 变量名 = 初始化值; b:数据类型 变量名; 变量名 = 初始化值;
- 在一行上建议只定义一个变量。可以定义多个,但是不建议
class DataTypeDemo{ public static void main(String[] args) { //定义变量 int x = 100; //错误,不能有同名的 //int x = 200; //定义变量必须给值 //int y; //System.out.println(y); int z; z = 100; System.out.println(z); //在一行上定义多个变量 //int a = 10; int b = 20; int c = 30; //上面的写法可以,但是不建议。 int a = 10; int b = 20; int c = 30; //int d, e; //d = 40; //e = 50; //int f,int g; //错误 //int h; int i; //正确 } }
六、数据类型
6.1 数据类型介绍
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间。
【注意】
整数默认是int类型;浮点数默认是double类型。
长整型后缀用L或者l标记。建议使用L。
单精度浮点数用F或者f标记。建议使用F。
class DataTypeDemo { public static void main(String[] args) { //定义变量的格式: //数据类型 变量名 = 初始化值; //定义一个字节变量 byte b = 10; System.out.println(10); System.out.println(b); //定义一个短整型变量 short s = 100; System.out.println(s); //定义一个整型变量 int i = 1000; System.out.println(i); //超过了int的范围 //int j = 1000000000000; long j = 1000000000000L; //long j = 100L; System.out.println(j); //定义浮点数据变量 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); } }
6.2 默认转换
byte,short,char—int—long—float—double
只要是byte,short,char参与运算,它们都会先转换为int类型。
long占8个字节,float占4个字节,为什么会先转换为long类型?因为它们底层的存储结构不同,且float表示的数据范围比long的范围更大
byte,short,char相互之间不转换,他们参与运算首先转换为int类型。
//定义一个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);
注意:boolean类型不能转换为其他的数据类型
6.3 强制转换
【强制转换】
从大的数据类型到小的数据类型。
【格式】
目标数据类型 变量 = (目标数据类型) (被转换的数据);
【注意】
不要随意的去使用强制转换,因为它隐含了精度损失问题。
byte a = 3; int b = 4; //这个肯定没有问题 //int c = a + b; //byte c = 7; //这个是有问题的 //byte c = a + b; //用强制类型转换改进 byte c = (byte) (a + b); System.out.println(c);
思考题1:请问下面这个有没有问题
double d = 12.345;
float f = d;
//把double赋值给float,加了强制类型转换 double d = 12.345; float f = (float)d;
思考题2:看看下面两个定义有没有区别呢?
float f1 = (float)12.345; float f2 = 12.345F;
f1其实是通过一个double类型转换过来的。
而f2本身就是一个float类型。建议用这种表示。
思考题3:
byte b1=3,b2=4,b; b=b1+b2; b=3+4;
哪句是编译失败的呢?为什么呢?
b = b1 + b2;是有问题的。两个byte类型相加,首先会转换为int类型,将int类型转为byte类型就会出问题。
因为变量相加,会首先看类型问题,最终把结果赋值的也会考虑类型问题。
常量相加,首先做加法,然后看结果是否在赋值的数据类型范围内,如果不是,才报错。
思考题4:
byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
//因为byte的范围是:-128到127。 //而130不在此范围内,所以报错。 //byte b = 130; //我们可以使用强制类型转换 byte b = (byte) 130; //结果是多少呢?-126 System.out.println(b);
分析过程:
我们要想知道结果是什么,就应该知道是如何进行计算的。而我们又知道计算机中数据的运算都是补码进行的。而要得到补码,首先要计算出数据的二进制。
A:获取130这个数据的二进制。
00000000 00000000 00000000 10000010
这是130的原码,也是反码,还是补码。
B:做截取操作,截成byte类型的了。
10000010
这个结果是补码。
C:已知补码求原码。
符号位 数值位
补码: 1 0000010
反码: 1 0000001
原码: 1 1111110
6.4 看程序写结果
【字符和整数相加】
class DataTypeDemo8 { public static void main(String[] args) { //直接输出一个字符 System.out.println('a'); //a //输出一个字符和一个整数做加法 System.out.println('a'+1); //98 } }
通过字符和一个整数相加,我们给出一张表:ASCII码表。
通过看完这张表以后,我们要记住三个值:
'a' 97
'A' 65
'0' 48
【字符串和其它数据相加】
class DataTypeDemo9 { public static void main(String[] args) { 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 } }
字符串数据和其他数据做+,结果是字符串类型。
这里的+不是加法运算,而是字符串连接符。