12.时间日期,字符串,内部类,拆装箱

一.String,StringBuffer,StringBuilder
1.String是一个不可变的常量,每次修改都会产生新的对象
2.StringBuffer,StringBuilder都是可变字符序列,是字符串的增强版。
3.StringBuffer,StringBuilder作用:主要是当业务大量修改字符串的时使用
4.区别:StringBuffer是线程安全,StringBuild非线程安全

二.自动拆装箱
1.基本类型转换为封装类型为装箱过程,反之则是拆箱过程
2.八种基本数据类型对应的封装类型
Byte b;//byte
Short s;//short
Integer i ;//int
Long l;//long
Float f;//float
Double d;//double
Character c;//char
Boolean bool;//boolean
3.从字符串转换为基本据类型,都是由其封装类型的valueOf()方法实现
例如:int num4 = Integer.valueOf("12345");
float f2 = Float.valueOf("3.1415");

一.内部类
1.成员内部类 语法
public class InnerDemo{
class Inner{}
}
2.特点:
a.会产生多个class文件,文件名为:InnerDemo$Inner.class
b.内部类可以直接访问外部类的所有属性和方法包括私有的
c.外部类不能直接访问内部类的成员,要通过内部类的实例来调用
d.创建内部类的语法:InnerDemo.Inner in = new InnerDemo().new Inner();
e.所有的内部类都不能和外部类重名
f.内部类不能定义静态方法和属性,但是可以定义静态常量

二.内部匿名类
1.语法: new interface/superClass(){//实体}

2.特点:
a.没有名字
b.匿名类也会产生class文件,文件名是后缀加上1,2,3,4...
c.只能一次性使用
d.匿名类中不能定义静态代码块

三.局部内部类
1.定义在方法体或者代码块中
2.特点:
a.其作用范围只能是在该方法体中
b.不能用任何修饰符
c.也会产生类文件




枚举
1.定义:是一个类,可以有属性和方法,但其构造方法是私有的,外部不能访问
2.特点:不能直接构造,用类名.枚举值的方式创建枚举对象
3.用法:代替接口来定义常量
4.优势:可以对常量多定义,可以在获取常量值时加入逻辑代码,功能比接口更强大
5.语法:见案例


练习:

假设银行账户状态为:
0.开户
1.激活
2.正常使用
3.冻结
4.睡眠
5.注销
请设计枚举类型保存这些状态
要求:程序中可以随时调用状态值,和查看状态属性
思路:1枚举中有状态值属性和状态属性
2.重载枚举的构造方法
3.在get中添加逻辑代码

/*
 * 练习:假设银行账户状态为:
0.开户
1.激活
2.正常使用
3.冻结
4.睡眠
5.注销
请设计枚举类型保存这些状态
要求:程序中可以随时调用状态值,和查看状态属性
思路:1枚举中有状态值属性和状态属性
	2.重载枚举的构造方法
	3.在get中添加逻辑代码
 */
package com.class1114;

public class Class1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.println(AccountState.OPENaccount.getKey());
		System.out.println(AccountState.OPENaccount.getValue());
	}

}

