12.时间日期,字符串,内部类,拆装箱
Posted wlxslsb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:返回日历的日期对象
练习
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("一"+" "+"二"+" "+"三"+" "+"四"+" "+"五"+" "+"六"+" "+"日"); int j=1; //输出空格 if(c.get(Calendar.DAY_OF_WEEK)==1){ for(int i=0;i<6;i++){ System.out.print(" "); } }else{ while(j<c.get(Calendar.DAY_OF_WEEK)-1){ System.out.print(" "); j++; } } int i=1; //输出日期 while(c.get(Calendar.MONTH)==month-1){ System.out.print(i+" "); c.add(Calendar.DAY_OF_MONTH, 1); //换行 if(c.get(Calendar.DAY_OF_WEEK)-1==1){ System.out.println(); } i++; } } }
以上是关于12.时间日期,字符串,内部类,拆装箱的主要内容,如果未能解决你的问题,请参考以下文章