首页 > 代码库 > Java学习周记week02

Java学习周记week02

1.面向对象的思想

 

 

  面向对象是基于面向过程的编程思想.

  面向过程:强调的是每一个功能的步骤

  面向对象:强调的是对象,然后由对象去调用功能

 

  特点

 

  是一种更符合我们思考习惯的思想

  可以将复杂的事情简单化

  将我们从执行者变成了指挥者

  角色发生了转换 

 

  定义一个学生类

 1 public class Student {
 2     //成员变量
 3     //姓名
 4     String name;
 5     //年龄
 6     int age;
 7     
 8     //成员方法
 9     //学习的方法
10     public void study() {
11         System.out.println("学习");
12     }
13     
14     //吃饭的方法
15     public void eat() {
16         System.out.println("吃饭");
17     }
18 }

定义一个手机类

 1 public class Phone {
 2     //品牌
 3     String brand;
 4     //价格
 5     int price;
 6     //颜色
 7     String color;
 8     
 9     //打电话
10     public void call(String name) {
11         System.out.println("给"+name+"打电话");
12     }
13     
14     //发短信
15     public void sendMessage() {
16         System.out.println("群发短信");
17     }
18 }

2.成员变量和局部变量的区别

  在类中的位置不同

  成员变量:类中,方法外

  局部变量:方法中或者方法声明上(形式参数)

 

  在内存中的位置不同

  成员变量:堆内存

  局部变量:栈内存

 

  生命周期不同

  成员变量:随着对象的创建而存在,随着对象的消失而消失

  局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

 

  初始化值的不同

  成员变量:有默认值

  局部变量:没有默认值。必须先定义,赋值,最后使用

 

 1 public class DemoVariable {
 2     int x; //成员变量
 3     
 4     public void show() {
 5         int y = 0; //局部变量
 6         
 7         System.out.println(x);
 8         System.out.println(y);
 9     }
10 }

 

3.封装

  private关键字由来及其使用

  private关键字:

  是一个权限修饰符。

  可以修饰成员(成员变量和成员方法)

  被private修饰的成员只在本类中才能访问。

 

 

 1 public class Student {
 2     String name;
 3     //int age;
 4     private int age;
 5     
 6     public void setAge(int a) {
 7         if(a<0 || a>200) {
 8             System.out.println("你给的年龄有误");
 9         }else {
10             age = a;
11         }
12     }
13     
14     public int getAge() {
15         return age;
16     }
17     
18     public void show() {
19         System.out.println("姓名是:"+name+",年龄是:"+age);
20     }
21 }

 

   private最常见的应用:

  把成员变量用private修饰

  提供对应的getXxx()/setXxx()方法

  一个标准的案例的使用

 

 1 public class Student {
 2     private String name;
 3     private int age;
 4     
 5     public void setName(String n) {
 6         name = n;
 7     }
 8     
 9     public String getName() {
10         return name;
11     }
12     
13     public void setAge(inta) {
14         age = a;
15     }
16     
17     public int getAge() {
18         return age;
19     }
20 }

 

  封装的概述和好处

  封装概述

  是面向对象三大特征之一

  是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。就像刚才说的年龄。

  封装原则:

  将不需要对外提供的内容都隐藏起来。

  把属性隐藏,提供公共方法对其访问。

  成员变量private,提供对应的getXxx()/setXxx()方法

  好处:

  通过方法来控制成员变量的操作,提高了代码的安全性

  把代码用方法进行封装,提高了代码的复用性

 

4.this关键字

 

 

  this:代表所在类的对象引用

  方法被哪个对象调用,this就代表那个对象

 

  this关键字的使用

  局部变量隐藏成员变量(局部变量和成员变量重名)

 

 1 public class Student {
 2     private String name;
 3     private int age;
 4     
 5     public void setName(String name) {
 6         //name = name;
 7         this.name = name;
 8     }
 9     
10     public String getName() {
11         return name;
12     }
13     
14     public void setAge(intage) {
15         //age = age;
16         this.age = age;
17     }
18     
19     public int getAge() {
20         return age;
21     }
22 }

 

 

 

5.构造方法

 

  作用

  给对象的数据进行初始化

 

  格式

  方法名与类名相同

 

  没有返回值类型,连void都没有

  没有具体的返回值

