Java-高级API的应用

37 篇文章 0 订阅

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;
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值