API/toString方法/equals方法/String/StringBuilder

一、API的概述和使用步骤

1. 什么是API?
        Application Programming Interface  ( 应用程序编程接口)
                 大白话: API指的就是java给我们写好的类.
2. 如何使用API?
            A: 打开帮助文档
            B: 点击显示,找到索引,看到输入框
            C: 你要学习什么内容,你就在框框里面输入什么内容
                 举例:Random
            D: 看包
                java.lang 包下的类在使用的时候是不需要导包的
            E: 看类的描述
                Random 类是用于生成随机数的类
            F: 看构造方法
                Random(): 无参构造方法
                    Randomr = new Random();
            G: 看成员方法
                   publicint nextInt(int n): 产生的是一个[0,n)范围内的随机数
                     调用方法:
                         看返回值类型:人家返回什么类型,你就用什么类型接收
                         看方法名:名字不要写错了
                         看形式参数:人家要几个参数,你就给几个,人家要什么数据类型的,你就给什么数据类型的
                        intnumber = r.nextInt(100);

二、通过Scanner获取字符串数据

 next方法与nextLine的区别
        next和nextLine方法都是用于接收键盘录入的字符串
                next(): 遇到空格或者tab键就不再录入了

                nextLine():遇到了回车换行就不再录入了.

 nextInt与nextLine的注意事项

             现象:
                 当nextInt和nextLine方法配合使用的时候, nextLine将没有机会再接收键盘录入的数据了
                    intnum = sc.nextInt();        10\r\n
                                                10 被num记录下来了
                    Strings1 = sc.nextLine();    \r\n 被nextLine遇到了.
             解决:
                     以后无论是整数还是字符串, 都用nextLine进行接收
                     然后将传入的整数字符串通过Integer.parseInt();进行转换
                    Integer.parseInt(Stringnum)    : 将传入的数字字符串转换为整数, 如果是非数字字符串, 报错!
                    Integer.parseInt("abc");
                     运行: NumberFormatException

三、Object类的toString()方法

 什么是Object类?
        1. 所有的类都直接或者间接的继承到了Object
 Object类种的toString方法返回的是什么?
             如果没有重写的话, 那么打印的结果将是:
                 对象的全类名 + @ + 对象的十六进制哈希值.
             问题: toString方法的作用
                     一般会重写toString方法, 在方法中返回对象的属性值.
                                            --> 实际开发过程中往往用于调试程序.
     练习:
        5 分钟, 编写标准学生类, 加入toString方法
             alt + shift + s + v   : 查看可以重写的方法

            alt+ shift + s + s   : 自动生成toString方法

public class Student {
	private String name;
	private int age;
	@Override
	public String toString() {
		return name+"---"+age;
	}
	/*//第一种,alt+shift+s  +s  由系统重写
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}*/
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Student() {
		super();
	}
}
     结论:
         如果打印一个对象的引用, 结果不是全类名 + 16进制哈希值的话, 说明该对象就重写了toString方法

四、Object类的equals()方法

 equals方法的作用?
        1. 用于对象之间的比较.
 equals方法跟==号的区别?
            == 号可以比较基本数据类型, 也能比较引用数据类型
                     比较基本数据类型的时候, 比较的是值.
                     比较引用数据类型的时候, 比较的是地址值
            equals 方法只能比较引用数据类型
                     为什么?  只有对象才能调用方法
                     在没有重写object中的equals方法的时候, 默认也是用==号比较地址值

                    这时候如果想要按照自己的意思进行比价, 就需要重写equals方法

    @Override
    publicboolean equals(Object obj) {  // Object obj  = newPerson();
        if(objinstanceof Person){
            //1. 将传入的对象向下转型
            Personp = (Person) obj;
            //2. 使用姓名和年龄逐个比较
            //p1.age == p2.age && p1.name.equals(p2.name)
            returnthis.age == p.age && this.name.equals(p.name);
        }else{
            //3. 如果走了else, 说明传入对象不是Person类型
            //不具备可比性, 直接返回false
            return false;
        }
    } 

    分析eclipse自动生成的equals方法, 要求能够看得懂.   alt + shift + s+ h 

	@Override
    publicboolean equals(Object obj) {
        if(this ==obj)                        //如果两个对象指向的是同一个内存空间的. 直接返回true
            returntrue;
        if(obj ==null)                        //如果传入对象为null的话, 不具备可比性.
            returnfalse;
        if(getClass() !=obj.getClass())        // 如果字节码对象不相同, 说明不是用同一个类创建的对象
                                                //不具备可比性. 返回false
            returnfalse;
        Studentother = (Student)obj;            // 如果走到这一步, 说明字节码对象是同一个, 放心强转.
        if(age != other.age)
            returnfalse;                        //如果年龄不同, 直接返回false.
        if(name == null){            
            if(other.name != null)
                returnfalse;                    //当前对象的姓名为null, 传入对象的姓名不为null, 直接返回false.
        }else if (!name.equals(other.name))    
                                                //如果姓名内容不一样, 返回false即可
            returnfalse;
        returntrue;
    }