enum AccountState{
	OPENaccount(0),ACTIVATEaccount(1),NORMALaccount(2),BLOCKEDaccount(3),DORMANCYaccount(4),LOGOUTaccount(5);
	AccountState(int key){
		this.key=key;
	}
	private int key;
	private String value;
	public int getKey() {
		return key;
	}
	public void setKey(int key) {
		this.key = key;
	}
	public String getValue() {
		switch(key){
		case 0:
			value="开户";
			break;
		case 1:
			value="激活";
			break;
		case 2:
			value="正常使用";
			break;
		case 3:
			value="冻结";
			break;
		case 4:
			value="睡眠";
			break;
		case 5:
			value="注销";
			break;
		default:
			value="";
		}
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
	
}

  


日期类型:
Date SimpleDateFormat Calendar
一.date常用方法
1.构造方法
2.getTime():获取时间的毫秒数
二.SimpleDateFormat常用方法
1.构造方法
2.formart:日期转字符串
3.parse:字符串转日期

三.Calendar常用方法
1.getInstence():获取日历对象
2.set:设置日历的字段值
3.get:获取日历的字段值
4.add:在日历的字段值上增加数值
5.getTime:返回日历的日期对象

扫描二维码关注公众号,回复: 5152529 查看本文章


练习
1.用java程序计算1到1000000的累加值,求这段程序运行的时间是多少?

2.打印输出当前时间
格式:2012年1月1日 23点33分56秒234毫秒 时区:XXXX

3.输入字符串 2012-12-12 2:21:24,把该字符串转换成日期对象

/*
 * 1.用java程序计算1到1000000的累加值,求这段程序运行的时间是多少?
 */
package com.class1114;

import java.util.Date;

public class Class3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Date d1=new Date();
		long t1=d1.getTime();
		int sum=0;
		for(int i=1;i<=1000000;i++){			
			sum+=i;	
		}
		Date d2=new Date();
		long t2=d2.getTime();
		long t=t2-t1;
		System.out.println(t);
	}

}
/*
 * 2.打印输出当前时间
格式:2012年1月1日  23点33分56秒234毫秒  时区:XXXX 
 */
package com.class1114;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Class2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Date d=new Date();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日  HH点mm分ss秒SSS毫秒  时区:ZZZZ");
		String str=sdf.format(d);
		System.out.println(str);
	}

}

  

/*
 * 3.输入字符串 2012-12-12 2:21:24,把该字符串转换成日期对象
 */
package com.class1114;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Class4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Date d=new Date();
		String str="2012-12-12 21:21:24";
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			d=sdf.parse(str);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		System.out.println(d);
	}

}

例子

package com.demo1114;

import org.junit.Test;

import com.demo1114.Innerclass.Inner;

public class Demo {
	@Test
	public void test(){
		StringBuffer sb = new StringBuffer("hello");
		sb.append(" hwua");
		sb.insert(5, " are you ");
		System.out.println(sb.toString());
	}
	//拆装箱
	@Test
	void test2(){
		int i = Integer.valueOf("123");
		Integer number = 100;
		int num2 = number;
	}
	
	public static void main(String[] args) {
		Demo d = new Demo();
		d.test2();
		
		Inner in = new Innerclass().new Inner();
		
		Iinter ii = new Iinter() {
			@Override
			public void hello() {
				System.out.println("你好");
			}
		};
		ii.hello();
	}
}

class Innerclass{
	String name;
	private int age;
	class Inner{
		String sex;
		
		void hello(){
			age = 1;
			name="sds";
		}
	}
	
	void test(){
		Inner in = new Inner();
		in.sex = "";
		class TestInner{
			String hh;
		}
	}
}

interface Iinter{
	void hello();
}

  

package com.demo1114;

import org.junit.Test;

public class EnumDemo{
	public static void main(String[] args) {
		System.out.println(Color.BLUE.getValue());
		System.out.println(Color.BLUE.getKey());
	}
}

enum Color {
	RED(1),YELLOW(2),BLUE(3),GREEN(4),BLACK(5);
	Color(int key){
		this.key = key;
	}
	
	int key;
	String value;
	public int getKey() {
		return key;
	}
	public void setKey(int key) {
		this.key = key;
	}
	public String getValue() {
		if(key==1){
			return "红色";
		}else if(key==2){
			return "黄色";
		}else if(key==3){
			return "蓝色";
		}else if(key==4){
			return "绿色";
		}else if(key==5){
			return "黑色";
		}
		return "";
	}
	public void setValue(String value) {
		this.value = value;
	}
}

  

package com.demo1114;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.junit.Test;

public class DateDemo {
	@Test
	void test1(){
		Date date = new Date();
		System.out.println(date);
	}
	//日期和字符串的转换
	//2012年1月1日  23点33分56秒234毫秒  时区:XXXX 
	@Test
	public void test2(){
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日  HH点mm分ss秒SSS毫秒  时区:z");
		String str = sdf.format(date);
		System.out.println(str);
	}
	
	public void test3() throws ParseException{
		String str = "2017-11-14 23:23:23";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = sdf.parse(str);
		System.out.println(date.toString());
	}
	
