java基础整理(1)

java基础

1、 标识符

1.1、什么是标识符

在java源程序当中凡是程序员有权利自己命名的单词都是标识符
标识符可以标识什么元素?
*类名
*方法名
*变量名
*接口名
*常量名

1.2、标识符的命名规则【不按照这个规则来,编译器会报错,这是语法】

*一个合法的标识符,只能由 数字,字母,下划线_,美元符号$组成
*不能以数字开头
*严格区分大小写
*关键字不能做标识符
*理论上无长度限制,最好不要太长

1.3、标识符的命名规范【只是一种规范,不属于语法,不遵守规范编译器不会报错】

*最好见名知意,就是要有意义
*遵守驼峰命名方式
SystemService
UserService
CustomerService
*类名、接口名:首字母大写,后面每个单词首字母大写
*变量名、方法名:首字母小写,后面每个单词首字母大写
*常量名:全部大写

2、关键字

3、字面值

*字面值:
	-10
	-100
	-“abc”
	-'a'
	-true、false
*字面值就是数据。
*字面值是java源程序的组成部分之一,包括标识符和关键字他们都是java源程序的组成部分
*数据在现实世界中是分门别类的,所以数据在计算机编程语言中页是有类型的:

【数据类型】

	-10、100     		属于整数型字面值
	-3.14		 		属于浮点型字面值
	-true、false 		属于布尔型字面值
	-“abc”、“中国人” 	属于字符串型字面值
	-'A'、'人'			属于字符型字面值

*注意:

	java语言当中所有的字符串型字面值必须使用双引号括起来,双引号是半角
	java语言当中所有的字符型字面值必须使用单引号括起来,单引号是半角,比如   'a','A'

4、变量

1.1、什么是变量?

	*变量本质上来说是内存中的一块空间,这块空间"有数据类型"、"有名字"、"有字面值"。
	*变量包含三部分:数据类型,名称,字面值【数据】
	*变量是内存中存储数据的最基本的单元。

1.2、数据类型的作用?

	*不同的数据有不同的类型,不同的数据类型底层会分配不同大小的空间
	*数据类型是指导程序在运行阶段应该分配多大的内存空间

1.3、变量要求:

变量中存储的具体的"数据"必须和变量的"数据类型"一致,当不一致的时候编译报错

1.4、声明/定义变量的语法格式:

		数据类型 变量名;
		*数据类型:如int
		*变量名:只要是合法的标识符就行。规范中要求:首字母小写,后面每个单词首字母大写
		例如:int i;
			  int age;
			  等等

1.5、变量声明之后怎么赋值?

		语法格式:
			变量名=字面值;
		要求:字面值的数据类型必须和变量的数据类型一致
		=是一个运算符,叫做赋值运算符,赋值运算符先运算等号右边的表达式,表达式执行结束后的
		结果赋值给左边的变量。

1.6、声明和赋值可以一起进行

1.7、变量父子之后可以重新赋值,变量的值可以变化;

1.8、有了变量以后,内存空间可以得到重复的使用

1.9、通常访问一个变量包括两种访问方式:

	*第一种:读取变量中保存的具体数据 get/获取
	*第二种:修改变量中保存的具体数据 set/设置

1.10、

变量在一行可以声明多个
给变量声明再赋值以后才能访问
int i;
System.out.println(i);
这样的话并没有真正开辟出内存空间,必须初始化。

*例如:
	int a,b,c=100;
	这样的操作以后a和b并没有初始化,只有c完成了初始化。会编译错误
	*在方法体中的java代码是逐行执行的,只有在第一行的代码正确执行完结束,才会执行下一行代码;

1.11、变量的分类:

		根据变量声明的位置来分类:
		*局部变量
		-在方法体当中声明的变量叫局部变量
		*成员变量
		-在方法体外声明的【类体之内】声明的变量叫成员变量
		*java遵循就近原则
		*类体中不能直接编写java语句,除声明变量之外

5、 数据类型:

5.1、 基本数据类型:

*四大类八小种:
	第一类:整数型   byte,short,int,long
	第二类:浮点型	 float,double
	第三类:布尔型	  boolean
	第四类:字符型	  char
引用数据类型:
	-类
	-接口 
	-数组
	。。。。
	基本数据类型       占同空间大小【单位:字节】
	--------------------------------------------------
	byte                1
	short               2
	int                 4
	long                8
	float               4
	double              8
	boolean             1
	char                2

