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" ; 定义一个字符串变量
字符串相关操作:
②求字符串的长度: 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特有的)
好吧,总结就到这里,内容比较多,都是知识点,记得不代表会
大家可以看下书,写下代码加深巩固,或者对有疑问的自己进行测试
如果文中有什么纰漏,错误,或者好的建议,望读者支出;
不甚感激!(*^__^*) 嘻嘻……