java se day12 火推
来源:互联网 发布:时间闹钟提醒软件 编辑:程序博客网 时间:2024/05/16 12:57
面向对象已讲解知识点大纲:
- 类 对象 引用- 方法- 堆栈方法区(内存)- 构造方法- 方法的重载- 私有- this- 静态- 单例设计模式- 继承- 权限修饰符- 多态- 抽象类- 接口- 内部类
Object 类
p1 == p2p1.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 intjava.lang.Long longjava.lang.Double doublejava.lang.Character charjava.lang.Boolean booleanjava.lang.Byte bytejava.lang.Float floatjava.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
- java se day12 火推
- java SE Day13 火推
- java SE day14 火推
- java SE day15火推
- java SE day16 火推
- java SE 18 火推
- java SE 17 火推 IO流
- java学习day12
- JAVA-day12-IO3、反射
- java学习day12
- day12/InputOutputDemo.java
- day12/JoinDemo.java
- day12/StopThreadDemo1.java
- day12/StopThreadDemo.java
- day12/ThreadTest.java
- day12/WaitNotifyAllProducerConsumer1.java
- day12/WaitNotifyAllProducerConsumer.java
- day12/WaitNotifyThread1.java
- DataTables Requested unknown parameter 'id' for row 0, column 0.
- php 各种框架优缺点
- C++数组(2)--指针和数组
- Coursera吴恩达《神经网络和深度学习》课程笔记(3)
- Android开发人员不得不收集的代码(持续更新中)(http://www.jianshu.com/p/72494773aace,原链接)
- java se day12 火推
- 2017-11-7课堂作业
- 2017-11-06
- Request/Response
- swap分区&磁盘加密&加密磁盘永久挂载
- Failed building wheel for uwsgi
- Jzoj5422 天才绅士少女助手克里斯蒂娜
- 如何双击home键,使app自带毛玻璃效果,增强其安全性
- Hello Word.