五、String类的概述和构造方法

什么是String类? 其本质是什么?
            String 类是一个字符串类
             其本质就是一个 字符数组.
            String 这个类比较特殊, "abc"这实际上是创建了一个对象
 2. 构造方法
            String(Stringoriginal): 把字符串数据封装成字符串对象
            String(char[]value): 把字符数组的数据封装成字符串对象
            String(char[]value, int index, int count): 把字符数组中的一部分数据封装成字符串对象
         注意:
                Strings ="123";                                // 这一步是创建了一个对象
                Strings = new String("123");            // 这一步是创建了两个对象

六、String创建对象的特点

         字符串常量池(在方法区):
            Strings1 =  "123";
            Strings2 =  "123";
                  重点:
                     当使用(双引号)创建字符串对象的时候, 首先会检查常量池中是否有相同的字符串.
                         如果没有, 就创建
                         如果有, 不会重复创建, 而是直接指向到原来的那个字符串.
                String: 字符串是一个 不可改变 的字符序列 !    
         构造方法创建和直接赋值
            Strings = new String("123");    // s 指向的地址是?  堆内存
            Strings2 ="123";                //s2 指向的是?      常量池
            System.out.println(s== s2);     //?              false          

七、String的练习之模拟用户登录

 需求: 模拟登录,给三次机会,并提示还有几次
 分析:
    1. 定义两个字符串对象,用于存储(已经存在)的用户名和密码
    2. 键盘录入用户名和密码
    3. 拿键盘录入的用户名和密码和已经存在的用户名和密码进行比较
         拿谁比? equals
    4. 如果内容相同,提示登录成功

    5. 如果内容不同,提示登录失败,并提示还有几次机会

import java.util.Scanner;

public class Test_User {
	public static void main(String[] args) {
		//模拟数据库中已存在的用户名和密码
		String Mun = "admin";
		String Mpd = "123456";
		Scanner sc = new Scanner(System.in);
		//三次机会
		for (int i = 1; i <= 3; i++) {
			//键盘录入账号密码
			System.out.println("请输入账号:");
			String un = sc.nextLine();
			System.out.println("请输入密码:");
			String pd = sc.nextLine();
			//判断账号密码是否正确
			if (Mun.equals(un) && Mpd.equals(pd)) {
				System.out.println("欢迎" + un + "登陆");
				break;
			} else {
				//错误时,判断是否为第三次错误
				if (i == 3) {
					System.out.println("明天再来");
				} else {
					System.out.println("登录失败,您还有" + (3 - i) + "次登陆机会");
				}
			}
		}
		sc.close();
	}
}

八、String的练习之字符串遍历 

 需求: 获取字符串中的每一个字符

     第一种遍历方式:
         int length(): 获取字符串的长度,其实也就是字符个数
          char charAt(int index): 获取指定索引处的字符
         // StringIndexOutOfBoundsException --> 字符串索引越界异常
        for(inti = 0; i < s.length(); i++){
              System.out.println(s.charAt(i));
        }
     第二种遍历方式:
        * char[] toChatArray()    : 将字符串拆分成字符数组
            char[]cArr = s.toCharArray();
            for(int i = 0; i < cArr.length; i++) {
                System.out.println(cArr[i]);

            }

public class Test_String {
	public static void main(String[] args) {
		Test01();
		System.out.println("----------------");
		String s = "qwertyuiopasdfghjklzxcvbnm";
		//char[] toChatArray()    : 将字符串拆分成字符数组
		char[] cs = s.toCharArray();
		for (int i = 0; i < cs.length; i++) {
			System.out.println(cs[i]);
		}
	}
	private static void Test01() {
		String s = "zxcvbnmasdfghjklqwertyuiop";
		for (int i = 0; i < s.length(); i++) {
			//char charAt(int index):获取指定索引处的字符
			System.out.println(s.charAt(i));	
		}
	}
}

九、String的练习之数组元素拼接成指定格式的字符串

 需求: 方法接收一个int类型数组, 将数组中的数字拼接成字符串

    * 例如: int[] arr ={1,2,3};  --> [1, 2, 3]

