心得: 我是一名正在自学的java的即将毕业的大学生 总结笔记是为了让自己更好的理解和加深印象。可能不是那么美观,自己可以看懂就好 所有的文档和源代码都开源在GitHub: https://github.com/kun213/DailyCode上了。希望我们可以一起加油,一起学习,一起交流。
java.lang.Object类是Java语言中的根类,每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
如果一个类没有特别指定父类,那么默认则继承自Object类。例如:
public class MyClass /*extends Object*/ { // ... }由于toString方法返回的结果是内存地址,而在开发中,内存地址并没有实际的应用价值,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。
public class Person { private String name; private int age; public String toString() { return "Person"+name+":"+age; } // 省略构造器与Getter Setter }实际应用中,比较内存地址是否相同并没有意义,我们可以定义对象自己的比较方式,比较对象中成员变量的值是否相同。需要对方法进行重写。
需求:重写equals()方法,比较两个对象中姓名和年龄是否相同,如果姓名和年龄都相同返回true,否则返回false。
public class Person { private String name; private int age; public boolean equals(Object obj){ //判断两个对象地址弱相同,即为同一个对象 if(this == obj) return true; //obj对象为空,无需比较,返回false if(obj == null) return false; //obj如果是Person类型对象,则强制转换 if(obj instanceof Person){ Person person = (Person)obj; //比较两个对象的name属性和age属性,如果相等,返回true return this.name.equals(person.name) && this.age == person.age; } return false;}}使用将日期格式化为字符串的方法
使用将字符串转换成日期的方法
java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
格式化:按照指定的格式,把Date对象转换为String对象。
解析:按照指定的格式,把String对象转换为Date对象。
String format(Date date)传递日期对象,返回格式化后的字符串。
Date parse(String str)传递字符串,返回日期对象。
public static void main(String[] args) throws ParseException { //格式化:从 Date 到 String Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String s = sdf.format(d); System.out.println(s); System.out.println("--------"); //从 String 到 Date String ss = "2048-08-09 11:11:11"; //ParseException SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date dd = sdf2.parse(ss); System.out.println(dd); }Calendar是抽象类,不能创建对象,需要使用子类对象。java.util.GregorianCalendar类是Calendar的子类,但是创建日历对象需要根据本地的时区,语言环境来创建,比较困难,Calendar类提供了静态方法 getInstance()直接获取子类的对象。
public static Calendar getInstance():使用默认时区和语言环境获得一个日历。
Calendar cal = Calendar.getInstance();Calendar类中提供很多静态成员,直接类名调用,代表给定的日历字段:
字段值含义YEAR年MONTH月(从0开始,可以+1使用)DAY_OF_MONTH月中的天(几号)HOUR时(12小时制)HOUR_OF_DAY时(24小时制)MINUTE分SECOND秒DAY_OF_WEEK周中的天(周几,周日为1,可以-1使用)代码使用简单演示:
public static void main(String[] args) { // 创建Calendar对象 Calendar cal = Calendar.getInstance(); // 获取年 int year = cal.get(Calendar.YEAR); //设置年份为2020年 cal.set(Calendar.YEAR, 2020); //将年份修改为2000年 cal.add(Calendar.YEAR,-20) //将日历对象转换为日期对象 Date d = cal.getTime(); System.out.println(d); }冒泡排序法是采用数组中相邻元素进行比较换位。
冒泡排序图解
代码实现
public static void main(String[] args) { public static void main(String[] args) { //定义一个数组 int[] arr = {7, 6, 5, 4, 3}; System.out.println("排序前:" + arrayToString(arr)); // 这里减1,是控制每轮比较的次数 for (int x = 0; x < arr.length - 1; x++) { // -1是为了避免索引越界,-x是为了调高比较效率 for (int i = 0; i < arr.length - 1 - x; i++) { if (arr[i] > arr[i + 1]) { int temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } } } System.out.println("排序后:" + arrayToString(arr)); }所谓数组的二分查找法,对于一个有序数组,查找一个元素是否存在于数组中,如果存在就返回出现的索引,如果不存在就返回负数。
二分查找法原理
取数组中间的元素和被查找的元素进行比较,如果被查找元素大于数组中间元素,就舍去数组元素的一半,对另一半继续进行查找。
代码实现
public static void main(String[] args) { int[] arr = {5,13,19,21,37,56,64,75,80,88,92}; int key = 21; int index = binarySearch(arr, key); System.out.println(index); } public static int binarySearch(int[]arr,int key){ //最小索引 int min = 0; //最大索引 int max = arr.length - 1; //初始化中间索引 int mid = 0; //循环折半,最小索引小于等于最大索引时,才能折半 while (min <= max){ //折半,计算中间索引 mid = (min + max) / 2; if(key > arr[mid]){ //元素大于数组中间索引元素,移动最小索引 min = mid + 1; }else if(key < arr[mid]){ //元素小于数组中间索引元素,移动最大索引 max = mid - 1; }else{ //查询到元素,返回索引 return mid; } } //循环查找结束后,找不到元素,返回-1 return - 1; }(1) 正则规则-字符类
规则写法规则含义[abc]a、b 或 c(简单类)[^abc]任何字符,除了 a、b 或 c(否定)[a-zA-Z]a 到 z 或 A到 Z,两头的字母包括在内(范围)[0-9]0到9,两头的数字包括在内(范围)[a-zA-Z0-9]a 到 z 或 A到 Z或0-9(2) 正则规则-预定义字符类
规则写法规则含义.任何字符\d数字[0-9]\D非数字 [^0-9]\w单词字符 [a-zA-Z0-9_]\W非单词字符[^a-zA-Z0-9_](3 )正则规则-数量词
规则写法规则含义X{?}一次或一次也没有X{*}零次或多次X{+}一次或多次X{n}恰好 n 次X{n,}至少 n 次X{n,m}至少 n 次,但是不超过 m 次1、 正则练习-String类matches方法
方法:boolean matches(String regex)传递正则表达式规则,检测字符串是否匹配正则表达式规则,匹配返回true。
需求:检查手机号,检查邮件地址。
分析:
手机号:只能1开头,第二位可以是345678任意一个,第三位开始全数字,总长11位。邮件地址:@前面可以是数字,字母,下划线。@后面是字母和.。 public static void main(String[] args){ //验证手机号码 String tel = "13800138000"; String telRegex = "1[345678][0-9]{9}"; boolean flag = tel.matches(telRegex); System.out.println(flag); //验证邮件地址 String email = "s_123456@sina.com.cn."; String emailRegex = "[a-zA-Z0-9_]+@([a-z]+\\.[a-z]+)+"; flag = email.matches(emailRegex); System.out.println(flag); }2、 正则练习-String类split方法
方法:String[] split(String regex)传递正则表达式规则,以正则规则对字符串进行切割。
public static void main(String[] args){ String str1 = "ab a bbb abc aa c"; //对空格进行切割 String[] strArr =str1.split(" +"); System.out.println(Arrays.toString(strArr)); String str2 = "192.168.22.123"; strArr = str2.split("\\."); System.out.println(Arrays.toString(strArr)); }注意:输出数组元素时会看到存在一个多余空格,Arrays.toString()方法源码中追加的空格。
这是我的公众号,希望大家可以关注,让我们一起做最好的自我。 我也会把我自学视频分享在上面,供大家一起学习。
