Bootstrap

Java基础

一.标识符

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文件和运行结果我们可以发现,字符串之间可以进行连接,并且数字与字符串之间可以相加

;