5.2、字节(byte)

	1 byte=8 bit【一个字节=8个比特位】一个比特位表示一个二进制位:1/0
	1KB = 1024 Byte
	1MB = 1024 KB
	1GB = 1024 MB
	1TB = 1024 GB
	*"符号位":符号位在所有二进制位的最左边,0表示正数,1表示负数
	byte类型的最大值是0111 1111   2的7次方-1,结果是127
	byte类型的最小值是-128

6、 字符编码

6.1、

	'a'-->97
	'A'-->65
	'0'-->48			
	'a'--(按照ASCII编码)-->01100001
	01100001---按照ASCII编码-->'a'
	编码和解码的时候采用同一套字典/对照表,不会出现乱码。
	当编码和解码的时候采用的不是同一对照表,会出现乱码问题。

6.2、简体中文的编码方式

	* GB2312<GBK<GB18030
	* 统一全球的编码
		unicode编码
		-utf-8
		-utf-16
		-utf-32
		...... 
	*java采用unicode编码 支持中文
	*实际开发中用utf-8多一点

7、 数据类型

7.1、八种数据类型的默认值

	*成员变量如果没有手动赋值,则系统会默认赋值【局部变量不会】
	数据类型               默认值
	----------------------------------
	*byte,short,int,long   0
	*float,double          0.0
	*boolean               false【在c语言中false是0,true是1】
	*char                  \u0000

7.2、char类型

	*一个中文占两个字节,java中的char类型可以存储一个中文字符
	*转义字符 \       反斜杠在java中具有转义功能,出现在特殊字符之前,会将特殊字符转换为普通字符
	\n		换行符
	\t		制表符
	\'		普通单引号
	\\		普通反斜杠
	\"		普通双引号
	
		
		
		char c1='n';          普通n字符
		char c2='\n';         \n为换行符
		println输出之后换行
		print输出但是不换行
		‘\t’是制表符,
	*输出一个\    
	char y='\';编译报错
	【\'】表示不带有任何特殊含义的单引号字符
	char k='\\'   代表一个普通\字符     第一个\具有转义功能,将后面的反斜杠转义为普通的反斜杠字符
	输出一个单引号
	char a='';编译错误、
	char a= '\''; 表示普通单引号
	System.out.println("\"Helloworld\"");		
	
	*jdk中自带的native2ascii.exe命令可以将文字转换成unicode编码形式

7.3、java语言中的整数型

数据类型占用空间大小默认值取值范围
byte10[-128~127]
short20[-32768~32767]
int40[-2147483648~2147483647]
long80L
	java语言当中的“整数类型字面值” 被默认当做int类型的来处理。
	要让这个“整数类型的字面值”被当做long类型来处的话,
	需要在“整数型字面值”后面加l/L,建议用大写的L.
①java语言中的"整数类型的字面值"有三种表示方式:
	*十进制【是一种缺省默认的方式】
	*八进制【在编写八进制整数型字面值的时候需要以0开始】
	*十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
	
	int a=6;占用4个字节
	long b=456;占用8个字节
	int类型转为long类型可以自动转换
	
	在java中出现数字时,默认为int类型
	long aa=2147483648;  报错  2147483648超出int类型范围
	long aa=2147483648L;
	
	long类型转为int类型需要加强制类型转换符,可能损失精度
	
	long y=123;
	int x=(int)y;
	强转原理:long-->int   将long左边的二进制砍掉,剩下右边的4个字节
	*!特殊:对于byte,只要没有超过byte的范围,就可以
		byte b=50;
		byte c=127;
		以上是没有问题的
		但是对于byte b1=128;是报错的
②计算机二进制有三种表示形式
		原码
		反码
		补码
	计算机在任何情况下底层表示和存储数据的时候采用了补码的形式。
	这正数的补码:和原码相同
	负数的补码:负数的绝对值对应的二进制码所有的二进制位取反再加1
	
	补码:10000000
	原码计算过程:
	*10000000 -1 -->01111111
	*10000000 -->128
	*-128

