类和对象简介

📔 类和对象
📄 客观存在的事物都可以看作对象;
📄 类是对现实生活中一类具有共同属性和行为的事物的抽象;
📄 对象是能够看得见摸得着的真实存在的实体。

📔 类的定义
📄 类是Java程序的基本单位;
📄 类的组成:属性和行为

  1. 属性:在类中通过成员变量来体现(类中方法外的变量);
  2. 行为:在类中通过成员方法来体现(和前面的方法相比去掉static即可);

📔 类的定义步骤

  1. 定义类;
  2. 编写类的成员变量;
  3. 编写类的成员方法;
    1. public class ClassName{
    2. //成员变量
    3. 变量1的数据类型 变量1
    4. 变量2的数据类型 变量2
    5. ……
    6. //成员方法
    7. 方法1
    8. 方法2
    9. ……
    10. }
    11. /*创建对象 *类名 对象名 = new 类名(); */

面向对象中的内存分配

📔 对象内存
📄 **Student s = new Student();**
📄 其中,s 指向栈内存,new Student() 地址在堆内存中;

📔 类中成员变量和局部变量区别

区别 成员变量 局部变量
类中位置不同 类中方法外 方法内或者方法声明上
内存中位置不同 堆内存 栈内存
生命周期不同 随着对象的存在而存在,随着对象的消失而消失 随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同 有默认初始化值 没有默认的初始化值,必须先定义,赋值,才能使用

封装

📔 private关键字
📄 权限修饰符;
📄 可以修饰成员(成员变量和成员方法);
📄 作用是保护成员不被别的类使用,被private修饰的成员只能在本类中才能访问


📔 this关键字
📄 this修饰的变量指代成员变量;
📄 解决局部变量隐藏的成员变量;
📄 代表所在类对象的引用;


📔 封装
📄 将某些信息隐藏在类内部,不允许外部直接访问,必须通过方法访问;
📄 提高安全性;


构造方法

📔 构造方法又叫做构造器,是类的一个特殊成员,它会在类实例化对象的时候自动调用;
📄 作用:创建对象;
📄 功能:创建对象时完成初始化;
📄 语法:

  1. [修饰符] 方法名 ([参数列表]){
  2. //方法体
  3. }

📔 构造方法注意事项
📄 当类中没有构造方法时,系统会默认生成一个无参的方法;
📄 构造方法创建:

  1. 如果没有定义构造方法,系统将给出一个默认的无参数构造方法;
  2. 如果定义了构造方法,系统将不再提供默认的构造方法;

📄 构造方法重载:如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法;
📄 推荐形式:无论是否使用,都手工书写无参的构造方法


📔 API(Application Programming Interface):应用程序编程接口(们只需关注使用方法,不需要关注其实现的过程。)


String类

📄 String类在java.lang包下,所以使用的时候不需要导包;
📄 String类代表字符串,Java程序中的所有字符串文字都被实现为此类的实例,也就是说,Java程序中所有的使用双引号的字符串,都是String类的对象;

字符串的特点

📄 字符串不可改变,它们的值在创建后不能被更改;
📄 虽然String的值不能被更改,但是它们可以被共享;
📄 字符串效果上相当于字符数组(char[])——jdk8及以前是字符数组,jdk9及以后是字节数组,但是底层原理是字节数组(byte[]);

方法名 说明
public String() 创建一个空白字符串对象,不含任何内容
public String(char[] chs) 根据字符数组的内容,来创建字符串对象
public String(byte[] bys) 根据字节数组的内容,来创建字符串对象
String s = “abc” 直接赋值的方式创建字符串对象,内容就是abc

  1. String s1 = new String();
  2. System.out.println("s1:" + s1);
  3. /*控制台输出:
  4. s1:
  5. */
  1. char[] chs = {'a','b','c'};
  2. String s2 = new String(chs);
  3. System.out.println("s2:" + s2);
  4. /*控制台输出
  5. s2:abc
  6. */
  1. byte[] bys = {97,98,99}; //字节直接输入整数
  2. String s3 = new String(bys);
  3. System.out.println("s3:" + s3);
  4. /*控制台输出
  5. s3:abc
  6. */
  1. String s4 = "abc";
  2. System.out.println("s4:" + s4);
  3. /*控制台输出
  4. s4:abs
  5. */

String 对象的特点

  1. 通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址不同;
  2. 以 “” 给出的字符串对象,只要字符序列相同(顺序和大小写),无论在程序代码中出现多少次,JVM都只会建立一个String对象,并在字符串池中维护。

字符串比较

📔 使用 == 做比较
📄 基本类型:比较的是数据值是否相同;
📄 引用类型:比较的是地址值是否相同;

