一.标识符
1.1标识符的概念:
在Java语言中,标识符指的就是各种变量,函数,语句,而标识符就是给这些类,对象,方法来命名的。
标识符的命名规则:
①:可以由任意数量的数字,字母,下划线,$来组成,但是需要注意的是,不能以数字为开头
②:大小写字母是敏感的,不能混用,比如 type 和Type并不相同。
③:不允许使用汉字
④:尽量做到看到名字就想到意思,使用驼峰命名法(驼峰命名法分为大驼峰和小驼峰,大驼峰是首字母全部大写,小驼峰是指除了第一个单词的首字母小写,其余的单词字母全部大写)
命名约定规则:
在开发Java语言的过程中,我们需要尽量满足如下命名约定规则:
①:类和接口名:每个单词的首字母大写,其余的单词小写
②:方法名:使用小驼峰命名法,尽量不用下划线
③:常量名:所有字母都大写,每个单词之间用下划线分隔开
④:变量名:小驼峰命名法,尽量不用下划线和美元符号,做到见名知意。
Java的入门案例:
在这里,编写一个Java程序,要求结果显示Hello World
public class MyFirstProgramer{
public static void main(String[] args){
System.out.println("Hello World");
}
}
在这个建议案例中,我们可以发现,首先定义了类名是我们的文件名MyFirstProgramer,采用了大驼峰命名法,第二行定义了main方法,在里面我们写了一个输出流来把hello world输出,之后利用cmd来编译和运行结果就可以了。
二.变量
这一部分是十分重要的jvm在内存中会开辟出来非常多的小空间,这些空间可以用来存储数据,我们对这些储存空间命名,这样的每个储存空间就是一个变量。
2.1变量的语法
由于Java是一门强类型语言,所以我们必须要定义该变量的类型,来明确变量所储存的数据类型,
语法: 数据类型名 变量名;
我们需要对定义的变量进行初始化赋值,不能直接去使用
语法: 变量名 数值
我们可选择在声明变量的同时直接对其初始化:
int a =100;
我们也可以选择现声明变量,再初始化:
int a;
a = 100;
我们可以对变量内的数据进行存取的操作:
public class VariableDemo{
public static void main(String[] args){
int a = 10;
int b = 20;
int c = a + b; //将a和b里的值取出来,然后计算,结果30再存在变量c中
a = 5;//将5存入a变量里,原有的10被5覆盖掉了
a = 50;//将50存入变量a里,原有的5被50覆盖掉了
a = a + 6; //使用a里的50与6做加法运算,结果56再次存入变量a中,之前的50被覆盖掉了
System.out.println(a);
}
}
在这样一个Java文件中,我们现定义了一个int类的a变量并初始化值为10,并定义了b变量的初始化值为20,还定义了c变量是将a和b的值取出来,然后相加储存到c变量内
此外,将5存入变量a中,又将50存入变量a中,那么5就会被50覆盖,最后使用a变量中的50和6进行加法运算,得到的结果56储存到a中,那么50被覆盖,此时a中的内容为56,最后通过输出流得到结果也为56
变量的操作必须与类型匹配,不能定义一个整数型的变量,但是赋值确是浮点型,会报错,上一个小案例:
public class VariableDemo02{
public static void main(String [] args){
int number = 10;
number = 3.14;//3.14是小数类型,不是int类型,因此会报编译错误
}
public void run(){
System.out.println(number);//变量number想要使用,需要在使用前声明和初始化
}
}
在这个Java文件中,我们先定义了int类的变量number值为10,然后赋值number变量值为3.14,此时就会报错,因为类型不相同,如果想定义需要double类
并且,变量还有自己的作用域,并不是定义了变量之后在Java文件中的任何位置都能成功使用的,我们可以继续看之前的案例,在第七行中,变量number并没有初始化和定义,所以会报错
ublic class VariableDemo02{
public static void main(String [] args){
int a = 100;
if(a>50){
int b = a*2;
System.out.println(b);
}else{
int c = a-10;
long a = 100; //因为a这个变量已经存在了,不能重复定义
}
}
返回的结果:
我们可以发现,在第三行,我们就已经定义了int变量,但是我们在第九行通过long类又定义了一遍a变量,此时,并没有脱离上一个a变量的控制域,所以会报错。
2.2变量的分类:我们一般有两种分类的方式
①按照声明时所在的位置分类:
成员变量:在类的内部,但是在方法外部定义的变量。
局部变量:只是在方法内定义的变量。
②按照数据的类型进行分类:
基本数据变量:包括原始数据变量(一共有八个)
引用数据变量:主要是数组
三.数据类型
Java语言中的数据类型分为两大类:
基本数据类型和引入数据类型
基本数据类型一共有八个,所占用的内存从小到大排列分别是:
byte-->short-->int-->long-->float-->double,char和boolean一般不参与排列
他们所代表的含义也比较简单,byte,short,int,long代表的都是整数类型,
float和double代表浮点类型(小数类型),char(字符类型),boolean(布尔类型)
3.1整数类型
bypt所占的内存是1bit(8位) 所代表的数值范围是 -128~128
short所占的内存是2bit(16位) 所代表的数值范围是-2147483648~2147483647
int所占的内存是4bit (32位) 所代表的数值范围是 -2^31^ ~ 2^31^-1非常大了已经
long所占的内存是8bit (64位) 所代表的数值范围是 -2^64^ ~ 2^64^-1这个数值更吓人
以上四个就是所有的整数类型了,需要注意:
在赋值时,不能超出各自的范围,否则会报错
int字面量, 只要字符长度没有超过type和short类型的限制范围,就可以直接给这两个类型的变量赋值,会自动的去掉前面多余的0,此外
int字面量还可以直接给long类型的变量赋值,会自动添加缺失的0
如果使用long字面量来定义变量,必须在整数的后面添加一个大写的L。
一个实例如下:
public class TypeDemo01{
public static void main(String[] args){
byte b1 = 10;
//byte b2 = 128; //编译错误,byte最大值为127
int n1 = 2147483647; //int最大值
//int n2 = 2147483648; //编译错误。超出了int最大值
short s1 = 10;//10是int 类型,因为没有超出short的范围,因此可以直接赋值给short
long lo1 = 1000;//1000是字面值,是int类型。是可以直接赋值给long类型的
long lo2 = 10L;//10L是long类型,直接就是64位的二进制数
System.out.println(b1);
System.out.println(n1);
System.out.println(s1);
System.out.println(lo1);
System.out.println(lo2);
//long lo3 = 2147483650L;//因为字面量就是int类型,因此不可以超出范围
long lo4 = 2200000110L;//使用long类型的字面量
}
}
首先确立了class类,使用了main方法,
定义了一个byte类型的变量b1,值设置为10,
如果把同类型的b2设置为128则会报错,因为byte的最大值为128,
下面的n1也是同样的情况,不能超过最大值,
而在代码的第五行,10是int字面量,由于并没有超过short的最大长度,可以直接赋值
而下面的lo2变量则是直接使用了10L,这样说明了是long类型字面量,直接是64为的二进制数
如果像代码的最后一部分,使用long类型去定义很大的值,就必须是用数字后面+L的形式
3.2 浮点类型
float和double是两个浮点类型,他们所占据的内存空间是不同的,
float是4 bit (32位) double是8 bit (64位)
这就说明了他们的数值范围差了非常多,但是一般来讲,我们使用的最多的是double
Java浮点类型的默认字面量是double型,在我们定义 float类型时,需要注意在数值后面+F
十进制数形式:如:5.12 512.0f .512 (必须有小数点,但是可以没有0)
科学计数法形式:如:5.12e2 512E2 100E-2
浮点类型的范围都非常大,具体数值我们不需要记忆,
只需要明确 double 类型的范围远远大于 float 类型就可以了
计算精度:
float的计算精度为小数点后7位,这是最多能有7位
double的计算精度为小数点后15~16位
public class TypeDemo02{
public static void main(String[] args){
//float f1 = 3.14; //编译错误,因为字面量是double类型
float f2 = 3.14f; //想要给float赋值,在后面加上F或者f
double d1 = 0.12;
double d2 = 10.1d;
double d3 = .12; //.12相当于0.12,0.可以省略
System.out.println(f2);
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
float f10 = 0.123456789f; //将小数存入float类型的变量空间f10里面
double d10 = 0.1234546789123456789;//将小数存入double类型的变量空间d10 里面
System.out.println(f10);//取出来时发现不是原来的值
System.out.println(d10);//取出来时发现不是原来的值
}
}
由上述Java文件的运行结果可以很明显的得到:
首先,如果像用float类型来声明变量,我们必须在后面加上F
对于小数, 哦、0 可以省略,但是小数点并不可以
如果把小数存入float类型和double类型的变量中,是无法返回原来的值的,会出现误差。
计算误差:
二进制系统中无法精确的表示1/10,就好像十进制系统中无法精确表示1/3一样。所以,2进制表示十进制会有一些舍入误差,对于一些要求精确运算的场合会导致代码的缺陷。但是这种缺陷并不是代码的错误,属于正常现象。(每次遇到0.1,就会出现误差)
double d101 = 3.0;
double d102 = 2.9;
System.out.println(d101-d102);
可以看出,我们按照十进制去计算,结果很明显时0.1,但是由于二进制的机制,就会出现误差
3.3字符类型
字符类型的名称为 char,简而言之就是世界上所有书面字符,如 汉字,字母,数字,符号等.
当我们在对使用字符类型进行定义变量时,需要注意:
1.任意字符都可以,但是需要用单引号括起来,并且引号中只允许有一个字符,单次也只能定义一个字符
2.字符集:字符与底层二进制一一对应的一个表,Java语言用的就是Unicode字符集,每一个字符都会对应一个16进制的二进制数,这些16进制的数用十进制表示就是0~65335,每一个字符都会有对应的数,因为char可以表示 0~65335的整数,所以也可以参与计算。
public class TypeDemo03{
public static void main(String[] args){
char c1 = '中';
char c2 = '9';
char c3 = '_';
char c4 = '\t'; //制表符\t
char c5 = 't'; //给变量赋值普通的字母字符t
//char c6 = '中国';//编译错误,单引号里只能放入一个字符
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
System.out.println(c5);
由上述的代码和运行结果,我们不难发现:
单引号之间可以放入任何字符,还可以放入一些字符的转义来代替某些特殊的字符,就比如制表符,需要注意的是,在定义char类型的变量时,赋值是不可以出现多个字符的,必须只能有一个字符。
public class TypeDemo03{
public static void main(String[] args){
char c11 = 48;//字符0在Unicode的编码集里对应的那个整数
char c12 = 57;//字符9在Unicode的编码集里对应的那个整数
char c13 = 65;//字符A
char c14 = 90;//字符Z
char c15 = 97;//字符a
char c16 = 122;//字符z
System.out.println(c11);
System.out.println(c12);
System.out.println(c13);
System.out.println(c14);
System.out.println(c15);
System.out.println(c16);
char c21 = 'a';
/*取出c21里的数据与7做加法运算,运算时使用字符对应的数字97参与运算,
结果104存入char类型的变量里,如果打印,应该是104对应的字符h
*/
char c22 = (char)(c21 +7);
System.out.println(c22) ;
由上述的Java文件和运行结果我们可以发现:
每一个char类型的变量都会有一个特殊的数值,他们对应着不同的特殊符号,其中有字母,有数字,所以他们之间可以进行简单的运算,
取出变量c21里的数据a和7做加法运算,因为a对应的数字时97,所以97+7=104,但是最后得到的结果我们还需要换成char类型,104对应的字符时h,所以最终的返回值就是h。
3.4布尔类型
这个类型比较简单,Boolean,因为浮点类型定义的变量,可选择的值只有两个,分别是true和false,true代表成立,false代表不成立,可以推断一下,这个类型适用于执行判断命令的,
一个案例如下:
public class TypeDemo04{
public static void main(String[] args){
boolean f1 = true;
boolean f2 = false;
System.out.println(f1);
System.out.println(f2);
boolean f3 = 1<2;
System.out.println(f3);
}
}
返回的结果:
通过上述的Java文件和返回结果我们可以很明显的得出结论:
boolean类型就是一个执行判断语句的类型,可以搭配一些分支结构语句和控制结构语句需要注意的时,在赋值时,不需要任何多余的操作,直接赋值true和false即可。
3.5字符串类型
字符串类型, String 属于引用数据类型,是最常用的引用类型之一
赋值的特点:需要用双引号把赋值引起来,里面可以有任意长短的任意字符,
并且字符串可以进行拼接操作,我们可以使用+号来实现这一操作,需要注意的是,只要+号前面或者后面有一个字符串类型的变量那么进行的就是拼接操作,而不是进行加法运算,拼接之后的结果还是字符串类型。
下面演示一个案例:
public class TypeDemo05{
public static void main(String[] args){
String myName = "lucy";//长度为4
String str = "";//空字符串,字符的长度为0
String space = " ";//字符串里只有一个字符是空格
String str1 = " 你是最棒的 ";//str1的长度是7,
String str2 = "你 好";//str2的长度是3
System.out.println(myName);
System.out.println(str);
System.out.println(space);
System.out.println(str1);
System.out.println(str2);
}
}
运行结果如下:
通过上述的Java文件和运行结果我们可以发现,字符串可以容纳任意长度的字符,只要用双引号引起来即可,需要注意:
空格也可以作为字符串,长度为0
继续上一个案例:
System.out.println("---字符串的拼接---");
String s1 = "中";
String s2 = "国";
String s3 = s1 + s2;//"中国"
System.out.println(s3);
String s4 = s3+"是最棒的 ";//"中国是最棒的"
System.out.println("s4的值:"+s4);//s4的值:中国是最棒的
String r1 = 1+1+"2"+3+4;
System.out.println("r1的结果:"+r1);//结果是2234
String r2 = 1+2+"3"+(4+5)+5*6;
System.out.println("r2的结果:"+r2);//结果是33930
}
}
运行结果如下:
通过上述的Java文件和运行结果我们可以发现,字符串之间可以进行连接,并且数字与字符串之间可以相加