day15_学习总结
包的含义
为了更好的管理java文件,对其java文件进行区分,其实质就是文件夹,用于分类java文件
命名规则:包名全部小写
根据功能/使用范围进行划分
一般采用的是公司域名反写
eg:com.qf.javaee.pj
注意:包名书写在java文件中第一行
带包运行
带包运行有两种方式
方式一:
在控制台中,如果需要通过导包运行java代码,须要先将java代码编译生成对应的.class文件,然后将包名对应的文件夹创建完毕,将.class文件复制到对应的包名下,在控制台中通过
java 包名.类名
来运行
eg:java com.pj.HelloWorld
方式二:
通过
javac -d. 源文件.java
来编译,会自动生成包名的文件夹以及.class文件
再通过
java 包名.类名
运行即可
修饰符
静态修饰符——static
状态修饰符——final
抽象修饰符——abstract
权限修饰符:public protected private 默认
权限修饰符访问权限:
同一个包下同一个类中 同一个包下不同类或子类 不同包下的子类中 不同包下的无关类
public Y Y Y Y
protected Y Y Y
默认 Y Y
private Y
内部类
成员内部类
成员内部类位于外部类的成员位置
class{
class{//成员内部类
}
}
成员内部类的的成员方法访问:
外部类.内部类 对象 = new 外部类.new内部类();
对象.内部类方法名();
成员内部类可以被private/static修饰
被private修饰的成员内部类私有化,开发中使用较少
被static修饰的成员内部类
成员方法的访问:
外部类.内部类 对象名 = new 外部类.内部类();
对象名.成员方法名();
或者
new 外部类.内部类().成员方法名();
当成员方法也被static修饰时:
可以通过以下方式访问
外部类.内部类.成员方法名();
注意:非静态成员内部类中不能有静态属性
局部内部类
局部内部类定义在方法内部
public void show(){
class {
}
}
在方法中如果要访问局部内部类中的成员时,需要在方法中创建局部内部类的对象,通过对象访问成员
变量问题
在成员内部类中访问变量的问题:
变量名相同时遵循就近原则
class Outer{
int num = 10;
class Inner{
int num = 20 ;
public void show(){
int num = 30;
System.out.println(num);//输出结果为30
System.out.println(this.num);//输出结果为20,this代表本类的对象地址值引用
System.out.println(Outer.this.num);//输出结果为10,
}
}
}
匿名内部类
没有名字的类
格式:
new 抽象类/接口{
重写的方法;
};
匿名内部类的实质:继承具体类的子类对象/继承了抽象类的子类对象/实现了接口的子实现类对象
当通过形式参数或者返回值类型为具体类,抽象类,接口时,用匿名对象类传递时:
可以通过匿名内部类实现
eg:
interface Person{
public void show();
}
class PersonDemo{
public void method(Person person){
System.out.println("method...");
}
}
public class Test{
public static void main(String[] args){
PersonDemo pd = new PersonDemo();
pd.method(new Pernson(){
@Override
public void show(){
}
});
}
}
输出结果为:
method...
作为返回值同理也是如此