黑马程序员——Java基础---包、内部类、匿名内部类
来源:互联网 发布:网络运营商 编辑:程序博客网 时间:2024/05/29 12:51
——Java培训、Android培训、iOS培训、UI培训、PHP培训、期待与您交流! ——
一、package关键字
包的作用是将字节码(.class)进行分类存放 ,包其实就是文件夹。
1.注意事项
- package语句必须是程序的第一条可执行的代码
- package语句在一个java文件中只能有一个
- 如果没有package,默认表示无包名
2.带包类的编译运行
javac编译的时候带上-d即可
javac -d . HelloWorld.java
通过java命令执行。
java 包名.HellWord
package cn.ds93;import xyz.junshuai.*;public class Programer { public static void main(String[] args) { Translator t = new Translator("HouHou","nv"); System.out.println(t.getName() + " is " + t.getSex()); }}
package xyz.junshuai;public class Translator { private String name; private String sex; public Translator(){ } public Translator(String name,String sex) { this.name = name; this.sex = sex; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setSex(String sex) { this.sex = sex; } public String getSex() { return sex; }}
二、四种权限修饰符
1.类及其组成所使用的常见修饰符
- 权限修饰符:private,默认的,protected,public
- 状态修饰符:static,final
- 抽象修饰符:abstract
2.关于类的修饰符
- 权限修饰符:默认修饰符,public
- 状态修饰符:final
- 抽象修饰符:abstract
- 用的最多的就是:public
3.关于成员变量的修饰符
- 权限修饰符:private,默认的,protected,public
- 状态修饰符:static,final
- 用的最多的就是:private
4.关于构造方法的修饰符
权限修饰符:private,默认的,protected,public
用的最多的就是:public
5.关于成员方法的修饰符
- 权限修饰符:private,默认的,protected,public
- 状态修饰符:static,final
抽象修饰符:abstract
用的最多的就是:public
6.除此以外的组合规则
- 成员变量:public static final
- 成员方法:
- public static
- public abstract
- public final
三、内部类
1.内部类访问特点
- 内部类可以直接访问外部类的成员,包括私有。
- 外部类要访问内部类的成员,必须创建对象。
- 外部类名.内部类名 对象名 = 外部类对象.内部类对象;
2.静态成员内部类
- 用static修饰
- 成员内部类被静态修饰后的访问方式是:
- 外部类名.内部类名 对象名 = 外部类名.内部类对象;
来个面试题:
class InnerClass { public static void main(String[] args) { Outer.Inner oi = new Outer().new Inner(); oi.print(); }}class Outer { public int dong = 100; class Inner { public int shuai = 200; public void print() { int hou = 300; System.out.print(hou + "\n"); System.out.print(this.shuai + "\n"); System.out.print(Outer.this.dong + "\n"); } }}
3.局部内部类访问局部变量的问题
- 局部内部类访问局部变量必须用final修饰
- 局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用。但是jdk1.8取消了这个事情,老师认为这是个bug。
四、匿名内部类
1.匿名内部类就是内部类的简化写法。
2.前提:存在一个类或者接口
- 这里的类可以是具体类也可以是抽象类。
3.格式
new 类名或者接口名(){ 重写方法; }
4.本质
是一个继承了该类或者实现了该接口的子类匿名对象。
举个例子(面试题,补齐Outer类中的代码):
interface HouHou { public void english();}class Outer { class Inner implements HouHou { public void english() {// System.out.println(); } } public void print() { new Inner() { public void english() { System.out.println("Shanghai Haishi University"); } }.english(); }}public class AnonymousInnerClass { public static void main(String[] args) { new Outer().print(); }}
5.匿名内部类,只在重写一个方法时用
interface Inter { public void dong(); public void shuai();}class Outer { public void hou() { new Inter() { //匿名内部类,只在重写一个方法时用 public void dong(){ System.out.println("lijun"); } public void shuai(){ System.out.println("lijun2"); } }.dong(); new Inter() { public void dong(){ System.out.println("lijun"); } public void shuai(){ System.out.println("lijun2"); } }.shuai(); }}public class AnonymousInner { public static void main(String[] args) { new Outer().hou(); }}
6.匿名内部类在开发中的应用
//匿名内部类在开发中的应用//本例为有名类,作为对比public class AnonymousInner2 { public static void main(String[] args) { Caomin c = new Caomin(); c.bitter(new Employee()); }}abstract interface Employer { public abstract void exploit();}class Employee implements Employer { public void exploit() { System.out.println("哪里有压迫,哪里就有反抗。"); }}class Caomin { public void bitter(Employee e) { e.exploit(); }}
//匿名内部类在开发中的应用//本例为匿名内部类public class AnonyInnerDevelop { public static void main(String[] args) { Caomin c = new Caomin(); c.bitter(new Employee() { //匿名内部类,编译看左边,运行看右边 public void exploit() { System.out.println("哪里有压迫,哪里就有反抗。"); } }); }}abstract interface Employer { public abstract void exploit();}class Employee implements Employer { public void exploit() { //System.out.println("哪里有压迫,哪里就有反抗。"); }}class Caomin { public void bitter(Employee e) { e.exploit(); }}
再来一个面试题
//匿名内部类的面试题public class AnonyInnerInterview { public static void main(String[] args) { Outer.dong().shuai(); //链式编程,每次调用方法后还能调用方法,第一次调用方法返回的是对象 }}interface Inter { void shuai();}class Outer { public static Inter dong() { return new Inter() { //返回实现的接口(子类对象) public void shuai() { System.out.print("匿名内部类"); } }; }}
——Java培训、Android培训、iOS培训、UI培训、PHP培训、期待与您交流! ——
0 0
- 黑马程序员——Java基础---包、内部类、匿名内部类
- 黑马程序员——java 内部类、匿名内部类
- 黑马程序员——JAVA基础---匿名内部类
- 黑马程序员——Java 基础:匿名内部类
- 黑马程序员java基础匿名内部类
- 黑马程序员——java基础:内部类与匿名内部类
- 黑马程序员——Java基础:内部类、异常、包
- 黑马程序员——内部类、匿名内部类
- 黑马程序员——内部类、匿名内部类
- 黑马程序员—内部类与匿名内部类 异常
- 黑马程序员—内部类、匿名内部类
- 黑马程序员----java基础第8天(内部类,静态内部类,匿名内部类)
- 黑马程序员——JAVA基础之内部类,匿名内部类
- 黑马程序员——匿名内部类
- JAVA基础——内部类、匿名内部类
- 黑马程序员 Java面向对象——(匿名)内部类
- 黑马程序员 Java面向对象——(匿名)内部类
- 黑马程序员 Java面向对象——(匿名)内部类
- 梳理hibernate篇-原理及缓存机制
- iOS 应用发布流程
- Debian8.5安装编译GCC6.1.0笔记
- 卸载系统应用&动画气泡特效&创建守护服务&进程管理(ActivtyManager&提供批量操作)&桌面小控件AppWidget
- SICP 习题2.9 区间宽度
- 黑马程序员——Java基础---包、内部类、匿名内部类
- Android View工作机制(1)—基本知识点
- iOS 解决button设置背景图片的时候拉伸变形的问题
- Java线程队列
- 梳理mybatis-原理篇
- C++实验7
- 24、jdbc入门3
- 最近学习的内容
- hihi