Java学习心得(二)

JAVA学习笔记_2

  • 一.JavaBean规范
    • 1.一定要定义构造器,包含有参数和无参数构造器
    • 2.必须实现序列化接口:表明这个类可以被序列化
    • 3.必须给每一个属性添加get和set方法
    • 4.建议重写toString,equals,hashcode
  • 二.时间Date类,Calendar类和SimpleDateFormat类
    • 1.Date类
    • 2.Calendar类
    • 3.SimpleDateFormat类
    • 4.练习
  • 三.装箱和拆箱
  • 四.集合
    • 1.添加
    • 2.计算集合的长度
    • 3.清空集合
    • 4.判断是否包含contains和containsAll
    • 5.判断集合是否为空
    • 6.移除对象remove()和removeall
    • 7.迭代器

一.JavaBean规范

1.一定要定义构造器,包含有参数和无参数构造器

	public Person(){super();}
	public Person(int id,String name){
		this.id=id;
		this.name=name;
	}

2.必须实现序列化接口:表明这个类可以被序列化

public class Person implements Serializable

3.必须给每一个属性添加get和set方法

	public void setId(int id){
		this.id=id;
	}
	
	public int getId(){
		return this.id;
	}
	
	public String getName() {
		return name;//is
	}
	
	public void setName(String name) {
		this.name = name;
	}