修饰符 构造方法名(参数列表){

}

 

  注意事项

  如果你不提供构造方法,系统会给出默认构造方法

  如果你提供了构造方法,系统将不再提供

  构造方法也是可以重载的(即使用时带参构造和无参构造可同时使用)

 

 1 public class Student {
 2     private String name;
 3     private int age;
 4     
 5     /*
 6     public Student() {
 7         System.out.println("构造方法");
 8     }
 9     */
10     
11     public Student() {}
12     
13     public Student(String name) {
14         this.name = name;
15     }
16     
17     public Student(int age) {
18         this.age = age;
19     }
20     
21     public Student(String name,int age) {
22         this.name = name;
23         this.age = age;
24     }
25 
26     public void show() {
27         System.out.println(name+"---"+age);
28     }
29 }

 

 

 

6.String类

 

  字符串是由多个字符组成的一串数据

 

  构造方法

  public String(String original) 把字符串数据封装成字符串对象

  public String(char[] value) 把字符数组的数据封装成字符串对象

  public String(char[] value,int offset,int count) 把字符数组中的一部分数据封装成字符串对象

  直接赋值也可以是一个对象(定义一个字符串变量)

 

  通过构造方法创建字符串对象

  String s = new String(“hello”);

 

  直接赋值创建字符串对象

  String s = “hello”;

 

  判断功能方法

  boolean equals(Object obj): 比较字符串的内容是否相同

  boolean equalsIgnoreCase(String str): 比较字符串的内容是否相同,忽略大小写

  boolean startsWith(String str): 判断字符串对象是否以指定的str开头

  boolean endsWith(String str): 判断字符串对象是否以指定的str结尾

 

  获取功能方法

  int length():获取字符串的长度,其实也就是字符个数

  char charAt(int index):获取指定索引处的字符

  int indexOf(String str):获取str在字符串对象中第一次出现的索引,没有返回-1

  String substring(int start):从start开始截取字符串到字符串结尾

  String substring(int start,int end):从start开始,到end结束截取字符串;包括start,不包括end

 

  转换功能方法

  char[] toCharArray():把字符串转换为字符数组

  String toLowerCase():把字符串转换为小写字符串

  String toUpperCase():把字符串转换为大写字符串

 

  去除空格和分割功能方法

  String trim()去除字符串两端空格

  String[] split(String str)按照指定符号分割字符串

 

7.类名作为形式参数和返回值

 

  类名作为形式参数案例:需要的其实是该类的对象

1 class Test {
2     public void show(Person p){
3         p.eat();
4     }
5 }

 

  类名作为返回值案例:返回的其实是该类的对象

1 class Test {
2     public Person show(){
3         Person p = new Person("小王");
4         return p;
5     }
6 }

 

8.StringBuilder类

 

  String与StringBuilder的区别:

  String的内容是固定的。

 

  StringBuilder的内容是可变的。

  添加功能

  public StringBuilder append(任意类型):添加数据,并返回自身对象

  反转功能

  public StringBuilder reverse()

 

 1 public class DemoStringBuilder {
 2     public static void main(String[] args) {
 3         //创建对象
 4         StringBuilder builder = new StringBuilder();                
 5         //链式编程
 6         builder.append("hello").append("world").append(true).append(100);
 7         
 8         System.out.println("builder:"+builder);
 9         
10         //public StringBuilder reverse()
11         builder.reverse();
12         System.out.println("builder:"+builder);
13     }
14 }

 

9.ArrayList集合

  ArrayList<E>集合:大小可变数组的实现

  <E>:是一种特殊的数据类型,泛型。

  在出现E的地方我们使用引用数据类型替换即可

  举例:ArrayList<String>,ArrayList<Student>

  构造方法

  ArrayList()

  成员方法

  添加元素

  public boolean add(E e):添加元素

  public void add(int index,E element):在指定的索引处添加一个元素

 

 1 public class DemoArrayList {
 2     public static void main(String[] args) {
 3         //创建集合对象
 4         ArrayList<String> list = new  ArrayList<String>();
 5         
 6         //add(E e):添加元素
 7         list.add("hello");
 8         list.add("world");
 9         list.add("java");
10         
11         //add(int index,E element):在指定的索引处添加一个元素
12         list.add(1, "android");
13         
14         System.out.println("array:"+list);
15     }
16 }

 

  获取元素

  public E get(int index):返回指定索引处的元素

 

  集合长度

  public int size():返回集合中的元素的个数

 

  删除元素

  public boolean remove(Object o):删除指定的元素,返回删除是否成功 

  public E remove(int index):删除指定索引处的元素,返回被删除的元素

 

  修改元素

  public E set(int index,E element):修改指定索引处的元素,返回被修改的元素

 

