java se day12 火推

面向对象已讲解知识点大纲:

-   类
    对象
    引用


-   方法

-   堆栈方法区(内存)

-   构造方法

-   方法的重载

-   私有

-   this

-   静态

-   单例设计模式

-   继承

-   权限修饰符

-   多态

-   抽象类

-   接口

-   内部类

Object 类

p1 == p2

p1.xx(p2);
equals 重点
equals 方法在非空对象引用上实现相等关系: 

自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。 
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。 
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。 
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。 
对于任何非空引用值 x,x.equals(null) 都应返回 false。 



package cn.xdl.demo1;

public class Person {

    private String name;
    private int 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 Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public Person() {
        super();
        // TODO Auto-generated constructor stub
    }

    @Override
    public boolean equals(Object obj) {
        if(obj==null) {
            return false;
        }
        if(this==obj) {
            //先判断地址是否相等, 地址相等表示是同一个对象, 返回为true
            return true;
        }
        //内存地址不同 , 判断obj的类型, 是否与当前类型相同
        if(obj instanceof Person) {
            //类型相同时, 我们比较属性的值是否相同
            Person p = (Person) obj;
            if(p.age != this.age) {
                //年龄不相同
                return false;
            }
            //地址不同, 类型相同, 年龄相同 ,接下来判断姓名
            if(!p.name.equals(this.name)) {
                //姓名不同
                return false;
            }
            //地址不同, 类型相同, 年龄相同 ,姓名相同
            return true;

        }else {
            //类型不同, 无法比较 , 返回false 
            return false;
        }
    }

}
HashCode()方法
这个方法来自Object类, 返回一个int值, 这个方法是为了提高哈希表的性能 !


    一般与Equals方法一起使用 !


规范要求: 

    1.  一致性 , 同一个对象, 属性不改变的情况下,  返回的hashCode值应该固定 !

    2.  相同的两个对象, hashCode值应该一致 !

    3.  hashCode值, 不是用来判断对象是否相同的根据, hashCode值相同, 对象不一定相等!  不过在设计代码时, 我们建议, hashCode值与equals判断的结果保持一致 !
toString方法
用于返回对象的字符串表示形式 !  一般用于对象数据的查看与打印 !

System.out.println方法传入对象时, 其实自动调用的是 对象的toString方法
clone 克隆 (了解)
用于对象的克隆操作

这个方法 由Object实现 !  

我们需要添加克隆标记(实现Cloneable接口)



这个方法的使用 , 存在一些限制,  
默认情况下, 一个对象是无法进行克隆的 ,需要给这个对象的类型, 添加一个可被克隆的标记 !


案例: 

    Person p3 = (Person) p1.clone();
    System.out.println(p3);
    System.out.println(p1);
    System.out.println(p3==p1);
    System.out.println(p3.equals(p1));

基本数据类型与包装类

java.lang.Integer   int

java.lang.Long      long

java.lang.Double    double

java.lang.Character char

java.lang.Boolean   boolean

java.lang.Byte      byte

java.lang.Float     float

java.lang.Short     short

基本数据类型与 包装类如何转换(了解)

什么是装箱? 
    是将一个基本数据类型转换为包装类对象的过程!

什么是拆箱?
    是将一个包装类的对象转换为基本数据类型的过程!
jdk1.5之前:
需要手动拆箱, 和 手动装箱

int a = 10;
//装箱操作
    Integer b = Integer.valueOf(a);
    Integer b2 = new Integer(a);

//拆箱操作
    int c = b.intValue();


例如:  两个Integer 在早期进行加法运算时: 

    Integer a =  new Integer(10);

    Integer b =  new Integer(20);

    int sum = a.intValue()+b.intValue();

    Integer sumI = new Integer(sum);
jdk1.5之后:
编译器, 帮我们 完成了 自动拆箱 和 自动装箱


    Integer a = 10;
    Integer b = 20;
    Integer sum = a+b;
常用方法与属性: 重点
MAX_VALUE : 全局常量, 表示当前包装类型的最大值

字符串转换数据类型


-   通过parseXXX

    int parseInt(String text): 

    这个方法,  用来将一个字符串的数字, 转换为Integer类型

    有时我们经常从网络, 用户 ,数据库等, 读取一些字符串格式的数据, 有可能这些数据是整型的 , 可以通过parseXXX将其转换为对应的类型

-   构造方法

    new Integer(String text);

转换格式 会出现错误:  
    NumberFormatException  数字格式化异常 

String

特性
-   常量池中重复利用

    因为字符串经常在程序中出现 , 当编写了一个字符串后 , 这个字符串会被还存在常量池中, 如果重复出现相同字符串, 则使用同一块内存中的对象 !

    如果重复出现的字符串 是 通过new开辟的空间, 则表示显式指定新空间进行字符串的存储, 就不会拿来重复利用 !

-   String的值无法改变

    String类型的值, 在内存空间中一经确定, 字符序列是无法改变的! 进行拼接字符串, 需要舍弃原有字符串 , 开辟新的空间进行存储 !

    所以不建议, 进行过多的拼接字符串操作 !

    String a = "";
    for(int i=1;i<=100;i++){
        a = a+i;
    }

