日期:2014-05-20  浏览次数:20710 次

J2SE知识点归纳笔记(二)---Java基础知识

Java基础知识


前言

ps:排版的时候除了问题,所以导致目录结构有点移位

不知道是不是csdn的问题,给读者照成不便,请见谅!


在上一节中我们对Java的历史背景以及相关的运行原理进行了学习;
这一节中我们将对Java的基础知识进行学习;
而这些基础知识在C或者其他语言中都是有得,
学过的可以复习一下,没学过的可以学习下
好了,废话不多说




学习路线图:



学习路线解析:
这一节的知识点都很重要,都要熟练掌握,可以说是后面学习的根基
先掌握运算符以及基本的数据类型,特别要留意数据类型的转换,因为这个是面试的一个热点
运算符的优先级要记得;接着是字符串的相关操作,这个用的比较多;
三大控制结构要熟练,数组也是!



运算符:


算术运算符


十二个算术运算符


加法:+ 减法:- 乘法: *
除法:/ 求余:% 自增:++
自减:-- 加法赋值:+= 减法赋值:-=
乘法赋值:*= 除法赋值:/= 求余赋值:%=



注意内容:

①如果除号的前后都是整型,那么结果也为整型       eg:5 / 2 = 2

求余运算符通常用于整型,当然浮点型也可以,但结果是不准确的,但对精度要求较高时就不要了,可以使用BigDecimal类型

③自增和自减作为前缀还是后缀:

前缀:先自增,后参与运算后缀:先参与运算,后自增

eg:如图,大家来判断一下输出的结果:



输出的结果是:


你算对了没?对付这种自增自减的问题,更重要的是细心,还有一点要注意的是:

自增自减运算符只能对单个变量起作用,表达式和常量是没用的

eg:(a + b)++  想让相加后的结果+1,但是确是错的,

同样,常量也是不行的,6++,这样也是错的!切记!




逻辑运算符


七个逻辑运算符


逻辑与: & 逻辑或: | 逻辑非: !
短路与 : && 短路或 :  || 等于: ==
不等于: !=    


"短路现象"

这里要注意的是短路与与短路或
短路与:只要前面的判断条件为假,那么后面的就不用判断了,结果一定为假
短路或:只要前面的判断条件为真,那么后面的就不用判断了,结果一定为真
注意与逻辑与和逻辑或区分哦!







三元运算符


使用格式:


a ? b : c;
如果a成立的话,执行b,否则执行c,精简版的if-else

使用例子:


max =  a > b ? a : b;
如果a > b,那么max = a;否则 max = b;





位运算符


七个位运算符

:

按位取反:~ 按位与:& 按位或:|
按位异或:^ 向右移位:>> 向左移位:<<
无符号右移:>>>    


用法解析:


Java中可通过Integer类的toBinaryString(int i )方法将十进制数转换为二进制的字符串
①按位取反:    ~a = - a -1
②位逻辑运算符:
&操作数都为1结果为1,否则结果为0                       |操作数都为0,结果才为0,否则为1
^操作数相同为0,不同结果为1
③位移运算
左移1位等于乘以2;右移一位等于除以2;再取整,移位溢出的丢弃
无符号右移:和前面两个不同,最高位不是用原来的最高位填充,而是直接用0来填充最高位




运算符优先级


在所有的运算符中,圆括号的优先级最高!

优先级表:








基本数据类型:


数据类型:



整型:int,short,long,byte;都是有符号的
浮点型:float,double
字符型:char
布尔值:boolean

注意事项:
①Java中,如果是想表示float类型的必须在后面加上后缀F,如果没有后缀的话会被默认为double类型
②在Java中char占用两个字节哦!因为Java使用Unicode 16位的编码方式,可以表示所有的字符
③布尔值boolean只有两个值:要么是true,要么是false,不能用1,0来表示真假哦!


数据类型的转换:


自动转换(隐式):


如果满足以下两个条件就会进行自动转换:
①转换后的类型比原来的类型大    ②转换前后类型相互兼容

eg:如果两个byte变量相加后,结果是int类型哦,这个是面试的一个考点来的!


强制转换(显式)


就是在前面加个(数据类型)
eg:a= (float) b
这里要注意精度损失的问题





常量与变量:


Java命名规则:


由数字,下划线,$,英文字母构成,且不能以数字开头


常量:


不能变的量就是常量
声明格式:  final  int PRICE = 3;
定义以后就不能改变PRICE的值了,不然会报错,这里要注意的是常量通常都是大写

变量:


就是可以改变的量,变量的命名通常是,首字母小写,第二个单词起大写
eg:priceOfApple


赋值与初始化



赋值:
太简单了,不讲
初始化:
注意:对于局部变量,当我们想要使用一个变量的时候,要先对他进行初始化,不然编译器会报错的!!!
而例外的情况:实例变量与累变量,编译器会自动地对他们进行初始化
默认:boolean变量 为false,char默认为'\000'





字符串:


Java中用String类来存储,处理字符串

字符串定义:


System.out.println("Hello");     ""括着的是字符串常量
String str = "Hello" ;            定义一个字符串变量  