10.FileWriter和FileReader

  FileWirter写数据

  

  构造方法

  FileWriter(String fileName) 传递一个文件名称

  成员方法

  void write(String str) 往文件中写入一个字符串。

  void flush() 刷新该流的缓冲,把内存缓冲区中的数据刷新到文件中。

  void close() 关闭此流,但要先刷新它。

  输出流写数据的步骤:

  1.创建输出流对象

  2.调用输出流对象的写数据的方法

  3.释放资源

 

  路径:

  相对路径:相对当前项目而言的,在项目的根目录下(a.txt)

  绝对路径:以盘符开始的路径(d:\\a.txt)

  close()和flush()方法的区别:

  flush():刷新缓冲区。流对象还可以继续使用。

  close():先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。

 

  FileWriter写数据的5个方法

 

  void write(String str):写一个字符串数据

  void write(String str,int index,int len):写一个字符串中的一部分数据, index:开始索引,len:写几个

  void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。‘a‘,97

  void write(char[] chs):写一个字符数组数据

  void write(char[] chs,int index,int len):写一个字符数组的一部分数据, index:开始索引,len:写几个

 

  换行问题

 

  windows:\r\n

  linux:\n

  mac:\r

  换行符可以写在第一个数据的结尾,也可以写在第二个数据的开头

 

 FileReader读数据

  构造方法

  FileReader(String fileName) 传递要读取的文件名称

 

  成员方法

  int read() 读取单个字符并返回

  int read(char[] cbuf) 一次读取一个字符数组的数据,返回的是实际读取的字符个数

 

  输入流读文件的步骤:

  1.创建输入流对象

  2.调用输入流对象的读数据方法

  3.释放资源

 

 

  一次读写一个字符数组复制文本文件

 1 public class Demo02CopyFile {
 2     public static void main(String[] args) throws IOException {
 3         //创建输入流对象
 4         FileReader fr  = new FileReader("Demo01FileWriter.java");
 5         //创建输出流对象
 6         FileWriter fw = new FileWriter("Copy.java");
 7         
 8         //读写数据
 9         char[] chs = new char[1024];
10         int len;
11         while((len=fr.read(chs))!=-1) {
12             fw.write(chs, 0, len);
13         }
14         
15         //释放资源
16         fw.close();
17         fr.close();
18     }
19 }

 

11.BufferedWriter和BufferedReader

  BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

  BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

 1 public class Demo01BufferedStream {
 2     public static void main(String[] args) throws IOException {
 3         //创建输出缓冲流对象
 4         BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
 5         bw.write("hello");
 6         //bw.flush();
 7         bw.close();
 8         
 9         //创建输入缓冲流对象
10         BufferedReader br = new BufferedReader(new FileReader("bw.txt "));
11         
12         /*
13         //一次读写一个字符
14         int ch;
15         while((ch=br.read())!=-1){
16             System.out.print((char)ch);
17         }
18         */
19         
20         //一次读写一个字符数组
21         char[] chs = new char[1024];
22         int len;
23         while((len=br.read(chs))!=-1) {
24             System.out.print(new String(chs,0,len));
25         }
26         
27         //释放资源
28         br.close();
29     }
30 }

 

缓冲流的特殊功能

  BufferedWriter

  void newLine():写一个换行符,这个换行符由系统决定

  BufferedReader

  String readLine():一次读取一行数据,但是不读取换行符

 

  从文本文件中读取数据到ArrayList集合中,并遍历集合

  例:每一行数据作为一个字符串元素 

 1 public class Demo03FileToArrayListTest {
 2     public static void main(String[] args) throws IOException {
 3         //创建输入缓冲流对象
 4         BufferedReader br = 
 5 new  BufferedReader(new FileReader("array.txt"));
 6         
 7         //创建集合对象
 8         ArrayList<String> list = new ArrayList<String>();
 9         
10         //读取数据,每次读取一行数据,把该行数据作为一个元素存储到集合中
11         String line;
12         while((line=br.readLine())!=null) {
13             list.add(line);
14         }
15         
16         //释放资源
17         br.close();
18         
19         //遍历集合
20         for(int i=0; i<list.size(); i++) {
21             String s = list.get(i);
22             System.out.println(s);
23         }
24     }
25 }

 

Java学习周记week02