	public static void main(String[] args) {
		DateDemo dd = new DateDemo();
		try {
			dd.test3();
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  

package com.demo1114;

import java.util.Calendar;

public class CalenderDemo {
	public static void main(String[] args) {
		Calendar c = Calendar.getInstance(); 
		c.add(Calendar.YEAR, -3);
		c.get(Calendar.DAY_OF_WEEK);
		System.out.println(c.get(Calendar.DAY_OF_WEEK));
	}
}

  

作业1

1.输入文件名,判断该文件是不是java文件

2.写一个方法,实现对敏感字的替换返回替换后的字符串 String replaceWord(String src,String word,String desc)
src:原字符串
word:敏感词
desc:替换后的词

3.将下列诗句替换格式:
白日依山尽,黄河入海流,欲穷千里目,更上一层楼。
替换为:
白日依山尽,
黄河入海流,
欲穷千里目,
更上一层楼。

4.写一个方法,判断字符串中字符出现的次数 int countChar(String src,String char)
src:原字符串
char:出现的字符

5.判断登录名和密码是否正确,登录名大小写忽略
登录名为:admin
密码为:sa123456

/*
 * 1.输入文件名,判断该文件是不是java文件
 */
package com.class1113;

import java.util.Scanner;

public class Test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc=new Scanner(System.in);
		System.out.println("请输入文件名");
		String s=sc.next();
		if(s.endsWith(".java")){
			System.out.println("该文件是java文件");
		}else{
			System.out.println("不知道");
		}
	}

}

  

/*
 * 2.写一个方法,实现对敏感字的替换返回替换后的字符串 
 * String replaceWord(String src,String word,String desc)
src:原字符串
word:敏感词
desc:替换后的词
 */
package com.class1113;

public class Test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Test2 t2=new Test2();
		String ss;
		ss=t2.replaceWord("woshishuiawo", "wo", "ni");
		System.out.println(ss);
		ss=t2.replaceWord("我是中国人,我爱天空,天空是我亲祖宗", "天空", "xx");
		System.out.println(ss);
		
		
	}
	
	public String replaceWord(String src,String word,String desc){
		String s="";
		s=src.replaceAll(word, desc);
		return s;
	}

}

  

/*
 * 3.将下列诗句替换格式:
白日依山尽,黄河入海流,欲穷千里目,更上一层楼。
替换为:
白日依山尽,
黄河入海流,
欲穷千里目,
更上一层楼。
 */

package com.class1113;

public class Test3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		String ss="白日依山尽,黄河入海流,欲穷千里目,更上一层楼。";
		String[] s1=ss.split(",");
		for(int i=0;i<s1.length;i++){
			if(i!=s1.length-1){
				System.out.println(s1[i]+",");
			}else{
				System.out.println(s1[i]);
			}
			
		}
	}

}

  

/*
 * 4.写一个方法,判断字符串中字符出现的次数  int countChar(String src,String char)
src:原字符串
char:出现的字符
用indexof也可以
 */
package com.class1113;

public class Test4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Test4 t4=new Test4();
		int s=t4.countChar("oh;asgujho;hgwo;fhoa", "g");
		System.out.println(s);
	}

	public int countChar(String src,String char1){
		int count=0;
		for(int i=0;i<src.length();i++){
			if(char1.charAt(0)==(src.charAt(i))){
				System.out.println("xx");
				count++;
			}
		}
		return count;
	}
}

  

/*
 * 5.判断登录名和密码是否正确,登录名大小写忽略
登录名为:admin
密码为:sa123456
 */
package com.class1113;

import java.util.Scanner;

public class Test5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		String id="admin";
		String password="sa123456";
		
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入用户名:");
		String s1=sc.next();
		if(id.compareToIgnoreCase(s1)==0){
			System.out.println("请输入密码:");
			String s2=sc.next();
			if(password.compareToIgnoreCase(s2)==0){
				System.out.println("登录成功!");
			}else{
				System.out.println("密码错误!");
			}
		}else{
			System.out.println("用户名错误!");
		}
	}

}

  

泛型作业