📔 字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫做:**equals()**
📄**public boolean equals(Object anObject)**: 将此字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串。

  1. public static void main(String[] args) {
  2. char[] chs = {'a','b','c'};
  3. String s1 = new String(chs);
  4. String s2 = new String(chs);
  5. String s3 = "abc";
  6. String s4 = "abc";
  7. System.out.println("s1 and s2:" + (s1 == s2));
  8. System.out.println("s1 and s3:" + (s1 == s3));
  9. System.out.println("s3 and s4:" + (s3 == s4));
  10. System.out.println("_____________________");
  11. //比较内容
  12. System.out.println("s1 and s2:" + s1.equals(s2));
  13. System.out.println("s1 and s3:" + s1.equals(s3));
  14. System.out.println("s3 and s4:" + s3.equals(s4));
  15. }
  16. /*控制台输出:
  17. s1 and s2:false
  18. s1 and s3:false
  19. s3 and s4:true
  20. _____________________
  21. s1 and s2:true
  22. s1 and s3:true
  23. s3 and s4:true
  24. */

String 中的方法

方法名 说明
public boolean equals(Qbject anObject) 比较字符串的内容,严格区分大小写
public char charAt(int index) 返回指定索引处的 char 值
public int length() 返回此字符串的长度

StringBuilder

  1. public static void main(String[] args){
  2. String s = "hello";
  3. s += "world";
  4. System.out.println(s);
  5. }

📔 在此段代码中,在堆内存中:

  1. 首先在常量池中,生成一个 **"hello"** 字段;
  2. 再在常量池中生成 **"world"** 字段;
  3. 最后再生成 **"helloworld"** 字段;

📄 即生成了三个字段,这种操作耗费空间;Java提供了 StringBuilder 类来避免这种操作。


  1. **StringBuilder** 是一个可变的字符串类,我们把它看成一个容器;
  2. 这里的可变指的是 **StringBuilder** 对象中的内容是可变的;
  3. **StringBuilder****String** 类的区别:
    1. **String**:内容不可变;
    2. **StringBuilder**:内容可变;

StringBuilder 的构造方法

📔 同一般的类的构造方法;

StringBuilder 类中的方法使用

📔 **append()**方法:添加数据,返回对象本身;

  1. public static void main(String[] args) {
  2. StringBuilder sb = new StringBuilder();
  3. sb.append("Hello ");
  4. sb.append("World");
  5. System.out.println("sb:" + sb);
  6. }
  7. /*控制台输出
  8. sb:Hello World
  9. */
  1. public static void main(String[] args) {
  2. StringBuilder sb = new StringBuilder();
  3. //链式编程
  4. sb.append("Hello ").append("World");
  5. System.out.println("sb:" + sb);
  6. }
  7. /*控制台输出
  8. sb:Hello World
  9. */

📔 **reverse()** 反转方法:

  1. public static void main(String[] args) {
  2. StringBuilder sb = new StringBuilder();
  3. sb.append("Hello ");
  4. sb.append("World");
  5. sb.resver();
  6. System.out.println("sb:" + sb);
  7. }
  8. /*控制台输出
  9. sb:dlroW olleH
  10. */

StringBuilder 和 String 相互转换

📄 StringBuilder 转化为 String 使用 **toString()** 方法;
📄 String 转化为 StringBuilder 通过构造方法实现;

  1. public static void main(String[] args) {
  2. //StringBuilder 转化为 String
  3. StringBuilder sb = new StringBuilder();
  4. sb.append("Hello World");
  5. String s = sb.toString();
  6. System.out.println("s:" + s);
  7. //String 转化为 StringBuilder
  8. String s1 = "Hello World";
  9. StringBuilder sb1 = new StringBuilder(s1);
  10. System.out.println("sb1:" + sb1);
  11. }
  12. /*控制台输出:
  13. s:Hello World
  14. sb1:Hello World
  15. */

集合基础

📔 集合的特点:提供一种存储空间可变的存储模型,存储的数据容量可以方法改变;
📄 集合类很多,介绍 ArrayList

📔 使用之前要导包
📄**ArrayList<E>**

  1. 可调整大小的数组实现
  2. **<E>**:是一种特殊的数据类型,泛型;
  3. 在出现的地方使用引用数据类型替换即可;

📃**ArrayList<String>**
📃**ArrayList<Student>**


方法名 说明
public ArrayList() 创建一个空的集合对象
public boolean add(E e) 将指定的元素追加到此集合的末尾
Public void add(int index,E element) 在此集合中的指定位置插入指定的元素

📑 插入元素不能索引越界,最多只能多一个位置——即有2个元素,则索引为0,1;插入位置最多只能2,不能超过2;

  1. import java.util.ArrayList;
  2. public class day11_test3 {
  3. public static void main(String[] args) {
  4. //jdk1.7后新特性,new 后面的<>中类型可以自动从前面推导
  5. ArrayList<String> array = new ArrayList<>();
  6. //使用 add()方法添加元素
  7. array.add("Hello");
  8. array.add("World");
  9. System.out.println("array:" + array);
  10. //使用 public void add(int index,E element)在指定位置添加(插入)元素
  11. array.add(1, "javaSE");
  12. System.out.println("array:" + array);
  13. }
  14. }
  15. /*控制台输出:
  16. array:[Hello, World]
  17. array:[Hello, javaSE, World]
  18. */

📔 ArrayList 常用方法

方法名 说明
public boolean remove(Object o) 删除指定的元素,返回删除是否成功
public E remove(int index) 删除指定索引处的元素,返回被删除的元素
public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
public E get(int index) 返回指定索引处的元素
public int size() 返回集合中元素的个数