(1)定义:把类定义在其他类的内部,这个类就被称为内部类。
(2)内部类的访问特点:
内部类可以直接访问外部类的成员,包括私有。
外部类要访问内部类的成员,必须创建对象。
(3)内部类按照位置:成员内部类和局部内部类。
1》访问外部来访问内部
/* Outer outer=new Outer();//外部对象
outer.outerMethod();*/对象.内部方法
2》直接访问
Outer.Inner inner=new Outer().new Inner();
inner.innerMethod();
外部类名.内部类名 对象名 = 外部类对象.内部类对象;
静态成员内部类(成员方法:静态,非静态):
访问非静态方法:外部类名.内部类名 对象名 = new 外部类名.内部类名();
Person.Body body = new Person.Body();
body.fij();
访问静态方法:上面创建的对象访问,或者外部类名.内部类名.方法名();
Person.Body.jt();
局部内部类
局部内部类访问局部变量的注意事项:
必须被final修饰
为什么呢?
因为局部变量会随着方法的调用完毕而消失,这个时候,
局部对象并没有立马从堆内存中消失,
还要使用那个变量。为了让数据还能继续被使用,
就用final修饰,这样,在堆内存里面存储的其实是一个常量值。
eg:public class TestClass {
public static void main(String[] args) {
final int num1=5;
final int num2=5;
class InnerClass{
public int add(){
return (num1+num2);
}
}
InnerClass in=new InnerClass();
in.add();
}
}
9.*匿名内部类
就是内部类的简化写法。
(1)前提:存在一个类或者接口
这里的类可以是具体类也可以是抽象类。
(2)格式:
new 类名或者接口名() {重写方法;}
(3)本质:
是一个继承了类或者实现了接口的子类匿名对象
(4)匿名内部类在开发中的使用
我们在开发的时候,会看到抽象类,或者接口作为参数。而这个时候,
我们知道实际需要的是一个子类对象。如果该方法仅仅调用一次,
我们就可以使用匿名内部类的格式简化。
package class05;
public abstract class Person {
public abstract void show();
}
package class05;
public class PersonDemo {
public void allshow(Person person){
person.show();
}
//匿名内部类
public static void main(String[] args) {
PersonDemo personDemo=new PersonDemo();
personDemo.allshow(new Person(){
public void show() {
System.out.println("haha ");
}
});
}
}
10.日期常用类:
(1)Date
方法:
构造方法Date() 返回当前系统日期
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
//获取当前系统时间
Date date=new Date();
System.out.println(date);//Mon Aug 07 15:46:47 CST 2017
System.out.println(date.getTime());
}
}
(2)DateFormat(日期格式化 抽象类)
方法:
format(Date date) 格式化日期-》String
(3)SimpleDateFormat(日期格式化的具体类)
方法:
SimpleDateFormat(String pattern) yyyy MM mm dd hh(kk) ss
SimpleDateFormat是DateFormat的子类。
format是SimpleDateFormat的方法
举例:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormateDemo {
public static void main(String[] args) {
Date date=new Date();
//格式化当前日期 系统日期
DateFormat dateFormat=new SimpleDateFormat("YYYY-MM-dd kk:mm:ss");
//把子类的格式传给DateFormat,
//YYYY(年)-MM(月)-dd日 kk(时):mm(分):ss"(秒)
String time=dateFormat.format(date);
//把这个date格式化,例如上面("YYYY-MM-dd kk:mm:ss")
System.out.println(time);
/*System.out.println(date);*/
}
}
(4)Calendar 提取日期或者时间
方法:
Calendar.getInstance()返回Calendar
get(int field) 返回给定日历字段的值
静态属性:
YEAR、MONTH、DATE、HOUR、MINUTE、SECOND
package class06;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();//对象
int year=calendar.get(calendar.YEAR);
int month=calendar.get(calendar.MONTH)+1;
int day=calendar.get(calendar.DATE);
int hour=calendar.get(calendar.HOUR);
int minute=calendar.get(calendar.MINUTE);
int second=calendar.get(calendar.SECOND);
System.out.println("年"+year+"月"+month+"日"+day+"小时"+hour+"分钟:"+minute+"秒"+second);
int date=calendar.get(calendar.DATE);
System.out.println(date);
}
}
calendar抽象类
protected Calendar calendarDateFormat
使用 calendar 来生成实现日期和时间格式化所需的时间字段值。
子类应将此 calendar 初始化为适合于与此 DateFormat 关联的语言环境的日历
get(int field)
返回给定日历字段的值。
calendar抽象类
protected Calendar calendarDateFormat
使用 calendar 来生成实现日期和时间格式化所需的时间字段值。
子类应将此 calendar 初始化为适合于与此 DateFormat 关联的语言环境的日历
get(int field)
返回给定日历字段的值。
getInstance()
使用默认时区和语言环境获得一个日历。
package class06;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
int year=calendar.get(calendar.YEAR);
int month=calendar.get(calendar.MONTH)+1;
int day=calendar.get(calendar.DATE);
int hour=calendar.get(calendar.HOUR);
int minute=calendar.get(calendar.MINUTE);
int second=calendar.get(calendar.SECOND);
System.out.println("年"+year+"月"+month+"日"+day+"小时"+hour+"分钟:"+minute+"秒"+second);
int date=calendar.get(calendar.DATE);
System.out.println(date);
}
}