自己设计一个MyMap类,模拟完成HashMap的存放数据过程
要求完成:
put(K k,V v);
get(K k);
size();
Set keySet();返回所有键的集合
ensureCapacity(int i);判断是否需要扩容

思路:
1.写一个MyEntry类,来存放键值对

class MyMap<K,V>{
MyEntry<K,V>[] mes;
int size;
}

class MyEntry<K,V>{
K k;
V v;
set/get
}

/*
 * 泛型
 * 自己设计一个MyMap类,模拟完成HashMap的存放数据过程
要求完成:
put(K k,V v);
get(K k);
size();
Set keySet();返回所有键的集合
ensureCapacity(int i);判断是否需要扩容
 */
package com.class1113;

import java.util.HashSet;
import java.util.Set;

public class Test6 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		MyMap<Integer,String> mmp=new MyMap<>();
		int i=0;
		String j=i+"";
		while(i<20){
			System.out.println(mmp.size());
			System.out.println(mmp.put(i, j));
			
			System.out.println(mmp.get(i));
			i++;
		}
		System.out.println(mmp.size());
	}

}

class MyMap<K,V>{
	MyEntry<K,V>[] mes=new MyEntry[16];
	int size;
	int Capacity=16;
	public boolean put(K k,V v){
		boolean b1=false;
		MyEntry<K,V> me1=new MyEntry<>();
		me1.setK(k);
		me1.setV(v);
		if(size>mes.length*3/4){
			ensureCapacity(size);
		}
		for(int i=0;i<mes.length;i++){
			if(mes[i]==null){
				mes[i]=me1;
				b1=true;
				break;
			}
		}
		return b1;
	}
	public V get(K k){
		V vv=null;
		MyEntry<K,V> me2=new MyEntry<>();
		for(int i=0;i<mes.length;i++)
		{
			if(mes[i].getK()==k){
				vv=mes[i].getV();
				break;
			}
		}
		return vv;
	}
	public int size(){
		int num=0;
		for(int i=0;i<mes.length;i++){
			if(mes[i]==null){
				num=i;
				break;
			}
		}
		return num;
	}
	public Set keyset(){
		Set set=new HashSet();
		for(int i=0;i<mes.length;i++){
			set.add(mes[i].getK());
		}
		return set;
	}
	public boolean ensureCapacity(int i){
		boolean b2=false;
		if(i>mes.length*3/4){
			MyEntry<K,V>[] newmes=new MyEntry[mes.length+(mes.length>>1)];
			for(int j=0;i<mes.length;j++){
				newmes[j]=mes[j];
			}
			mes=newmes;
			b2=true;
		}
		return b2;
	}
}

class MyEntry<K,V>{
	private K k;
	private V v;
	public K getK() {
		return k;
	}
	public void setK(K k) {
		this.k = k;
	}
	public V getV() {
		return v;
	}
	public void setV(V v) {
		this.v = v;
	}
}

  

/*
 * 写一个泛型类
写一个泛型方法 contact(p , o)
如果实参为两个整形,返回值为两数之和
如果实参为两个字符串,返回值为两格字符串的拼接
如果实参为两个浮点型,返回值为两数之积
 */

package com.class1113;

public class Class1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		GenricitiyClass<Integer,Integer> gn1=new GenricitiyClass<>();
		gn1.contact(2,5);
		GenricitiyClass<String,String> gn2=new GenricitiyClass<>();
		gn2.contact("hehe", "da");
		GenricitiyClass<Double,Double> gn3=new GenricitiyClass<>();
		gn3.contact(12.5, 23.9);
		GenricitiyClass<Integer,Double> gn4=new GenricitiyClass<>();
		gn4.contact(12, 23.9);
	}

}

class GenricitiyClass<E,T>{
	public void contact(E e,T t){
		Object a=null;
		if(e.getClass().toString().equals("class java.lang.Integer")&&t.getClass().toString().equals("class java.lang.Integer")){
			a=(Integer)e+(Integer)t;
		}else if(e.getClass().toString().equals("class java.lang.String")&&t.getClass().toString().equals("class java.lang.String")){
			a=(String)e+(String)t;
		}else if(e.getClass().toString().equals("class java.lang.Double")&&t.getClass().toString().equals("class java.lang.Double")){
			a=(Double)e*(Double)t;
		}
		System.out.println(a);
	}
	
}

  

