匿名内部类的写法 匿名内部类的主要原则有哪些
ja匿名内部类具体概念是什么,在什么地方用到?
其实还是很常用的匿名内部类首先是一个类的内部定义的,是用来帮助你这个外部类去更好的实现一些功能,没有那么神密的,主要用在向方法传递一个对象做为参数。
匿名内部类的写法 匿名内部类的主要原则有哪些
匿名内部类的写法 匿名内部类的主要原则有哪些
public void fun(new Person{
System.out.println("你好");
向方法传了一个person的对象。Person是外部类,匿名类只是一个类体,这个类体创建的对象上转型为Person的对象了。
就是没有说类的名字,直接说是使用的哪个接口或者父类。
一般用在 new Outer().outer_f3();处理、线程比较多
但是没有必要去纠结哪里用,学会了之后到用的时候自然就用了
比如我问:2+3 哪里用?这个根本没法回答,全在用。
JAVA里面匿名内部类很少用,不是很常见,
主要可以继承多个类
A类 B类
C类(匿名内部类)可以继承 A B类
可以从类继承匿名类,还可以从抽象类,接口继承(实现)匿名类
语法更象是创建对象:Date d = new Date(){};
匿名类是对原类的一个继承,同时创建了实例,{} 就是继承
以后的类体。类体中可使用所有类的语法。
匿名类不能写构造器。
匿名类可以从抽象类或者接口继承,
必须提供抽象方法的实现。
Ja匿名内部类
创建一个匿名类对象作为wrapping方法的返回值,同时重写了匿名类的value方法。
return的作用是结束当前方法(C语言里叫函数),看清楚return所在的方法private static class Entry
要调用该方法才会执行里面的代码。(3)内部类的分类
静态main方法是程序入口点。
匿名内部类,内部类,静态内部类的区别和联系
}public class ok{Ja语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类。内部类又分为:常规内部类、局部内部类、匿名内部类和静态嵌套类四种。
1、静态内部类定义
静态内部类,定义在类中,任何方法外,用static定义;静态内部类只能访问外部类的静态成员。
生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in=new Outer.Inner();而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个类。可以定义私有静态内部类。
2、ja实现静态内部类注意事项
1)一般情况下,如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法的时候,是不能够被定义成静态成员变量与静态成员方法的。也就是说,在非静态内部类中不可以声明静态成员
2)一般非静态外部类可以随意访问其外部类的成员变量以及方法(包括声明为private的方法),但是如果一个内部类被声明为static,则其在访问包括自身的外部类会有诸多的限制。静态内部类不能访问其外部类的非静态成员变量和方法
3)在一个类中创建非静态成员内部类的时候,有一个强制性的规定,即内部类的实例一定要绑定在外部类的实例中。然后要在一个外部类中定义一个静态的内部类,不需要利用关键字new来创建内部类的实例。即在创建静态类内部对象时,不需要其外部类的对象
3、静态内部类示例
extends AbstractSequentialList
impjb1 = new JButton("切换内容");lements List
{........
E element;
Entry
Entry
Entry(E element, Entry
this.element = element;
this.next = next;
this.previous = previous;
private Entry
Entry
newEntry.previous.next = newEntry;
newEntry.next.previous = newEntry;
size++;
modCount++;
return newEntry;
}........
}这里即静态内部类的典型用法
ja内部类和匿名内部类的区别是什么?
内部类分为四种: 静态内部类(static inner classes) 成员内部类(member inner classes) 局部内部类(local inner classes) 匿名内部类(anonymous inner classes)//匿名内部类甚至没有类名,(实际上有).
所以匿名内部类,只有一个实例,而且没有引用.
如下面那个Thread类的匿名子类,你不能重复使用.
他能访问外部类的所有数据,包括private的.
甚至如果一个内部类,是在一个方法内的话,方法的局部变量,内部类也可以使用.
总体来说匿名内部类,和内部类效果别不大.
在事如只创建这个类的一个对象,就不必为这个类命名,这种类就成为了匿名类。件和线程应用中经常使用.
//匿名内部类
public class T1 {
public static void main(String[] args) {
new Thread() {
public void run() {
//内部嵌套类
public class T1 {
private static final class Thread1 extends Thread {
public void run() {
public static void main(String[] args) {
Lambda 表达式
}// 静态内部类可以用public,protected,private修饰Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Ja 代码,尤其在的遍历和其他作中,可以极大地优化代码结构。
}});JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
在创建线程并启动时可以使用匿名内部类的写法;
IntBinaryOperator是一个接口,使用匿名内部类的写法调用该方法;
IntPredicate是一个接口。先使用匿名内部类的写法调用该方法;
Function是一个接口,先使用匿名内部类的写法调用该方法;
Stream将要处理的元素看作一种流,在流的过程中,借助Stream API对流中的元素进行作。
Stream可以由数组或创建,对流的作分为两种:
Stream特性:
Stream创建方式有三种:
map,可以将一个流的元素按照一定的映射规则映射到另一个流中;
map,接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
filter,对流中的元素进行条件过滤,符合过滤条件的才能继续留在流中;
filter,按照一定的规则校验流中的元素,将符合条件的元素提取到新的流中的作。
distinct,去除流中的重复元素;
sorted(),自然排序,流中元素需实现Comparable接口;
sorted(Comparator com),Comparator排序器自定义排序。
limit,可以设置流的长度,超出的部分将被抛弃;
skip,跳过流中的前n个元素,返回剩下的元素;
flatMap,接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流;
map只能把一个对象转换成另一个对象来作为流中的元素。而flatMap可以把一个对象转换成多个对象作为流中的元素。
forEach方法,通过 Lambda 表达式的方式遍历中的元素;
forEach,对流中的元素进行遍历作,通过传入的参数去指定对遍历到的元素进行什么具体作。
count,用来获取当前流中元素的个数;
max&min,可以用来或者流中的最值。
collect,把一个流收集起来,最终可以是收集成一个值也可以收集成一个新的;流不存储数据,那么在流中的数据完成处理后,需要将流中的数据重新归集到新的里。
reduce,把一个流缩减成一个值,能实现对求和、求乘积和求最值作;
reduce,对流中的数据按照你指定的计算方式计算出一个结果。
文章来自s://
JAVA匿名类是什么,怎么用??
}}匿名类顾名思义就是没有名字的类。
}intece hello{
String start();
public String hello(){
return new hello(){ //这个个地方就是匿名类
String start(){ return "hello world"; }
这是一个例子,参考下
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent nt) { //这里为匿名类的定义
stopGame();
System.exit(0);
ja匿名内部类具体概念是什么,在什么地方用到?
内部类允许一个类定义被放到另一个类定义里。内部类是一个有用的特征,因为它们允许将逻辑上同属性的类组合到一起,并在另一个类中控制一个类的可视性。内部类可以访问外部类的属性和方法。你可以把内部类看作"方法"一样,在使用的时候调用执行。你也可以把内部类看作"属性"一样,在构造内部类对象的时候,也会在堆里为内部类的属性分配存储空间。所以内部类也有类似像修饰属性,方法那样的修饰符,比如:public,private,static 等等。当一个类没有用static 关键字修饰的时候,这个内部类就叫做成员类,类似属性,方法,作为类的成员。 内部类的特点总结:匿名内部类首先是一个类的内部定义的,是用来帮助你这个外部类去更好的实现一些功能,没有那么神密的,主要用在向方法传递一个对象做为参数。
public void fun(new Person{
System.out.println("你好");
向方法传了一个person的对象。Person是外部类,匿名类只是一个类体,这个类体创建的对象上转型为Person的对象了。
就是没有说类的名字,直接说是使用的哪个接口或者父类。
一般用在 处理、线程比较多
但是没有必要去纠结哪里用,学会了之后到用的时候自然就用了
比如我问:2+3 哪里用?这个根本没法回答,全在用。
JAVA里面匿名内部类很少用,不}}.start();是很常见,
主要可以继承多个类
A类 B类
C类(匿名内部类)可以继承 A B类
可以从类继承匿名类,还可以从抽象类,接口继承(实现)匿名类
语法更象是创建对象:Date d = new Date(){};
匿名类是对原类的一个继承,同时创建了实例,{} 就是继承
以后的类体。类体中可使用所有类的语法。
匿名类不能写构造器。
匿名类可以从抽象类或者接口继承,
必须提供抽象方法的实现。
接口的定义和作用是什么? 什么叫匿名l类?作用 求解释······
接口(intece)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。有了这个协定,就可以抛开编程语言的限制(理论上)。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。
接口好比一种模版,这种模版定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。接口不能被实例化。类可以实现多个接口并且通过这些实现的接口被索引。接口变量只能索引实现该接口的类的实例。
使用intece修饰的类,它的作用是定义匿名类是一种特殊的局部内部类规范和标准,只要这个符合规范和标准的类都可以去实现它。
接口可以看成一种特殊的类
Container pane = jb1.getRootPane().getContentPane();//得到JFrame的底层Pane为了实现ja语言中多继承的效果
ja 匿名内部类中的成员变量和成员方法如何调用?
ja在实现LinkedLi3. 一个匿名(anonymous)class,实现某个intece。st时使用了如下内部类:需要在接口中aclass申明方法:
public static void main1(String[] args) {
helloja38 hello = new helloja38();
aclass a = hello.doit();
a.show1();
}intece aclass {
public void show1();
匿名内部类必须要写在主类里吗?为什么我在别的类写匿名内部类,在main中调用却不行
public class LinkedList所以匿名内部类不是成员内部类.
匿名内部类没有类名,没有class关键字也没有extends和implements等关键字修饰。匿名内部类会隐式地继承一个父类或实现一个接口。
有些接口实现类,往往就需要用一次, 所以不需要名字,代码显得简洁
import ja.awt.;
import ja.awt.nt.;
import jax.swing.;
public class ChangFrameDemo extends JFrame {
JPanel jp1, jp2;//2个JPanel对象
JButton jb1;
boolean flag;//用于判断是打开第1还是第2个JPanel
public ChangFrameDemo() {
jp1 = new JPanel();
jp1.add(new JLabel("信息录入"));
jp1.setBackground(Color.YELLOW);
jp2 = new JPanel();
jp2.add(new JLabel("信息查询"));
jp2.setBackground(Color.LIGHT_GRAY);
JPanel jp3 = new JPanel();
jp3.add(jb1);
add(jp1内部类,内部类有名字,但是他在类的内部.);
setTitle("切换内容窗口");
setSize(380, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
// 种写法,写一个类继承于 ActionListener 然后实现它的方法
// MyActionListener ma = new MyActionListener();
// jb1.addActionListener(ma);
// 下面是第二种方法
jb1.addActionListener(new ActionListener() {//响应
@Override
public void actionPerformed(ActionEvent e) {
flag = !flag;
if (flag) {
pane.remove(jp1);//删除jp1
pane.add(jp2);//添加jp2
} else {
pane.remove(jp2);
pane.add(jp1);
}pane.validate();//重构界面
pane.repaint();//重新绘制
}public static void main(String[] args) {
new ChangFrameDemo();
}//种写法需要的类
@Override
public void actionPerformed(ActionEvent e) {
flag = !flag;
if (flag) {
pane.remove(jp1);//删除jp1
pane.add(jp2);//添加jp2
} else {
pane.remove(jp2);
pane.add(jp1);
}pane.validate();//重构界面
pane.repaint();//重新绘制
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。