public class Test_Arr {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3 };
		String s = "[";
		//遍历整个数组
		for (int i = 0; i < arr.length; i++) {
			//判断是否为最后一位数组值
			if (i == arr.length - 1) {
				s += arr[i] + "]";
				break;
			}
			//数组拼接
			s += arr[i] + ", ";
		}
		System.out.println(s);
	}
}

十、String的练习之字符串反转

 需求: 键盘录入abc字符串 输出结果cba
 分析:
    A: 键盘录入一个字符串
    B: 写方法实现字符串的反转
        a: 把字符串倒着遍历,得到的每一个字符拼接成字符串。
         // b:把字符串转换为字符数组,然后对字符数组进行反转,最后在把字符数组转换为字符串
     C:调用方法

     D:输出结果

import java.util.Scanner;

public class Test_ResArr {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入 一行字符串:");
		String s = sc.nextLine();
		System.out.println(ResArr(s));
		sc.close();
	}
	private static String ResArr(String str) {
		//将字符串转换为字符数组
		char[] cArr = str.toCharArray();
		//遍历前半部分字符数组,与后半部分交换值
		for (int i = 0; i < cArr.length/2; i++) {
			char temp = cArr[i];
			cArr[i] = cArr[cArr.length - 1 - i];
			cArr[cArr.length - 1 - i] = temp;
		}
		//将字符数组赋予新的字符串,返回
		return new String(cArr);
	}
}

十一、StringBuilder的概述以及与String的区别

什么是StringBuilder

        StringBuilder是字符串的缓冲区, 可以对字符串的操作提高效率(在堆内存)

 2. String跟StringBuilder的区别是?

        String是一个不可改变的字符序列, StringBuilder是 可以改变的字符序列.
 3. StringBuilder怎么样提高效率的?
         字符串的拼接: 每一次用+号串联的时候, 底层都会重新创建一个StringBuilder, 然后再通过append方法完成链接, 最后通过toString方法转换成字符串
                            --- 这个步骤, 是每一次相加都会进行的步骤---            所以说非常消耗内存
        StringBuilder 的拼接: 单独在堆内存中创建一块空间,所有的数据拼接, 都在这一块空间内进行. 
                                 如果想转成字符串, 可以在拼接结束后,手动调用toString方法进行转换.

十二、StringBuilder的构造方法

 A:构造方法:
     StringBuilder()                    :   创建字符串缓冲区, 缓冲区中没有数据
     StringBuilder(String str)        :   创建字符串缓冲区, 缓冲区中最开始带有传入的字符串
 B:成员方法:
     public int length(): 返回长度(已经存储的字符个数)

十三、StringBuilder的添加和反转方法

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

十四、StringBuilder和String的相互转换

 StringBuilder -- String
     public String toString():通过toString()就可以实现把StringBuilder转成String
            StringBuildersb = new StringBuilder();
            sb.append("itheima");
            Stringstr = sb.toString();
 String -- StringBuilder
     StringBuilder(String str):通过构造方法就可以实现把String转成StringBuilder
            StringBuildersb = new StringBuilder("123");

十五、StringBuilder的练习之数组元素拼接成指定格式的字符串

 需求: int[] arr = {1, 2, 3}  --> [1, 2, 3]     

     StringBuilder实现

public class Test {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3, 4, 5, 6 };
		// 创建字符串缓冲池
		StringBuilder sb = new StringBuilder("[");
		// 遍历字符数组,用sb.append()方法进行拼接
		for (int i = 0; i < arr.length; i++) {
			if (i == arr.length - 1) {
				sb.append(arr[i]).append("]");
				break;
			}
			sb.append(arr[i]).append(", ");
		}
		// 转换为字符串,打印输出
		System.out.println(sb.toString());
	}
}

十六、StringBuilder的练习之字符串反转

 需求: 键盘录入一个字符串将内容反转

public class Test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一行字符串:");
		// 创建字符串缓冲区对象,将键盘录入的字符串通过构造方法转换为StringBuilder对象
		StringBuilder sb = new StringBuilder(sc.nextLine());
		// 使用sb.reverse()方法对StringBuilder内的字符串进行反转,打印输出
		System.out.println(sb.reverse());
		sc.close();
	}
}

十七、StringBuilder和StringBuffer的区别

 1.StringBuilder是jdk1.5版本的,StringBuffer是jdk1.0版本的
 2. StringBuilder是线程不安全的, StringBuffer是线程安全的.

             安全    : 效率低
             不安全: 效率高.

                
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值