10、匿名内部类、枚举类、日期、Math、Random、String、equals、StringBuffer、包装类、对象数组、克隆,标准输出1
1、内部类
a、正常内部类(类套类):
引用的方法:1、在测试中使用new 外类.new 内类.方法的方式调用内部类方法
2、在内部类同层位置,写下新的方法,用来new内部类即可
b、方法内部类:
引用的方法:只能使用上面的第二种方法。
c、静态内部类
public class C { static class C1{ static void go(){ System.out.println("C1"); } void to(){ System.out.println("TO"); } } } public class Testc { public static void main(String[] args) { C.C1.go(); new C.C1().to(); } }
2、匿名内部类——>只能使用一次,即建即用(委托)delegates
a、形参匿名内部类
public class D { void mark(ID1 id1){ id1.to(); id1.go(); } public static void main(String[] args) { new D().mark(new ID1() { @Override public void go() { System.out.println("go"); } @Override public void to() { System.out.println("to"); } }); } } interface ID1{ void go(); void to(); }
输出时候是to
go
因为调用的是mark()方法,mark()方法的具体实现在匿名内部类中。
内部类是在方法或类中套一个类。而形参匿名内部类是在主方法的一个方法的参数列表中写匿名内部类。
2、返回值内部类
public class D { ID1 park(){ return new ID1(){ @Override public void go() { System.out.println("go2"); } @Override public void to() { System.out.println("to2"); } }; } public static void main(String[] args) { new D().park().go(); new D().park().to(); } } interface ID1{ void go(); void to(); }
用在:事件处理、安卓开发、多线程开发;返回值匿名内部类是在实例化接口的那个方法中包含内部类。
3、枚举类
列出有限的对象:季节、星期等等,枚举可以实现接口,不能继承类
public enum Eseason { SPRING,SUMMER,FALL,WINTER; void judge(){ switch (this){ case SPRING: System.out.println("spring"); break; case SUMMER: System.out.println("summer"); break; case FALL: System.out.println("fall"); break; case WINTER: System.out.println("winter"); break; default: System.out.println("error"); } } } public class Testeseason { public static void main(String[] args) {
for(Eseason e:Eseason.values()){
e.judge();
}
}
}
foreach 中后面的部分必须是一个集合类型的东西,不能是枚举,Enum.values()是一个对象数组集合。
public enum EPlanet { EARTH(){ public void junge(){ System.out.println("earth"); } },JUPITER(){ public void junge(){ System.out.println("jupiter"); } },MERCUTY(){ public void junge(){ System.out.println("mercuty"); } }; public void junge(){ } } public class TestEPlanet { public static void main(String[] args) { EPlanet.EARTH.junge(); } }
枚举的是星球所对应的构造器,在构造器中重写的是方法,在构造器外需要写将来构造器产生出来的对象要调用的方法,这个方法即是在构造器中重写的方法。
4、日期类
引包:import java.util.Date;
显示当前时间
1、System.out.println(new Date()): //Sat Feb 03 22:36:16 CST 2018
2、System.out.println(System.currentTimeMills));1517668719377(毫秒)
3、System.out.ptintln(System.nanoTime());534544762314383(更精确的)
重点记忆:y 年 M年中月份(1-12) d月中的日(0-31) H小时0-23 a小时(0-12) k小时(1-24) m分钟 s毫秒
如果要使用常人理解的时间表达
1、则调用 java.text.SimpleDateFormat包
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(f.format(new Date()));
使用SimpleDateFormat方法来规定时间的格式,在用SimpleDateFormat对象的format方法来用刚才定义的格式限制new Date();
2、调用 java.util.Calendar;包
Calendar c=Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
c.setTime(new Date());
System.out.println(c.get(Calendar.YEAR)+"-"+c.get(Calendar.MONTH)+1);
Calendar类的对象有add方法,可以给当前年月增加数量来查询其他年月的时间
package homework.B1.src.com.C11; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; /** * Created by Administrator on 2018/2/6 0026. * 做一个日历 */ public class F { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); int count=0; SimpleDateFormat sdf=new SimpleDateFormat("yyyy"); int year=Integer.parseInt(sdf.format(new Date())); sdf=new SimpleDateFormat("MM"); int month=Integer.parseInt(sdf.format(new Date())); calendar.set(Calendar.YEAR, year);// 设置年份 calendar.set(Calendar.MONTH, month);// 设置月份 calendar.set(Calendar.DATE, 0);// 设置日期 int days=chooseMonth(year,month); System.out.println(year + " 年 " + month + " 月 的 日 历 如 下:"); System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六"); while (count < days) { calendar.add(Calendar.DAY_OF_MONTH, 1);// 设置添加日历的周期为1 int day = calendar.getTime().getDay();// 获取日历的星期几表示数,例如:0:表示星期日 if (count == 0) {// 根据星期几来决定输入几个tab for (int i = 0; i < day; i++) { System.out.print("\t\t"+" "); } } if (day == 0) {// 如果是周日了则换行 System.out.println(); } int d=calendar.getTime().getDate(); SimpleDateFormat si=new SimpleDateFormat("dd"); String s=si.format(new Date()); if(d==new Integer(s)){ System.out.print(calendar.getTime().getDate() +"*"+ "\t ");// 获取日历中日期数 }else{ System.out.print(calendar.getTime().getDate() + "\t\t ");// 获取日历中日期数 } count++; } } public static int chooseMonth(int year,int month){ int day=0; boolean run; run = ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) ? true : false; switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day = 31; break; case 4: case 6: case 9: case 11: day = 30; break; case 2: { if (run) { day = 28; break; } else { day = 29; break; } } } return day; } }