字符串相关操作:


①字符串的连接:用"+"加号可以连接成字符串,比如: 123 + "" = "123"
②求字符串的长度:  str.length()
③求子串:str.subString(开始下标,"结束下标")    //注意是从0开始算的
④判断是否相等:这里要注意==这个比较的是字符串是否存储在同一位置!如果是比较内容我们要用equals("");
⑤返回给定下表处的字符:   str.charAt(int index);  //从0开始算的
⑥将指定字符串连接到字符串的尾部:  str.concat("HeHe");
⑦检索某字符在字符串中第一次出现的下标:  str.indexOf("a");
⑧检索某字符在字符串中最后一次出现的下标:str.lastIndexOf("a");
⑨去掉头尾的空白:str.trim(),这个在数据库操作中比较常用
⑩替换字符串中的某段: str.replace("想替换的字符串","替换后的字符串");
11.比较两个字符串的大小,无视大小写:str.equalsIgnoreCase(stg);
12.全部字符转化为小写:str.toLowerCase()
13.全部字符转化为大写:str.toUpperCase();


一个疑问?


String str = "abc"   str = "cba"
那么string对象是否会发生改变呢?
答案肯定是不会,str只是作为一个引用指向一个字符串存储的内存空间;
就是str存储的是只是一个地址!
当我们定义字符串变量时,系统会先对String常量池中的字符串进行匹配
有的话直接使用已经存在的字符串常量,否则在池中再生成一个!







程序控制语句



选择结构:


if语句:


在进行if语句的嵌套时要牢记一点:
else语句总是和其最近if语句相互搭配,当然前提是他们在同一块中

switch语句:


这里要注意的就是记得给每个case写个break,不然.....你试试就知道了


循环结构:


while语句和do-while()


后者与前者的区别就是无论条件是否成立,后者至少执行一次


for语句


由三部分组成,初始化,条件判断,迭代
比较常用,这里就不说了,循环嵌套的时候小心点,注意一定要有条件跳出循环,不然死循环,呵呵


控制语句:


break语句:可以直接终止循环,多层嵌套时,跳出一层循环
continue语句:直接停止本次循环的剩余语句,直接进行下一次循环
return语句:只能用在方法(函数)中,结束当前的方法








数组:


数组的作用:


数的集合,将一坨相同数据类型的数据存放到一个集合中
而这个集合名叫数组,我们可以通过
数组名+下标来访问数组中的每一个元素

这里要区分:


数组名变量存在栈中,而指向内存堆中连续的内存空间,这个连续的内存空间是存储数组元素的

数组的使用:


数组的创建: 


int[] array = new int[3];             //定义一个容量为3的整型数组


数组的初始化:


可在定义的时候初始化,或者利用for循环进行赋初值


数组的使用:


①获取数组的长度:array.length;
②数组复制:两个长度,类型相同的数组,可以直接用数组名赋值   eg: array1 = array2
③可以把main()的参数拿来用,args[];在命令行下可以在java ... 后添加参数



多维数组:


和其他语言不同,Java的多数组的列数可以是数目不同的!
使用代码如下:


public class arrayTest {
	public static void main(String[] args) {
		//创建一个二维数组
		//①直接一开始赋初值
		int[][] array1 = 
		{
				{1,2,3},
				{4,5,6},
				{7,8,9}
		};
		
		
		//②创建规则的二维数组 5*3的
		int [][] array2 = new int[5][3];		
		
		
		
		
		
		
		
		//③创建不规则的二维数组:3行,列数依次为:3,2,1
		int [][] array3 = new int[3][];
		//指定每一行的列数
		array3[0]= new int[3];
		array3[1]= new int[2];
		array3[2]= new int[1];				
		
		
		
		//都是一样的,只需要把array3换一下即可
		//对二维数组进行初始化,只需要通过两个for循环即可
		for(int i = 0;i < array3.length;i++)
		{
			for(int j = 0;j < array3[i].length;j++)
			{
				//赋值			
			}
		}
	}
}




至于数组的排序,会在后续的博文中总结一篇,因为排序算是比较重要的算法把



总结:


呼呼,这一章的内容比较多,笔者也总结了一天;
要掌握以下内容吧:
运算符:
就不用说了吧,位运算符的话用的比较少,但是左移运算符为*2,这个比直接*2高效哦!
短路与或要小心,优先级有个大体印象就行,如果不确定地话可以用()包住,保证优先运算
基本数据类型:
注意类型转换的问题,有个比较坑的面试题:两个byte变量想加后,结果为int哦!
还要注意,声明的变量一定要初始化,这是一个很好的编程习惯,要养成
字符串:
了解字符串的相关操作即可,记住几个比较常用的方法
控制语句:
这个不会就说不过去了
数组:
熟练掌握数组的创建,初始化,以及不规则多维数组的创建(Java特有的)


好吧,总结就到这里,内容比较多,都是知识点,记得不代表会
大家可以看下书,写下代码加深巩固,或者对有疑问的自己进行测试
如果文中有什么纰漏,错误,或者好的建议,望读者支出;
不甚感激!(*^__^*) 嘻嘻……