黑马程序员技术交流社区

标题: 【西安JavaEE21期基础班】学习笔记 [打印本页]

作者: 董柄晨    时间: 2018-1-29 17:12
标题: 【西安JavaEE21期基础班】学习笔记
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成员方法赋值.



作者: 董柄晨    时间: 2018-1-29 17:18
么么哒,真厉害




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2