作业2

1.输入年月日,输出这个日期是星期几
2.输出香港回归那一天是星期几
3.输出新中国成立和澳门回归相差多少天
4.输出今年双十一的三天前是星期几
5.输入年份月份,打印输出这个月的月历 格式如下
一 二 三 四 五 六 日
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28

/*
 * 1.输入年月日,输出这个日期是星期几
 */

package com.class1114;

import java.util.Calendar;
import java.util.Scanner;

public class Test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc=new Scanner(System.in);
		System.out.println("请输入某年:");
		int year=sc.nextInt();
		System.out.println("请输入某月:");
		int month=sc.nextInt();
		System.out.println("请输入某日:");
		int date=sc.nextInt();
		
		Calendar c=Calendar.getInstance();
		c.set(year,month-1,date);
		int d=c.get(Calendar.DAY_OF_WEEK)-1;
		System.out.println("那天是星期"+d);
	}

}

  

/*
 * 2.输出香港回归那一天是星期几
 * 1997.7.1
 */
package com.class1114;

import java.util.Calendar;

public class Test2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Calendar c=Calendar.getInstance();
		c.set(1997, 6, 1);
		int d=c.get(Calendar.DAY_OF_WEEK)-1;
		System.out.println("香港回归那天是星期"+d);
	}

}

  

/*
 * 3.输出新中国成立和澳门回归相差多少天
 * 1949.10.1;1999.12.20
 */
package com.class1114;

import java.util.Calendar;

public class Test3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Calendar c1=Calendar.getInstance();
		c1.set(1949, 9, 1);
		Calendar c2=Calendar.getInstance();
		c2.set(1999, 11, 20);
		
		long l1=c1.getTime().getTime();
		long l2=c2.getTime().getTime();
		long i=(l2-l1)/1000/60/60/24;
		System.out.println(l1);
		System.out.println(l2);
		System.out.println("新中国成立和澳门回归相差"+i+"天");
	}

}

  

/*
 *4.输出今年双十一的三天前是星期几
 */
package com.class1114;

import java.util.Calendar;

public class Test4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Calendar c=Calendar.getInstance();
		c.set(2017, 10, 11);
		c.add(Calendar.DATE, -3);
		System.out.println(c.get(Calendar.DAY_OF_WEEK)-1);
	}

}

  

/*
 * 5.输入年份月份,打印输出这个月的月历 格式如下
一	二	三	四	五	六	日
		1	2	3	4	5
6	7	8	9	10	11	12
13	14	15	16	17	18	19
20	21	22	23	24	25	26
27	28
 */
package com.class1114;

import java.util.Calendar;
import java.util.Scanner;

public class Test5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner sc=new Scanner(System.in);
		System.out.println("请输入某年:");
		int year=sc.nextInt();
		System.out.println("请输入某月:");
		int month=sc.nextInt();
		
		Calendar c=Calendar.getInstance();
		c.set(year, month-1, 1);
	
		System.out.println("一"+"\t"+"二"+"\t"+"三"+"\t"+"四"+"\t"+"五"+"\t"+"六"+"\t"+"日");
	    int j=1;
	    //输出空格
	    if(c.get(Calendar.DAY_OF_WEEK)==1){
	    	for(int i=0;i<6;i++){
	    		System.out.print("\t");
	    	}
	    }else{
	    	while(j<c.get(Calendar.DAY_OF_WEEK)-1){
				System.out.print("\t");
				j++;
			}
	    }
		int i=1;
		//输出日期
		while(c.get(Calendar.MONTH)==month-1){
			System.out.print(i+"\t");
			c.add(Calendar.DAY_OF_MONTH, 1);
			//换行
			if(c.get(Calendar.DAY_OF_WEEK)-1==1){
				System.out.println();
			}
			i++;
		}	
	}

}

  


猜你喜欢

转载自www.cnblogs.com/wlxslsb/p/10355642.html