Object 的toString方法
重写toString方法
package com.it01;
/*
* String toString():返回对象的字符串表示
* return getClass().getName()+"@"+Integer.toHexString(hashCode());
* getClass()-返回一个字节码对象
* Integer.toHexString()-返回指定参数的十六进制字符串形式
* hashCode()-返回该对象的哈希码值(内部地址)
*
* boolean equals(object obj):使用==比较两个对象是否相等,比较地址值是否相等
*/
public class ObjectDemo {
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.toString());//com.it01.Student@15db9742
System.out.println(s);//我们输出一个对象默认输出这个对象的toString()方法
//重写之后进行测试
s.name = "laozi";
s.age = 18;
System.out.println(s.toString());
}
}
class Student{
String name;
int age;
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
boolean equals(object obj):使用==比较两个对象是否相等,比较地址值是否相等
package com.it01;
/*
* 对boolean equals(object obj)方法进行重写
*/
public class ObjectDemo2 {
public static void main(String[] args) {
Person p = new Person("zhansan",18);
Person p2 = new Person("zhansan",18);
boolean flag = p.equals(p2);
System.out.println(flag);
}
}
class Person{
String name;
int age;
public Person(String name, int age) {
//super();
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
// //重写方法
// public boolean equals(Object o) {
// //先比较地当前对象和传递进来对象的地址值是否相等-------提高了效率
// if(this == o) {
// return true;
// }
//
// //判断是否是同一个类型的对象----------提高健壮性
//
// if (this.getClass()!= o.getClass()) {
// return false;
// }
//
// //向下转型
// Person other = (Person) o;
// if(!this.name.equals(other.name)) {
// return false;
// }
// if (this.age!=other.age) {
// return false;
// }
//
// return true;
// }
//
}
System类的使用
System:类包含几个有用的类字段和方法。 它不能被实例化
常见的几个方法
-
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) :将指定源数组中的数组从指定位置复制到目标数组的指定位置。
src:原数组
srcPos:原数组的起始索引位置
dest:目标数组
destPos:目标数组的起始索引位置
length:指定接受的元素个数 -
static long currentTimeMillis():返回当前系统时间(以毫秒为单位)。
-
static void exit(int status):终止当前运行的Java虚拟机。
-
static void gc() :运行垃圾回收器。
package com.it02;
/*
*
*
* static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
static long currentTimeMillis()
static void exit(int status)
static void gc()
*/
public class SystemDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
method1();
method2();
method3();
method4();
}
private static void method4() {
//第四个方法
new Demo();
System.gc();
}
private static void method3() {
//第三个方法
for(int i=0;i<100000;i++) {
System.out.println(i);
if (i==100) {
System.exit(0);
}
//System.out.println(i);
}
}
private static void method2() {
//第二个方法
long start = System.currentTimeMillis();
for (int i =0;i<100000;i++) {
System.out.println(i);
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
private static void method1() {
//第一个方法(避免索引越界)
int[] src= {1,2,3,4,5};
int[] dest= new int[5];
System.arraycopy(src, 0, dest, 0, 5);
for(int i=0;i<dest.length;i++) {
System.out.println(dest[i]);
}
}
}
class Demo{
@Override
protected void finalize() throws Throwable {
System.out.println("我被执行回收了");
}
}
Date类的使用
Date类:表示特定的时间,精确到毫秒,他可以通过方法来设定自己所表示的时间,可以表示任意的时间
构造方法:
- Date() 分配一个 Date对象,并初始化它,以便它代表它被分配的时间,测量到最近的毫秒。
- Date(long date) 分配一个 Date对象,并将其初始化为表示自称为“时代”的标准基准时间以后的指定毫秒数,即1970年1月1日
package com.it03;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
//无参构造Date()
// Date d = new Date();
// System.out.println(d);//Sun Sep 08 10:05:15 CST 2019
// System.out.println(d.toLocaleString());//2019-9-8 10:05:15
//Date(long date)
Date d2 = new Date(1000*60*60);//1970-1-1 9:00:00
System.out.println(d2.toLocaleString());
}
}
Date的用法
- 毫秒值----------date
设置
返回值是void,参数为long
void setTime(long time)
Date(long Date) - date-----毫秒
获取
返回long,不需要参数
long getTime()
package com.it03;
import java.util.Date;
/*
* Date的用法
* 毫秒值----------date
* 设置
* 返回值是void,参数为long
* void setTime(long time)
* Date(long Date)
* date-----毫秒
* 获取
* 返回long,不需要参数
* long getTime()
*/
public class DateDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Date d = new Date();
d.setTime(0);
System.out.println(d.toLocaleString());//1970-1-1 8:00:00
System.out.println(d.getTime());//0
}
}
Calender:日历的学习,提供了一些年月日时的方法
package com.it04;
import java.util.Calendar;
/*
* Calender:日历的学习,提供了一些年月日时的方法
*/
public class CalendarDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//static Calendar getInstance()
Calendar c = Calendar.getInstance();
//int get(int field) 返回给定日历字段的值
//int year = c.get(1);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.println(year);//2019
System.out.println(month);//8(0-11月)
System.out.println(day);//8
//void set(int field,int value)把指定的字段修改成指定的值
c.set(Calendar.DAY_OF_MONTH, 20);
int day2 = c.get(Calendar.DAY_OF_MONTH);
System.out.println(day2);//20
//void add(int field,int amount)在指定的字段加上指定的值
c.add(Calendar.DAY_OF_MONTH, 8);
int day3 = c.get(Calendar.DAY_OF_MONTH);
System.out.println(day3);//28
}
}
SimpleDateFormat:用于格式化时间日期
-
DateFormat是日期/时间格式化子类的抽象类,它以语言无关的方式格式化和分析日期或时间
-
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。 它允许格式化(日期文本),解析(文本日期)和归一化
-
格式化:Date----String
2049-8-15----2049年8月15日
String format(Date date) -
解析:String—Date
“2049-8-15”----Date
Date parse(String source)
构造方法:
- SimpleDateFormat()使用默认模式进行对象构建
- SimpleDateFormat(String pattern) 使用指定的模式进行构建
注意事项:解析的字符串,格式必须要和构建对象的模式一样
年月日:4个小姨2个大美眉和2个小弟弟
package com.it04;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatDemo {
public static void main(String[] args) throws ParseException {
method1();
method2();
method3();
}
private static void method3() throws ParseException {
//指定的模式进行对象的构建
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
//格式化
Date date = new Date();
String s= sdf.format(date);
System.out.println(s);//2019年09月08日 10时48分22秒
//解析
Date d =sdf.parse("2019年09月08日 10时48分22秒");
System.out.println(d.toLocaleString());//2019-9-8 10:48:22
}
private static void method2() throws ParseException {
//指定的模式进行对象的构建
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
//格式化
Date date = new Date();
String s= sdf.format(date);
System.out.println(s);//2019年09月08日
//解析
Date d =sdf.parse("2019年09月08日");
System.out.println(d.toLocaleString());//2019-9-8 0:00:00
}
private static void method1() throws ParseException {
// TODO Auto-generated method stub
//使用默认模式进行对象的构建
SimpleDateFormat sdf = new SimpleDateFormat();
//格式化
Date d = new Date();
String s = sdf.format(d);
System.out.println(s);//19-9-8 上午10:34
//解析
Date d2= sdf.parse("19-9-8 上午10:34");
System.out.println(d2.toLocaleString());//2019-9-8 10:34:00
}
}
包装类
包装类就是封装了基本数据类型的类,为我们提供了更多复杂的方法和一些变量
- byte------Byte
- short-----Short
- char------Character
- int-------Integer
- long------Long
- float-----Float
- double----Double
- boolean—Boolean
package com.it05;
/*
* 需求:判断一个数是否符合int类型的范围
*
* 由于基本数据类型只能做一些简单的操作和运算,所以Java为我们封装了基本数据类型,为每中数据类型提供了包装类,
* Integer:Integer类包装一个对象中的原始类型int的值。 类型为Integer的对象包含一个单一字段,其类型为int 。
* int----String
* 方式一:int intValue()
* 方式二:static int parseInt(String s)
* String----int
* 方式一:+""
* 方式二:String toString()
* 方式三:static String toString(int i)
*
* 构造方法
* Integer(int value)
* Integer(String s)
*
*
* int intValue()
*
*/
public class IntegerDemo {
public static void main(String[] args) {
Integer i = new Integer("10");
System.out.println(i);
int a = i.intValue();
System.out.println(a);
int b = Integer.parseInt("30");
System.out.println(b);//30
Integer i2 = new Integer(40);
System.out.println(i2.toString());
System.out.println(Integer.toString(i2));
}
}
自动封箱和自动拆箱
package com.it05;
import java.util.ArrayList;
/*
* 自动装箱和自动拆箱
*
*/
public class IntegerDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//Integer i = new Integer(10);
//自动装箱
//相当于Integer i = new Integer(10)
Integer i = 10;
//自动拆箱
//相当于int a = i.intValue()
Integer i1 = 10;
int a = i1;
Integer i2 = 10;
Integer i3 = 20;
//下面的相加过程完成了拆箱和装箱的过程
Integer i4 = i2+i3;
ArrayList list = new ArrayList();
list.add(1);//这里完成了自动装箱的过程
}
}
正则表达式的应用
- boolean matches(String regex):判断当前字符串是否匹配指定的正则表达式
package com.it06;
/*
* 正则表达式
* boolean matches(String regex):判断当前字符串是否匹配指定的正则表达式
*/
public class RegexDemo {
public static void main(String[] args) {
// TODO 校验
String s = "12345";
/*
*
boolean flag = checkQQ(s);
System.out.println(flag);
*/
//使用正则表达式
boolean flag = s.matches("[1-9][0-9]{4,14}");
System.out.println(flag);
}
public static boolean checkQQ(String qq) {
//长度判断
int length = qq.length();
if (length<5||length>15) {
return false;
}
//0不能开头
if (qq.startsWith("0")) {
return false;
}
//必须是数字
for (int i=0;i<qq.length();i++) {
char c = qq.charAt(i);
if (c<0||c>9) {
return false;
}
}
return true;
}
}