7.4、浮点型数据类型

	double和float在计算机内部二进制存储的时候都是近似值
	float单精度【4个字节】
	double【8个字节,精度较高】
	
	double的精度太低【相对来说】,不适合做财务软件。
	财务涉及到钱的问题,要求精度较高。所以sun公司在基础se类库中为程序员准备了精度更高的类型,
	不属于基本数据类型,它是:java.math.BigDecimal
	例如 String.java  和String.class
	
	在java语言中,所有的浮点型字面值【3.0】,默认被当做double来处理;
	float f=5.1;   !大容量转小容量,报编译错误
	float f=(float)5.1;
	float f=5.1f

7.5、布尔数据类型boolean

	在java中boolean只有true和false;
	主要用在逻辑运算和条件控制语句中

7.6、数据类型转换

	1、八种数据类型中除布尔类型之外,剩下的7种类型都能互相转换
	2、小容量向大容量转换,成为自动类型转换,容量从小到大排序:
		byte< short < int <  long < float < double
			  char	<
		注意:
			任何浮点类型不管占用多少个字节,都比整数型容量大。
			char和short可表示的种类数量相同,但是char可以取更大的正整数
	3、大容量转换成小容量,叫做强制类型转换,需要加强制类型转换符,程序才能编译通过,但是在运行阶段可能会损失精度,所以要谨慎使用
	4、当整数字面值没有超过byte,short,char的取值范围时,可以直接赋值给byte,short,char类型的变量。
	5、	byte ,short ,char混合运算的时候,各自先转换成int类型在做运算。
	6、多种数据类型混合运算,先转换成容量最大的那种类型在做运算。

8、运算符

8.1、算数运算符

	+
	-
	*
	/
	%	求余数【取模】
	++	自加1【单目运算符】
		int k=10; 
		k++,先做赋值运算
		++k,先自加运算,在赋值运算
		
	--	自减1
	不确定优先级的话加括号就行

8.2、关系运算符

		>
		>=
		<
		<=
		==
		!=
		==是关系运算符
		关系运算符的运算结果一定是布尔类型:true/false

8.3、逻辑运算符

	& 逻辑与
	| 逻辑或
	!逻辑非
	^ 逻辑异或(两边的算子只要不一样就是真true)
	
	&& 短路与
	|| 短路或
	逻辑运算符要求两边的算子都是布尔类型,而且整体运算完以后结果也是boolean类型
	*什么时候出现短路现象?
		System.out.println(5>6 && 4>1);输出为false,短路与,在5>6 已经为假的情况下,不会再进行   4>1的运算

8.4、赋值类运算符

		byte i=10;
	*基本赋值运算符
			=
	*扩展的赋值运算符
			+=		i+=5;  等同于i=(byte)(i+5)  
			-=
			*=
			/=
			%=
			
	赋值类运算符的优先级:先执行等号右边的表达式,将执行结果赋值给左边的变量
	扩展类的赋值运算符不改变运算结果的类型,但是可能会损失精度

8.5、字符串连接运算符

	“+”在java中有两个作用
		*加法运算,求和
		*字符串的链接运算
		*加法两边只要有一个是字符串,一定会进行字符串链接运算,链接之后的运算结果还是一个字符串类型

8.6、三元运算符

	三元运算符/三目运算符/条件运算符
1、语法规则:
		布尔表达式 ? 表达式1:表达式2
2、三元运算符的执行原理
		当布尔表达式的结果是true的时候,将表达式1作为整个表达式的执行结果;
		当布尔表达式的结果是false时候,将表达式2作为整个表达式的执行结果;

9、控制语句

9.1、选择结构

		- if,if else
		
		-switch
		只能判断int或String类型的变量
		也可以使用byte,short,char,因为可以自动类型转换

9.2、控制循环结构

		- for
		- while
		- do..while()

9.3、改变控制语句顺序

		- break
		- continue

10、递归

//以下代码片段只有一份,但是可以被重复调用,
//并且只要调用doSome方法就会在栈内存中新分配一块所属的内存空间。
public static void doSome(){
		System.out.println("doSomebegin");
		doSome();//这行代码不结束,下一行程序是不能执行的
		System.out.println("doSomeover");
	}
*递归是很占内存的,能不用就不用
*递归必须有结束条件
*递归即使有了结束条件,也可能发生溢出的错误,因为递归的太深了

11、面向过程和面向对象的区别

*面向过程:

主要关注点是实现的具体过程,因果关系【集成显卡的开发思路】

-优点:

对于业务逻辑比较简单的程序,可以达到快速开发,前期投入成本较低

-缺点:

