1.流程控制语句
1)顺序结构
2)选择结构
①if语句
if语句有三种格式
if语句格式1:
if(关系表达式) {
语句体;
}
执行流程:
A:首先计算关系表达式的值,看是true还是false
B:如果是true,就执行语句体
C:如果是false,就不执行语句体
if语句格式2:(if else可以替换三元运算符,但三元运算符不可以替换if else)
if(关系表达式) {
语句体1;
}else{
语句体2;
}
执行流程:
A:首先计算关系表达式的值,看是true还是false
B:如果是true,就执行语句体1
C:如果是false,就执行语句体2
if语句格式3:(关系表达式有true,则后面的即使满足条件也不执行)
if(关系表达式1) {
语句体1;
}else if(关系表达式2) {
语句体2;
}else if(关系表达式3) {
语句体3;
}
...
else {
语句体n+1;
}
执行流程:
A:计算关系表达式1的值,看是true还是false
B:如果是true,就执行语句体1
C:如果是false,就继续计算关系表达式2的值,看是true还是false
D:如果是true,就执行语句体2
E:如果是false,就继续计算关系表达式3...
F:当所有的关系表达式都是false的时候执行语句体n+1
②switch语句
switch语句格式
switch(表达式){
case 值1;
语句体1;
break;
case 值2;
语句体2;
break;
...
default:
语句体n+1;
break;
}
执行流程:
A.首先计算表达式的值
B.拿着这个计算出来的值,依次和case后面的值进行比较,一旦有匹配的,就执行相应的语句体,然后结束程序;
一旦所有的都不匹配,执行语句体n+1,然后结束程序。
注意事项:
A.case的穿透:匹配成功后执行完语句体,语句后面没有break,就不用和下一个case比较,直接执行后面的语句体(没有语句体不执行),
若后面还没有,继续穿透。但是一直没有匹配成功,就执行default
B.值必须为常量(byte,short,int,char)
3)循环结构
①for语句
for循环语句的格式:
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
执行流程:
A:执行初始化语句
B:执行判断条件语句,看其结果是true还是false
如果是false,就结束循环
如果是true,就继续执行
C:执行循环体语句
D:执行控制条件语句
E:回到B继续
注意事项:
A.for(int i = 1;true;i++);死循环,用于APP外围。
B.跟踪变量的变化情况,输出语句写在for循环里面,输出最终结果,输出语句写在for循环外面。
②while语句
while语句有两种格式
格式1:
初始化语句;
while (判断条件语句) {
循环体语句;
控制条件语句; //按照需求可有可无
}
格式2:
do {
循环体语句;
控制条件语句;
} while (判断条件语句);
③三种循环(for,while,do...while)的区别
A.do...whlie至少执行一次
B.for和while循环必须先判断条件成立才执行循环体
C.while变量的作用域在循环内外都有效,for变量的作用域只在循环内有效,不能在循环外使用
D.知道循环次数用for,不知道循环次数用while....除此之外,推荐使用循环的顺序:for---while---do...while
④while(true){}死循环
2.中断、继续语句
1)break语句
结束这个循环(break可以使循环跳到需要的位置),只用于switch和while
2)continue语句
结束本轮循环,继续下一轮循环(放到最后面没意义)
面向对象:
一个类中具有
成员变量
成员方法去掉static关键字
成员变量和局部变量的区别:
A:在类中的位置不同
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数)
B:在类中的位置不同
成员变量:堆内存
局部变量:栈内存
C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化的问题
成员变量:有默认值(堆内存所有的变量都有默认值)
局部变量:没有默认值,必须先定义,赋值,才能使用
private关键字
是一个修饰符
可以修饰成员变量,也可以修饰成员方法
被private修饰的成员只能在本类中被访问
对应setXxx,getXxx
去掉static关键字
如果局部变量和成员变量名字相同,在局部使用的时候,采用的是就近原则,怎么区分呢,用this
1.IO流概述和分类
IO流用来处理设备之间的数据传输
文件复制,上传文件和下载文件
分类
字符输出流(FileWriter),写文件
字符输入流(FileReader),读文件
2.输出流(FileWriter)
输出流写文件步骤
创建输出流对象 (调用系统资源创建了一个文件,把输出流对象指向文件,导包并且抛出IO异常)//FileWriter fw = new FileWriter(StringFileWrite)
调用输出流对象的写数据的方法,并且刷新缓冲区 //fw.write(); //fw.flush();
释放资源 //fw.close();
相对路径,相对于当前项目而言的,在项目的根目录下(a.txt)
绝对路径,以盘符开始的路径(d:\\a.txt)
close()和flush()方法的区别
flush():刷新缓冲区,流对象还可以继续使用
close():先刷新缓冲区,再通知系统释放资源,流对象不可以再被使用,
FileWriter写数据的五种方法
void write(String str)//写一个字符数据
void write(String str,int index,int len)//写一个字符串中的一部分数据
void write(int ch)//写一个字符数据,这里写int类型的好处是既可以写char类型的数据,可以刻写int类型的值.'a',97
void write(char[] chs)//写一个字符数组数据
void write(char[] chs,int index,int len)//写一个字符数组中的一部分
FileWriter写数据的换行
windows:\r\n
linux:\n
mac:\r
如何实现数据的追加写入
FileWriter(String fileName,true)追加写入,若是后面没写,则默认为false,新输出的数据会覆盖之前所输出的数据.
3.输入流(FileReader)
FileReader(String fileName):传递文件名称
输入流读文件步骤
创建输入流对象(导包并且抛出IO异常) //FileReader fr = new FileReader(a.txt)
调用输入流对象的读数据方法 //fr.read();若输出,不要换行
释放资源 //fr.close();
输入流读数据的两种方法
int read(int ch) //一次读取一个字符,返回的是读取的字符的ASCII码
int read(char[] chs) //一次读取一个字符数组,返回的是实际读取长度,数组长度为1024的整数倍,效率稍高一些
5.缓冲流
特殊功能
BufferedWriter
void newLine();写一个换行符,这个换行符由系统决定
BufferedReader
String readLine();一次读
取一行数据,但是不读取换行符
4.复制文件的五种方法
基本流一次一个字符
基本流一次一个字符数组
缓冲流一次一个字符
缓冲流一次一个字符数组
缓冲流特殊方法一次一行数据(newread/newline)
this关键字
代表所在类的对象引用
方法被哪个对象调用,this就代表那个对象
使用场景:局部变量隐藏成员变量
构造方法
1)给对象的数据进行初始化
格式
方法名和类名相同
没有返回值类型,连void都不能写
没有具体的返回值
调用
通过new关键字调用
类名 对象名 = new 构造方法(...)
2)如果我们没有给出构造方法,系统会给一个无参数的构造方法,如果我们给出了构造方法,系统不再提供默认的无参数构造方法给我们使用,如果我们想使用无参构造方法,就必 须自己再给出无参数构造方法,否则用set赋值的时候会覆盖掉带参构造方法创建对象所赋的值.
构造方法也可以重载
3)为成员变量赋值有两种方法
A:一种是无参构造创建对象,然后用set成员方法赋值,方法多次调用可以一直改变成员变量的值并覆盖之前赋的值;
B:另外一种是用满参的构造方法创建对象直接进行赋值,但是这种方法赋值是固定的,若要修改,使用set方法直接在满参的构造方法创建对象赋值后直接进行修改即可
注意:若要修改,会覆盖满参的构造方法创建对象赋的值,所以对象的数据需要一直改变的情况下,推荐使用无参构造创建对象,然后用set成员方法赋值.
|
|