JavaSE----代码块、内部类
代码块(初始化块)(重要性较属性、方法、构造器差一些)
代码块的作用:用来初始化类、对象的信息
分类:静态代码块 vs 非静态代码块
静态代码块:
随着类的加载而执行,而且只执行一次
作用:初始化类的信息
静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构
非静态代码块:
每创建一个对象,就执行一次非静态代码块
作用:可以在创建对象时,对对象的属性等进行初始化
非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法
- 实例化子类对象时,涉及到父类、子类中静态代码块、非静态代码块、构造器的加载顺序:
由父及子,静态先行。
①默认初始化
②显式初始化/⑤在代码块中赋值
③构造器中初始化
④有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值
- 执行的先后顺序:① - ② / ⑤ - ③ - ④
成员内部类(静态、非静态 ) vs 局部内部类(方法内、代码块内、构造器内)
成员内部类的理解:
一方面,作为外部类的成员:
> 调用外部类的结构
>可以被static修饰
>可以被4种不同的权限修饰另一方面,作为一个类:
> 类内可以定义属性、方法、构造器等
> 可以被final修饰,表示此类不能被继承。言外之意,不使用final,就可以被继承
> 可以被abstract修饰
4.成员内部类:
4.1如何创建成员内部类的对象?(静态的,非静态的)
//创建静态的Dog内部类的实例(静态的成员内部类):
Person.Dog dog = new Person.Dog();
//创建非静态的Bird内部类的实例(非静态的成员内部类):
//Person.Bird bird = new Person.Bird();//错误的
Person p = new Person();
Person.Bird bird = p.new Bird();
4.2如何在成员内部类中调用外部类的结构?
class Person{String name = "小明";
public void eat(){}
//非静态成员内部类class Bird{String name = "杜鹃";public void display(String name){System.out.println(name);//方法的形参System.out.println(this.name);//内部类的属性System.out.println(Person.this.name);//外部类的属性//Person.this.eat();}}
}
5.局部内部类的使用:
//返回一个实现了Comparable接口的类的对象public Comparable getComparable(){//创建一个实现了Comparable接口的类:局部内部类//方式一:
// class MyComparable implements Comparable{// @Override
// public int compareTo(Object o) {// return 0;
// }
// }
// return new MyComparable();//方式二:return new Comparable(){@Overridepublic int compareTo(Object o) {return 0;}};}
注意点:
在局部内部类的方法中(比如:show)如果调用局部内部类所声明的方法(比如:method)中的局部变量(比如:num)的话,要求此局部变量声明为final的。
jdk 7及之前版本:要求此局部变量显式的声明为final的
jdk 8及之后的版本:可以省略final的声明
总结:
成员内部类和局部内部类,在编译以后,都会生成字节码文件。
格式:成员内部类:外部类内部类名.class局部内部类:外部类内部类名.class 局部内部类:外部类内部类名.class局部内部类:外部类数字 内部类名.class
6、匿名内部类
匿名内部类本质上是一个特殊的局部内部类(定义在方法内部)
前提:需要存在一个接口或类
6.1 匿名内部类解决的问题
当需要一个类的子类对象 或者 接口的实现类时,可以快速得到一个对象
- 一般方式
public class HelloWorld {public static void main(String[] args) {//创建接口实现类对象,调用实现类中的方法InterImpl inter = new InterImpl();inter.show();}}
//接口中只有一个方法
interface Inter {void show();
}//创建接口实现类
class InterImpl implements Inter{@Overridepublic void show() {System.out.println("InterImplement 重写的show方法");}
}
- 使用匿名内部类实现
实现了inter接口的实现类对象
public class HelloWorld {public static void main(String[] args) {new Inter() {@Overridepublic void show() {System.out.println("匿名内部类中的show方法");}}.show();}}interface Inter {void show();
}
6.2、匿名内部类的理解:
理解:匿名内部类是将 继承/实现,方法重写,创建对象,放在了一步中进行
获取的匿名对象是子类或实现类对象,
如果想要使用匿名内部类中的多个方法,需要使用父类或接口去接,也是一种多态的体现
6.2 开发场景
当方法形式参数是接口或者抽象类时可以将匿名内部类作为实参进行传递
7、Lambda 表达式
理解:可以理解是对匿名内部类的优化,但本质上不同
public class HelloWorld {public static void main(String[] args) {goSwimming(new Swimming() {@Overridepublic void swim() {System.out.println("铁汁,我们去游泳吧~");}});}public static void goSwimming(Swimming swimming){swimming.swim();}
}interface Swimming {void swim();
}
public class HelloWorld {public static void main(String[] args) {goSwimming(()->{System.out.println("铁汁,我们去游泳吧~");});}public static void goSwimming(Swimming swimming){swimming.swim();}
}interface Swimming {void swim();
}
JavaSE----代码块、内部类相关推荐
- java学习(82):静态代码块内部类
//静态代码块内部类 public class test18{private static final String URL;private static final String DEVICE;pr ...
- Java的static,final,代码块,内部类,抽象类,接口等
Java的static,final,代码块,内部类,抽象类,接口等 1 static关键字月final关键字 1.1 static static表示静态.可以修饰属性,方法,代码块内部类等,总结如下: ...
- 25天掌握java基础(八)——static、单例、代码块、继承
文章目录 Demo08-static.单例.代码块.继承 1.static 1.1static静态关键字 1.1.1static修饰成员变量 1.1.2static修饰成员方法 1.1.3static ...
- Java查漏补缺(08)关键字:static、单例设计模式、理解main方法、类的成员之四:代码块、final关键字、抽象类、接口、内部类、枚举类、注解、包装类
Java查漏补缺(08)关键字:static.单例设计模式.理解main方法.类的成员之四:代码块.final关键字.抽象类.接口.内部类.枚举类.注解.包装类 本章专题与脉络 1. 关键字:stat ...
- 面向对象4(匿名对象、内部类、包、修饰符、代码块)
1.匿名对象 指在创建对象的时候,只有创建语句,没将对象地址赋值给某个变量 new Person(); 1.1 特点 1.创建时,可直接使用,没有变量名 new Person().eat(); 2.匿 ...
- java final类的写法_重拾JavaSE基础——抽象类、接口、代码块、final和枚举
今天继续回顾Java基础,有些东西用得不多,大家看看知道语法就好 主要内容 抽象类 抽象方法 抽象方法的写法 抽象方法是否可以私有化 抽象类的特征 抽象类有无构造器,能否实例化对象 抽象类的结构 抽象 ...
- 内部类、包、修饰符、代码块
内部类: 内部类概念:将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类.其他类也称为外部类. 内部类分为成员内部类.局部内部类,内部类中可以直接访问外部类的 ...
- php的完整代码块,简单测试了一下php中的代码块、内部类等知识
简单测试了一下php中的代码块.内部类等知识<?php class a { public $b; public function print_result() { //普通代码块,但已经不是ja ...
- 牛客网Java刷题知识点之关键字static、static成员变量、static成员方法、static代码块和static内部类...
不多说,直接上干货! 牛客网Java刷题知识点之关键字static static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概 ...
- Java——面向对象进阶(final关键字,static关键字,匿名对象,内部类,四种访问修饰符,代码块)...
一.final关键字 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后,就可 ...
最新文章
- git commit如何修改默认编辑器为vim
- Pytest前后置处理
- 【GOF23设计模式】原型模式
- java 代码执行el,专属于java的漏洞——EL表达式注入
- eclipse 中文乱码
- html字体变大自动换行,网页css中实现字符超出宽度自动换行和英语字符不断行的解决方法...
- (计算机组成原理题目题型总结)第六章:总线
- 锚杆拉拔试验弹性模量计算_【安全宣教】煤亮子小课堂(十三)——锚杆的锚固力和拉拔力...
- Tosca 给定义变量,取内容放到变量里
- telnet怎么算成功_有机肥发酵剂有的作用,怎么才算发酵成功?
- java opencv 打开图片路径_Java 调用 OpenCV (可获取到图像)
- inter uhd graphics630显卡驱动_极为全面的!从零开始的!小白都能看懂的!硬件科普#4 显卡选择篇...
- sprintf和fprintf
- Hadoop生态圈:19个让大象飞起来的工具!
- Java程序员面试笔试宝典答案,基于HTML
- 女人长的漂亮不如活的漂亮(Top60)
- html 前端优化上传视频,前端上传组件Plupload使用---上传大视频(分片上传)
- 为什么说 NLP 将是未来数据领域的珠峰?
- 3GPP TS 29244-g30 中英文对照 | 5.4.14 Deferred PDR activation and deactivation
- 会议终端Mini-MCU功能调研
热门文章
- west-first路由算法
- 42岁老码农找工作记录
- 理解Attention机制原理及模型
- angularjs config_AngularJS依赖注入
- linux中改localhome名称,修改 /var/lib/locales/supported.d/local 文件(使用 locale -a 命令查看系統中所有已配置的 locale)...
- KMP算法模板与解析
- G-TAD: Sub-Graph Localization for Temporal Action Detection
- day08 文件操作
- openresty 前端开发入门三之JSON篇
- 服务器常用的状态码及其对应的含义