目录
二:Java基础语法(基础篇)
1.数据类型
2.关键字
3.运算符
4.Java的输入输出
5.流程控制语句
6.数组(很重要)
7.小结
二:Java基础语法(基础篇)
1.数据类型
基本数据类型:共8个(在小化大的时候系统可以自动进行;反之,强制转换大化小会丢失字节,造成后果由程序员负责)
- byte:1个字节(字节流就是一个字节一个字节的读取)
- short:2个字节
- int:2个字节
- long:8个字节
- float:4个字节(使用String.format( )或者printf可以保留小数点)
- double:8个字节(浮点型)
- char:1个字节(字符流是按照Unicode编码形式,两个字节两个字节的读取)
- 这里引出几种编码形式
- 最早的:ASCII码(1个字节编码1个汉字)
- 然后:因为发现中文太多,结果后来采用Unicode(2个字节编码1个汉字)
- 最后:还是不够用,使用UTF-8编码解决的汉字不够用的问题(3个字节编码1个汉字)
- boolean:4个字节—取值为true或者false(布尔类型)
引用数据类型:String,ArrayList,Scanner(其实就是某个类) Java为了引入自己的特点:创建了包装类,就是将基本数据类型封装成为类
- Integer——int
- Double——double
- Character——char
- 上面的包装类也会在Java中的JDK库中学习
- 新加的String字符串类,底层基于数组实现(关于字符串后面会有一大章重点学习)
(Ps:写几个常用的)
2.关键字
先总结一下重要的关键字:
- new(无法实例化abstract类和interface(抽象类和接口))
- class,interface(接口),package(包)
- extends(继承),implements(实现)
- final,abstract(抽象的),static(静态的)
- this,super
- public,private,protected,default(默认的)(这个在类设计进阶的时候在详细聊聊)
在聊一聊他们的作用
- final(最终的)
- 修饰类:类无法再被继承
- 修饰成员属性:该属性无法再被修改
- 修饰成员方法:无法被子类重写
- new(实例化对象;创建引用时)
String str = new String();
//这个new相当于实例化String类,创建了一个对象,并且是在堆区创建对象,栈区创建了str引用(指针)
String str = "Hello World!";
//这个是直接在栈区中的字符串常量池子中创建了字符串"Hello World!"
//有一张图可以再复习一下
String[] str = new String[];
//这三个完全不一样,两个new的作用也不一样
Object[] object = new Object[10];
//虽然这个是接口,但是并没有实例化接口,这里接口并不是实例化的意思,而是为这个引用开辟了一块空间
- class,interface(abstract)
3.运算符
- +,-,*,/,%(easy,不过注意一下/和%,考试肯定经常考):二元运算符
- ++,--简写的时候使用:一元运算符
i++;
i = i + 1;
//两者效果一样,前者更加简洁
i++;
++i;
//两者效果其实一样,但是编译过后形成的汇编语言其实不一样
int n = 10, i = 1;
n = ++i;//这个先加在赋值,所以n=12 i=2
n = i++;//这个先赋值在相加,所以n=11 i=2
- <,==,!=等等:关系运算符,返回值为布尔类型
- ||,&&,==:与上面的结合起来使用;与第五点相比连用两个具有短路作用(可以节省cpu运算资源)
- |,&:也可以用于逻辑运算
- =:赋值运算符,优先级很低
- 三元运算符:写法更加简洁,可以与if,else条件判断相互替换(如果掌握的不熟,可以先用if,else)
- instanceof:java特有,用于判断一个对象是否是某一个类的实例,返回值为布尔类型
Scanner scanner = new Scanner(System.in);
System.out.println(scanner instanceof Scanner);
//会输出true
int max=a>b?a:b;
//三元运算符,很简洁比较方便
4.Java的输入输出
- Java采用Stream流的形式管理输入输出
- 在学习阶段常常使用Scanner类,在控制台进行输入(已经掌握的很熟练了)
- 在实际情况上,会有多种数据源,Stream流采用的更加频繁
- 在IO流那一章会详细介绍java是如何管理输入输出的(下面是最基本的四个输入输出抽象类)
- InputStream
- OutputStream
- Reader
- Writer
下面介绍一下Scanner:(毕竟考试和算法,使用的很多)
- 首先这个类需要导包:import java.uitl.Scanner;
- 然后,因为这个类中的方法并不是static的,因此需要实例化Scanner类
Scanner scanner = new Scanner(System.in); - 最后便可以使用了
Scanner类使用过程需要注意的几个点:
- nextLine()与next()方法不一样
- nextLine():读取一行,截断值为Enter——回车键
- next():读取一个字符串,截断值为space——空格
- Scanner类中并没有读取字符的功能:并没有nextChar()
- 如果要读取字符串,需要使用Character包装类(后面在JDK基础类库中详细介绍)
- 还有就是print(),println(),printf()之间的区别
5.流程控制语句
顺序结构语句
- 赋值语句:i +=i;
- 空语句:;(就是单独一个;)(*)
for(;;){}
//目前遇到的
return;
//不太清楚这个有什么用,这里的;和return
- 复合语句(*)
选择语句
- if,else,else if
if(){ }
else{ }
//第一种结构
if(){ }
else if(){ }
else{ }
//第二种结构
if(){ }
if(){ }
else(){ }
//第三种结构
/**总结一下
*else和default很像
*如果前面的条件都不满足就执行这个代码块里面的内容
*并且是可写可不写的
*/
- switch,case
switch(str){
case "1":break;
case "2":break;
default:
}
/**注意一下
*java中的switch是可以支持字符串的
*记得好像是在JDK 8 中提出的新特性
*还有就是一定要记得使用break跳出switch语句
*/
循环语句
- for:这里在补一个增强for循环,java为了方便遍历数组(集合框架推出了这个,内置迭代器)
int[] array = {1,2,3,4,5,6};
for(int i:array){
System.out.println(i+" ");
}//增强for循环,也可以叫做foreach循环
//下面补一个后面在集合框架要学的迭代器
//(*)
- while:在不确定循环次数的时候经常使用,配合break;(其实for循环也可以实现:for(;;))
eg:(1)循环输入时,当读取到-1时为止(2)不知道循环结束的具体次数时候 - do—while(几乎很少用到……)
转移语句
- break:中断整个循环(很重要,常常与选择语句和循环语句结合使用,下同)
- continue:跳过某一次循环
- return:这个不太会(回收伏笔了)(*)
6.数组(很重要)
数组的创建
int a[];
int[] a;
//声明数组,a为引用数据类型(指针)
a = new int[10];
//分配空间,容量为10,分配空间后每个值默认为0,boolean形为false
a.length;
//length为数组的成员属性,表示长度
数组的遍历
//两种
//1.for循环(......)
//2.增强for循环,foreach循环
for(int i ; a){
Syste,.out.println(i);
}
数组的底层原理:其实就是顺序表(在后面集合框架会详细介绍)
二维数组
int[][] a;
int a[][];
//声明数组,创建引用
a = new int[3][4];
a = new int[3][];
//java允许创建不规则数组,允许每一行长度不同
int a[][]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int x[][]={{10,20,30,45},
{15,25,35,50},
{19,28,38,49}};
//可以直接初始化
a.length;
//表示数组的行数
a[i].length;
//表示数组第i行的元素的个数
7.小结
- 掌握基本数据类型和操作运算
- 掌握顺序结构、选择结构和循环结构,具备运用其解决实际问题的能力
- 理解一维数组和二维数组定义形式,掌握ForEach遍历循环