采用面向过程的方式开发很难解决非常复杂的业务逻辑,另外面向过程的方式导致软件元素之间的耦合度非常高,只要其中一环出问题,整个系统受到影响,导致最终的软件扩展能力差,由于没有独立体的概念,所以无法达到组件复用

*面向对象:

主要关注点是:

主要关注对象【独立体】能完成哪些功能。【独立显卡的开发思路】

-优点:
	耦合度第扩展力强,更容易解决现实世界中更复杂的业务逻辑,组件复用性强
-缺点:

前期投入成本较高,需要完成独立体的抽取,大量的系统分析与设计

12、面向对象的软件的生命周期【整个生命周期中贯穿采用oo面向对象方式】

OOA:面向对象的分析
OOD:面向对象的设计
OOP:面向对象的编程------java就是一个纯面向对象的语言

12.1、类—实例化—>对象,对象又被称为对象

12.3、java中包括两种数据类型

		*基本数据类型
		*引用数据类型

13、面向对象与内存

1、jvm(java虚拟机)主要包括三块内存空间,分别是:栈内存,堆内存,方法区内存。
2、堆内存和方法区内存各有1个,一个线程一个栈内存。
3、方法调用的时候,该方法所需要的内存空间在栈内存中进行分配,称为压栈,方法执行结束后,该方法所属的内存空间释放,称为弹栈
4、栈中主要存储的是方法体中的局部变量。
5、方法的代码片段以及整个类的代码片段都被存储到方法区内存当中,在类加载的时候这些代码片段会载入
6、在程序执行过程中使用new运算符创建的java对象,存储在堆内存当中。对象内部有实例变量,所以实例变量存储在堆内存中。
7、变量分类:
	*局部变量【方法体中声明】
	*成员变量【方法体外声明】
			-实例变量【前边修饰符没有static】
			-静态变量【前边修饰符中有static】
8、静态变量存储在方法区内存当中
9、三块内存当中变化最频繁的是栈内存,最先有数据的是方法区内存,垃圾回收器主要针对的是堆内存
10、垃圾回收器【自动垃圾回收机制、GC机制】什么时候会考虑将某个java对象的内存回收?
	*当堆内存中的java对象成为垃圾数据的时候,会被垃圾回收器回收
	*什么时候堆内存中的java对象会变成垃圾?
		没有更多的引用指向他的时候。
		这个对象无法被访问,因为访问对象只能通过引用的方式进行访问

14、关于java类中的构造方法

14.1、构造方法又称为构造函数/构造器/Constructor

14.2、构造方法语法结构:

		【修饰符列表】 构造方法名(形式参数列表){
			方法体
		}

14.3、回顾普通方法语法结构:

		【修饰符列表】返回值类型 方法名(形式参数列表){
			方法体
		}

14.4、对于构造方法,“返回值类型”不需要指定,也不能写void,只要写上void就是普通方法了。

14.5、对于构造方法来说,方法名必须和当前类的类名保持一致。

14.6、构造方法的作用?

	构造方法存在的意义是,通过构造方法的调用,可以创建对象。

14.7、构造方法怎么调用?

-普通方法调用:

方法修饰符中有static的时候:类名。方法名(实参列表)、

方法修饰符列表中没有static的时候:

引用.方法名(实参列表)
-new 构造方法名(实参列表)

14.8、构造方法调用结束之后,有返回值吗?(方法名前没有返回值类型不一定没有返回值)

	每一个构造方法实际上执行结束之后都有返回值,但是这个“return 值;” 这样的语句不需要写。构造方法结束的时候java程序自动返回值
	并且返回值类型是构造方法所在类的类型。由于构造方法的返回值类型就是类本身,所以返回值类型不需要填写。

14.9、当一个类中没有定义任何构造方法的时候,系统会默认给该类提供一个五参数的构造方法,这个构造方法被称为缺省构造器

14.10、

当一个类显示的构造方法定义出来的时候,系统就不在默认为这个类提供缺省构造器了,建议开发中为当前类提供无参数构造方法,因为无参构造方法太常用了

14.12、

构造方法是可以重载的,在一个类中编写多个构造方法,这多个构造方法显然已经构成了方法重载机制

14.13、

调用带有static的方法 类名.
ConstructorTest01.doSome();
doSome();
调用没有static的方法 引用.
ConstructorTest01 t=new ConstructorTest01 ();
t.doOther();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值