转义字符 \

将原本在Java中具备特殊含义的字符, 转换为布局含义的普通字符
String text =  "他就是"董飞"";
上述的代码出现了问题, 引号再Java中具备特殊的含义: 

添加转义字符后: 

    String text =  "他就是\"董飞\"";
    输出的结果为: 他就是"董飞"

又来了一个问题,  

String text = "他还是\董飞"

我们可以通过转义字符, 将另一个转义字符转换为普通字符 !

通过转义字符, 可以转化的文本以及含义:

\u+4个数字 : unicode编码 !

\\          : 将转义字符转换为普通字符
\"          : 将双引号转换为普通字符
\r          : 回车
\n          : 换行
\t          : 制表符 , 横向进入下一个单元格

\b          :  退格(了解)
\f          : 走纸换页(了解)

换行符再不同的操作系统下 有不用的写法: 

再Mac os 里换行使用 \n

在Unix 里使用 \r

再windows使用 \r\n 

String常用方法

-   equals :  (重点(*****))

    比较的规则:  

        获取到两个字符串中的字符数组 ,  对两个字符数组中的每一个元素进行比较, 如果都相同, 则返回true; 


源码如下: 

 public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

    6个基本方法: 


    //一个字符串
    String text = "  abcd1ABCD  ";
    //1.    将字符串中的所有字符转换为小写并返回(重点(*))
    System.out.println(text.toLowerCase());
    //2.    将字符串中的所有字符转换为大写并返回(重点(*))
    System.out.println(text.toUpperCase());
    //3.    去除字符串中的前后空白
    System.out.println(text.trim());(重点(*))
    //4.    判断字符串是否以某字符串开头
    System.out.println(text.startsWith(" "));(重点(*))
    //5.    判断字符串是否以某字符串结尾
    System.out.println(text.endsWith("D"));(重点(***))
    //6.    获取字符串的长度(字符序列的长度, 也就是字符串中字符数组的长度)(重点(*****))
    System.out.println(text.length());

(重点(***))
indexOf : 用来查找一个字符 或 字符串 在 当前字符串中的位置 !

四个方法的重载: 

    -   
        参数1: char类型的参数  : 要查找的字符
        从左至右查找一个字符在字符串中的位置
    -   
        参数1.    char类型的参数,  
        参数2.    int类型的 , 表示开始索引 

        从参数2的位置向右查找一个字符的位置

    - 
        参数1.    String类型的参数: 要查找的字符串
        从左至右查找一个字符串在字符串中的位置

    -   
        参数1.    String类型的参数: 要查找的字符串
        参数2.   int类型的 , 表示开始的索引
        从指定的开始位置(参数2) , 向右查找一个字符串的位置 !
查找的结果:  

    1. 从左至右 查找到的第一个匹配的字符或字符串的下标!

    2.  如果查询不到 , 返回-1;

(熟悉))
lastIndexOf : 用来查找一个字符 或 字符串 在 当前字符串中的位置 !(反向查找)

四个方法的重载: 

    -   
        参数1: char类型的参数  : 要查找的字符
        从右至左查找一个字符在字符串中的位置
    -   
        参数1.    char类型的参数,  
        参数2.    int类型的 , 表示开始索引 

        从参数2的位置向左查找一个字符的位置

    - 
        参数1.    String类型的参数: 要查找的字符串
        从右至左查找一个字符串在字符串中的位置

    -   
        参数1.    String类型的参数: 要查找的字符串
        参数2.   int类型的 , 表示开始的索引
        从指定的开始位置(参数2) , 向左查找一个字符串的位置 !
查找的结果:  

    1.  从右至左 查找到的第一个匹配的字符或字符串的下标!

    2.  如果查询不到 , 返回-1;

(重点(**))
char charAt(int index)

参数1. 要获取字符的索引

从一个字符串中 取出指定索引下的字符, 并返回

(重点(***))
String substring : 从一个字符串中截取其中一部分 并返回

方法存在两个重载方法: 


    - 
        参数1.  截取的开始位置(包含)

    表示从指定的开始位置截取到字符串的结尾 

    -   
        参数1. 截取的开始位置(包含)
        参数2. 截取的结束位置(不包含)

    表示从指定的开始位置 截取到 指定的结束位置!



案例: 

    String text = "床前明月光,玻璃好上霜,要不及时擦,整不好得脏";
    String newText = text.substring(5);
    System.out.println(newText);
    String newText2 = text.substring(5,text.length());
    System.out.println(newText2);

(重点(*))
byte[] getBytes()

    存在两个方法的重载:

    -   
        没有参数列表 
        按照当前系统的默认编码表 将当前的字符串打碎(还原)为字节数组,并返回

    -   
        参数1. 指定的编码表的名称()
            可以填入:  
                <1> : iso-8859-1 : 纯英文编码
                <2> : gbk        : 简体中文编码
                <3> : gb2312     : 简体中文编码
                <4> : utf-8      : unicode编码
        按照指定的编码表 将当前的字符串打碎(还原)为字节数组,并返回
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值