4.建议重写toString,equals,hashcode

	@Override
	public String toString() {
		return "[Person:id="+id+",name="+name+"]";
	}
	@Override
	//判定两个Person是不是同一个人?===id相同即可
	//由于父类的equals比较的是 ==地址,所以我们需要重写equals方法
	public boolean equals(Object ob){
		//1.假设ob不是person/ob==person
		if(ob==this){
			return true;
		}else{
		//2.==不同,需要将ob-->person	需要使用instanceof进行判定
			if(ob instanceof Person){
				//如果类型相同,先转换为同一个类型,进行比较id
				Person p=(Person)ob;
				if((p.id==this.id)&&(p.name==this.name)){//id和name是否相同
					return true;
				}
				return false;
			}else{
				return false;//类型如果不一致,不需要比较
			}	
		}
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + id;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

二.时间Date类,Calendar类和SimpleDateFormat类

1.Date类

使用getYear获得的是Date对象中年份减去1900以后的值
使用getMonth获得的是Date对象中月份减去1以后的值

		int year=date.getYear();
		System.out.println(year+1900);	//当前年
		
		int day=date.getDay();
		System.out.println(day);//星期中的第几天
		
		int month=date.getMonth();
		System.out.println(month+1);	//当前月
		
		int min=date.getMinutes();
		System.out.println(min);	//时间毫秒数
		
		long time=date.getTime();//可以和java.sql.date关联
		System.out.println(time);

2.Calendar类

Calendar中以周日为第一天

		//目前最常用的设置以及修改时间是Calendar类
		Calendar cal=Calendar.getInstance();
		
		//获取年/月/日/时间,,,,
		System.out.println(cal.get(Calendar.YEAR));
		
		//获取一年中第几天,一个月中第几天,一个周中的几天
		System.out.println(cal.get(Calendar.DAY_OF_MONTH));
		System.out.println(cal.get(Calendar.DAY_OF_YEAR));
		System.out.println(cal.get(Calendar.DAY_OF_WEEK));
		
		//设置时间节点
		cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
		System.out.println(cal.get(Calendar.DAY_OF_WEEK));
		
		//由于上面从本周六(7)变成了上周日(1),-6
		//如果4这个参数超过30天,建议使用DAY_OF_YEAR
		cal.add(Calendar.DAY_OF_MONTH, 4);//+4
		System.out.println(cal.get(Calendar.DAY_OF_MONTH));

3.SimpleDateFormat类

Java学习心得(二)_第1张图片
//yyyy:年
//MM:月
//dd:日
// HH:时(24制)
//hh:时(12制)
//mm:分
//ss:秒

Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");	//将时间date变成符合你设计的模式
String format=sdf.format(date);
System.out.println(format);
		
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
Date date1=sdf1.parse("2019-08-24");	//将具体时间格式变成date
System.out.println(date1);

4.练习

要求

  • 1.用户输入生产日期以及保质期天数
  • 2.商品在七天前或者七天前的某一个周五需要进行促销
  • 3.计算出这一天,并且按照标准格式yyyy-MM-dd
public class GoodsDate {
	public static void main(String[] args) throws ParseException {
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入生产日期(yyyy-MM-dd):");
		String date=sc.next();
		System.out.println("请输入保质期:");
		int day=sc.nextInt();
		sc.close();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		//String->date->Calendar
		Date date1=sdf.parse(date);
		Calendar cal=Calendar.getInstance();
		cal.setTime(date1);			//将生产日期的时间设置cal的当前时间
		cal.add(Calendar.DAY_OF_YEAR,day-7);		//促销日期=生产日期+保质期-7
		//Calendar->date->String
		date1=cal.getTime();
		String date2=sdf.format(date1);
		System.out.println("促销日期为:"+date2);
	}
}

三.装箱和拆箱

所有的数字包装类都有一个定级父类—>Number

		int i=1;
		Integer j=1;
		//先装箱(自动),i会转换成Integer类型
		System.out.println(i==j);			//true
		
		Integer a=2;
		Integer b=new Integer(2);
		Integer c=new Integer(2);
		System.out.println(a==b);		//false
		System.out.println(b==c);			//false
		
		//将字符串-->数字
		Integer age=Integer.parseInt("20");
		System.out.println(Integer.MAX_VALUE);

四.集合

1.添加

		Collection coll=new ArrayList<>();
		//添加add和addAll
		Person p1=new Person(1,"苏大强");
		coll.add(p1);
		//由于之前在Person中重写过toString()
		System.out.println(coll);
		Collection doll=new ArrayList<>();
		doll.add(new Person(2,"苏明哲"));
		doll.add(new Person(2,"苏明成"));
		doll.add(new Person(2,"苏明玉"));
		coll.addAll(doll);	//[[Person:id=1,name=苏大强], [Person:id=2,name=苏明哲], [Person:id=2,name=苏明成], [Person:id=2,name=苏明玉]]
		System.out.println(coll);

2.计算集合的长度

coll.size();

3.清空集合

coll.clear();

4.判断是否包含contains和containsAll

//contains的比较原则:通过对象的equals方法的重写来进行比较,如果没有重写相当于两个对象比较地址
boolean b=doll.contains(new Person(2,"苏明玉"));		//判断此集合是否包含指定的元素
System.out.println(b);
b=doll.containsAll(coll);			//判断此集合是否包含指定集合中的所有元素

5.判断集合是否为空

coll.isEmpty();

6.移除对象remove()和removeall

		coll.remove(new Person(2,"苏明成"));
		System.out.println(coll);	//[[Person:id=1,name=苏大强], [Person:id=2,name=苏明哲], [Person:id=2,name=苏明玉]]
		coll.removeAll(coll);
		System.out.println(coll);	//[]

7.迭代器

		//在迭代器中remove建议使用迭代器的remove
		Iterator it=doll.iterator();
		while(it.hasNext()) {
			Person p=it.next();
			//doll.remove(p);		//使用该语句会出现java.util.ConcurrentModificationException异常
			it.remove();
			System.out.println(p+"***");		
		}

如果不设置泛型

		Collection c=new ArrayList();
		c.add(1);
		c.add("哈哈");
		c.add(new Person(3,"蒙总"));
		System.out.println(c);
		//使用增强for循环迭代
		for(Object o:c){
			System.out.println(o);
			//不建议在循环时进行添加和删除操作,若需要做,请使用迭代器进行操作!
			//c.remove(o);		//使用该语句会出现java.util.ConcurrentModificationException异常
		}

你可能感兴趣的:(Java笔记)