java内部类笔记(超级详细!) | java

Wan 3.0提示词实战:从抄作业到改作业的完整技巧 AI视频生成中,提示词是决定成片质量的核心。视频模型依赖于文字约束来定义运动轨迹、镜头语言与物理合理性,提示词工程因此成为连接创意与技术的关键。本文从提示词的结构、资源获取、优化方法入手,结合Wan 3.0的模型特点,梳理了从官方模板到社区案例的实战路径,并强调运动一致性、风格词堆砌等常见问题。通过分解主体、动作、镜头等维度,帮助创作者快速找到适配的提示词,提升视频生成的稳定性与惊喜感。 阅读详情

java内部类笔记

前言

因为java内部类东西有点多(多的就离谱 ) ,所以记录一下,下面开始讲解内部类

内部类

1.定义

定义在类1中的类2被称为内部类,类2称为外部类

2.作用

需要内部类主要有以下几点原因

(1)内部类可以实现多重继承,解决java单继承的缺陷(经常配合接口使用)
(2)内部类方法可以访问该类定义所在作用域的数据,包括被private修饰的私有数据
(3)内部类可以很好的实现隐藏(隐藏主要针对的是对同一包中的其他类而言的)
(4)当我们想要定义一个回调函数却不想写大量代码的时候我们可以选择匿名内部类来实现(这个我感觉可有可无)

后面会解释为什么是这几个原因,如果暂时不理解也没问题,要讲原因之前,得先介绍有哪些内部类

3.内部类类别

内部类可以分为静态内部类和非静态内部类。非静态内部类可以分为成员内部类,局部内部类,匿名内部类。

静态内部类

使用static关键字修饰的内部类称为静态内部类。
1、静态内部类访问外部类时——只能访问静态成员
2、外部类访问静态内部类时——首先得创建一个内部类对象,通过对象来调用静态内部类成员
3、外部类外访问静态内部类时——因为静态内部类时外部类的静态成员,静态成员是不需要外部类对象而存在的,所以在外部类外,对静态内部类进行访问时是不需要创建外部类对象的

静态内部类与非静态内部类的对比:

静态内部类非静态内部类
是否可以有静态成员变量是否
是否可以访问外部类的非静态变量否是
是否可以访问外部类的静态变量是是
创建是否依赖于外部类否是
public class innerStaticClass{
    public static void main(String args[]){
        outClass.inner w1n = new outClass.inner();		//外部类外创建静态内部类对象
        outClass2.inner w2n = new outClass2().new inner();	//外部类外创建非静态内部类对象
        w1n.print();
        System.out.println();
        w2n.print();
    }
}

class outClass{
    static int j = 11;
    static class inner{	//创建静态内部类
        int i=1;
        void print(){
            System.out.println("这是静态内部类");
            System.out.println("j的值为:"+j);
        }
    }
    public void myVoid(){
        inner n=new inner();    //外部类中创建静态内部类对象
        int ii=n.i;
        System.out.println("静态内部类的变量i值为:"+ii);
    }
}

class outClass2{
    class inner{	             //创建非静态内部类
        void print(){
            System.out.println("这是非静态内部类");
        }
    }
}
------------------
Output:
这是静态内部类
j的值为:11

这是非静态内部类
成员内部类

当一个类作为另一个类的非静态成员,则这个类就是一个成员内部类。
1、 类似于成员变量和方法,同样可以在成员内部类前面加可以修饰成员的修饰符
2、成员内部类访问外部类时——可访问任意成员,包括private成员,如果内部类成员与外部类成员同名时可以采用外部类名.this.成员名访问外部类成员,或者是创建一个外部类对象,然后使用该对象调用外部类成员变量。
3、外部类访问内部类时——创建内部类对象,通过对象调用内部类成员。
4、外部类外访问内部类时——首先创建一个外部类对象,然后通过该外部类对象调用创建一个内部类对象。

class outClass{
    private int i=8;			//外部类成员变量i
    class innerClass{			//创建非静态内部类
        int i=9;				//内部类成员变量i
        public void myVoid(){
            System.out.println("内部类中的成员变量值为:" + i);

            outClass w = new outClass();
            System.out.println("外部类中的成员变量值为:"+ w.i);

            System.out.println("外部类中的成员变量值为:"+ outClass.this.i);
        }
    }
}

public class NeiBuLei2{
    public static void main(String args[]){
        outClass w=new outClass();			            //创建外部类对象
        outClass.innerClass wn2=w.new innerClass();		//创建内部类对象
        wn2.myVoid();			                        //调用内部类中成员
    }
}
------------------
Output:
内部类中的成员变量值为:9
外部类中的成员变量值为:8
外部类中的成员变量值为:8
局部内部类

如果一个内部类只在一个方法中使用到了,那么我们可以将这个类定义在方法内部,这种内部类被称为局部内部类。
1、局部内部类的作用范围——同局部变量的作用范围,只在包含该局部内部类的方法内起作用(也就是局部内部类对外完全隐藏,除了创建这个类的方法可以访问它,其余地方是不允许访问的)。
2、局部内部类不允许使用访问修饰符public private protected
3、局部内部类中访问外部类成员变量——可以直接调用
4、局部类中访问外部类的局部变量——在java8以前也就是jdk1.8可以直接访问,没有限制
5、静态方法里的局部内部类只能访问外部类静态成员

class outClass{
    int i = 8;				 //定义一个外部类的成员变量
    public void myVoid(){
        int j=9;			//定义一个外部类的局部变量
        class innerClass{			//定义一个局部内部类
            public void myNeiVoid(){
                i++;//外部类局部变量可以修改并不是final
			System.out.println("外部类的成员变量i值为:"+i);
			System.out.println("外部类的局部变量j值为:"+j);
        }
    }
    innerClass n=new innerClass();		//创建内部类对象
	n.myNeiVoid();		//调用内部类中的成员方法
    }
}

public class Test{
    public static void main(String args[]){
        outClass w=new outClass();		//创建外部类对象
        w.myVoid();
    }
}
------------------
Output:
外部类的成员变量i值为:9
外部类的局部变量j值为:9

如果尝试把局部内部类外的方法改为静态方法就不能访问外部类静态成员

class outClass{
    int i=3;
    public static void myVoid(){
        class innerClass{				//定义一个局部内部类
            public void myNeiVoid(){
                System.out.println("外部类的局部变量值为:"+i);
            }
        }
        innerClass n=new innerClass();			//创建内部类对象
        n.myNeiVoid();			//调用内部类中的成员方法
    }
}

public class Test{
    public static void main(String args[]){
        outClass w=new outClass();		//创建外部类对象
        w.myVoid();
    }
}

报错
在这里插入图片描述

匿名内部类

匿名内部类语法格式:
new 父类构造器(参数列表)| 实现接口()
{
//匿名内部类的类体部分
}

注意要点:
1、在这里我们看到使用匿名内部类我们必须要继承一个父类或者实现一个接口,当然也仅能只继承一个父类或者实现一个接口。同时它也是没有class关键字,这是因为匿名内部类是直接使用new来生成一个对象的引用。当然这个引用是隐式的。
2、匿名内部类是没有名字的
3、不能显式地为它添加构造方法,参数列表是直接传给父类的,匿名内部类没有构造方法
4、匿名内部类可以直接调用或者重写父类中方法,而且也可以有父类或接口中没有的方法
5、匿名内部类不能访问未加final的局部变量,(注意:JDK1.8即使没有用final修饰也可以访问,但是一旦调用就成了final类型)
6、匿名内部类可以访问外部内的所有成员;
7、属性屏蔽,匿名内部类定义的类型(如变量)会屏蔽其作用域范围内的其他同名类型(变量),而且匿名内部类里变量可以改变值!这点跟外部类变量不同
8、匿名内部内中可以定义内部类;(真套娃,恶心到我了 )

//网上的经典代码
public abstract class Bird {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public abstract int fly();
}

public class Test {
    
    public void test(Bird bird){
        System.out.println(bird.getName() + "能够飞 " + bird.fly() + "米");
    }
    
    public static void main(String[] args) {
        Test test = new Test();
        //下面使用了匿名内部类用来作为参数传递
        test.test(new Bird() {
            
            public int fly() {
                return 10000;
            }
            
            public String getName() {
                return "大雁";
            }
        });
    }
}
------------------
Output:
大雁能够飞 10000米

关于上述提到的第五点 ,如果Test类换一种写法就会有关的报错 比如下面这种因为匿名内部类想要使用外部类中变量i但是又想改变i的值这时候就会报错

public class Test {

    public void test(Bird bird){
        System.out.println(bird.getName() + "能够飞 " + bird.fly() + "米");
    }

    public static void main(String[] args) {
        Test test = new Test();
        //下面使用了匿名内部类用来作为参数传递
        int i=10000;
        test.test(new Bird() {
            
            public int fly() {
                return ++i;
            }

            public String getName() {
                return "大雁";
            }
        });
    }
}

必须要final类型或者是实际上的final类型(意思就是你调用任意外部类变量可以,但是一旦你调用,系统就规定这个变量为final,而且不管是内部类还是外部类里都不准修改,因为final类型就是表示该变量为常量)

在这里插入图片描述

但是如果改成下面这样是可以的,这是因为上述提到的第七点

public class Test {

    public void test(Bird bird){
        System.out.println(bird.getName() + "能够飞 " + bird.fly() + "米");
    }

    public static void main(String[] args) {
        Test test = new Test();
        //下面使用了匿名内部类用来作为参数传递
        int i=10000;
        test.test(new Bird() {
            int i=10000;
            public int fly() {
                return ++i;
            }

            public String getName() {
                return "大雁";
            }
        });
    }
}
------------------
Output:
大雁能够飞 10001米
解释为什么匿名内部类使用的局部变量必须是final类型

(参考了java内部类的四大作用和JDK8之前,匿名内部类访问的局部变量为什么必须要用final修饰)
为什么局部变量需要final修饰呢
用final修饰实际上就是为了保护数据的一致性
因为局部变量和匿名内部类的生命周期不同。

匿名内部类是创建后是存储在堆中的,而方法中的局部变量是存储在Java栈中,当方法执行完毕后,就进行退栈,同时局部变量也会消失。

那么此时匿名内部类还有可能在堆中存储着,那么匿名内部类要到哪里去找这个局部变量呢?

为了解决这个问题编译器为自动地帮我们在匿名内部类中创建了一个局部变量的备份,也就是说即使方法执结束,匿名内部类中还有一个备份,自然就不怕找不到了。

但是问题又来了。

如果局部变量中的a不停的在变化。
那么岂不是也要让备份的a变量无时无刻的变化。
为了保持局部变量与匿名内部类中备份域保持一致。
编译器不得不规定死这些局部域必须是常量,一旦赋值不能再发生变化了。

所以为什么匿名内部类应用外部方法的域必须是常量域的原因所在了。

特别注意
在Java8中已经去掉要对final的修饰限制,但其实只要在匿名内部类使用了,该变量还是会自动变为final类型(只能使用,不能赋值)。

但是我其实还有一个问题现在还没解决仍有疑惑到现在我也没懂,不知道为什么,就是下面的例子
静态成员变量被匿名内部类调用后却并没有变成final?????是因为不是局部变量吗?等我搞懂了再来回答,暂时保留这个

public class Test {

    public void test(Bird bird){
        System.out.println(bird.getName() + "能够飞 " + bird.fly() + "米");
    }
    static int i=10000;
    public static void main(String[] args) {
        Test test = new Test();
        //下面使用了匿名内部类用来作为参数传递


        test.test(new Bird() {

            public int fly() {
                return ++i;
            }

            public String getName() {
                return "大雁";
            }
        });

    }
}
------------------
Output:
大雁能够飞 10001米

4、作用的解释

前面我们提到了内部类有这几大作用
分别是
(1)内部类可以实现多重继承,解决java单继承的缺陷(经常配合接口使用)
(2)内部类方法可以访问该类定义所在作用域的数据,包括被private修饰的私有数据
(3)内部类可以很好的实现隐藏(隐藏主要针对的是对同一包中的其他类而言的)
(4)当我们想要定义一个回调函数却不想写大量代码的时候我们可以选择匿名内部类来实现(这个我感觉可有可无)

现在举例解释这几大作用:
(参考了java内部类的四大作用 讲的真好!)

(1)内部类可以实现多重继承,解决java单继承的缺陷(经常配合接口使用)
下面例子里用在Wai类里内部类Nei1和内部类Nei2分别继承了Father1和Father2,这样Wai就有了Father1和Father2里的方法和属性,相当于间接让Wai实现了多继承

在这里插入图片描述

(2)内部类方法可以访问该类定义所在作用域的数据,包括被private修饰的私有数据
为什么可以访问:

内部类虽然和外部类写在同一个文件中, 但是编译完成后, 还是生成各自的class文件,内部类通过this访问外部类的成员。

1 编译器自动为内部类添加一个成员变量, 这个成员变量的类型和外部类的类型相同, 这个成员变量就是指向外部类对象(this)的引用;

2 编译器自动为内部类的构造方法添加一个参数, 参数的类型是外部类的类型, 在构造方法内部使用这个参数为内部类中添加的成员变量赋值;

3 在调用内部类的构造函数初始化内部类对象时,会默认传入外部类的引用。

编译指令 javac classpath(.java文件的路径)
反编译指令 javap -v(详细信息) classpath(.class文件的路径)

(3)内部类可以很好的实现隐藏(隐藏主要针对的是对同一包中的其他类而言的)
关于内部类的第二个好处其实很显而易见,我们都知道外部类即普通的类不能使用 private protected 访问权限符来修饰的,而内部类则可以使用 private 和 protected 来修饰。当我们使用 private 来修饰内部类的时候这个类就对外隐藏了。这看起来没什么作用,但是当内部类实现某个接口的时候,在进行向上转型,对外部来说,就完全隐藏了接口的实现了

接口

public interface InnerInterface {

    void innerMethod();

}

具体类

/**
 * 实现信息隐藏
 */
public class OuterClass {

    /**
     * private修饰内部类,实现信息隐藏
     */
    private class InnerClass implements InnerInterface {

        @Override
        public void innerMethod() {
            System.out.println("实现内部类隐藏");
        }

    }

    public InnerInterface getInner() {

        return new InnerClass();

    }

}

测试Test

public class Test {

    public static void main(String[] args) {

        OuterClass outerClass = new OuterClass();

        InnerInterface inner = outerClass.getInner();

        inner.innerMethod();

    }

}
------------------
Output:
实现内部类隐藏

从这段代码里面只知道OuterClass的getInner()方法能返回一个InnerInterface接口实例但我并不知道这个实例是这么实现的。

而且由于InnerClass是private的,所以我们如果不看代码的话根本看不到这个具体类的名字,所以说它可以很好的实现隐藏。

(4)当我们想要定义一个回调函数却不想写大量代码的时候我们可以选择匿名内部类来实现
关于匿名内部类相信大家都不陌生,我们常见的点击事件的写法就是这样的:
不用再去实现OnClickListener对象了。

    view.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(){
            // ... do XXX...
        }
    })

后话

这只是我学习java的笔记,如有不全面或者讲错的地方,欢迎大家指正,我会及时查看以及修改,谢谢大家

【OpenClaw从入门到精通】第41篇:2026年4月最新版——从零开始搭建你的第一个安全AI助理(保姆级实战教程) 2026年3月CNCERT联合发布《OpenClaw安全使用实践指南》后,安全部署成为OpenClaw使用的核心前提。本文针对新手及进阶用户,基于官方安全指引,提供三套实战部署方案:阿里云一键部署(新手首选)、Docker容器隔离部署(进阶推荐)、本地安全安装(测试专用),并详解阿里云百炼Coding Plan API接入流程。全文涵盖环境准备、分步实操、安全加固、问题排查等全流程,所有命令可直接复制执行,无需依赖外部代码库。通过本文,读者可零基础搭建安全隔离的OpenClaw AI助理,兼顾实用性与安全性 阅读详情

相关推荐

DIY音频必备:手把手教你用AB类功放模块打造高保真桌面音响(含电路图)

本文详细指导如何利用AB类功放模块DIY高保真桌面音响,涵盖选型指南、核心元器件清单、电路搭建与焊接工艺,以及系统调试与音质优化技巧。AB类功放以其接近A类功放的音质和B类功放的效率,成为音频爱好者的理想选择,适合有一定电子基础的实践者。

weixin_42665725的博客 445

java 内部类 学习笔记

java 内部类 学习笔记

dafsq的博客 251

VS2019+CAXACAD2023二次开发教程(一、环境搭建)

CAXACAD2023的二次开发相关文件和库都在的文件夹下。CAXACAD2023的默认开发环境是VS2019,如果是用VS2019的环境话,可以直接安装这个插件,安装好后就可以一键新建的项目,新建的项目会自动帮我们配置好所有的环境,并且生成必要的代码和初始的框架。(本来想用VS2022的,但配置环境太麻烦,用VS2022,增加一个环境变量是可以运行自带的例程的,但新建项目要配置的东西和环境太多,就放弃折腾了)

weixin_42968757的博客 4624

【Java学习笔记】42 - 内部类(难点,重点)

一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。是我们类的第五大成员,内部类最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系类的五大成员是哪些?属性 方法 构造器 代码块 内部类基本语法public class InnerClass01 {//外部其他类class Outer{//外部类System.out.println("代码块");

qq_41891655的博客 376

VS2019 从零构建 OSG+OSGEarth+OSGQt 开发环境实战指南

本文提供了一份详细的实战指南,指导开发者如何在Windows系统下使用VS2019从零开始编译和配置OSG、OSGEarth与OSGQt开发环境。文章涵盖了从环境准备、源码获取、CMake配置、Visual Studio编译到最终测试的完整流程,并分享了关键的避坑技巧,旨在帮助三维GIS与可视化开发者高效搭建稳定、可控的专业开发平台。

weixin_28826961的博客 368

Vue3 - 详解实现网站接入微信扫码登录功能,微信授权生成登录二维码用户用手机扫描二维码登陆,微信扫描二维码登录详细流程及示例代码,支持弹框式、浏览器单独新开页显示,最新vue集成微信扫码授权登录!

vue3,nuxt3,PC网站,网页,微信扫码登录,微信登陆,vue3微信扫码登录,获取个人信息,扫码登录后如何获取用户手机号,微信扫码授权登录,vue3详细实现微信扫一扫登陆,pc网页微信登录,vue3集成微信扫码登录,详细流程和示例源码,第三方扫码登录,vue3微信扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,微信扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描微信二维码登录网站,最好用的插件,vue-wxlo

🏆 前端领域优质创作者 1万+

Java--内部类学习笔记

本文介绍了什么是内部类,Java中的内部类:实例内部类. 静态内部类.局部内部类.匿名内部类的语法和注意事项,以及每个内部类的运用场景,以及简单介绍了匿名内部类更简洁更特殊的语法->lambda表达式

记录并分享学习编程时的知识点... 2913

Deepfake检测模型-PyDeepFakeDet项目复现实验报告-深度学习

该实验是对于https://github.com/wangjk666/PyDeepFakeDet模型的复现。PyDeepFakeDet 是一款集成的、可扩展的 Deepfake 检测工具。目标是提供最先进的 Deepfake 检测模型以及用于在常用 Deepfake 数据集上训练和评估新模型的接口。

一位不是很硕的鉴伪方向硕士 5495

Java内部类笔记

内部类 一个类内部又完整的嵌套了一个类 内部类最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系 定义在外部类的局部位置(大部分是方法)上: 局部内部类 可以访问外部类的私有成员(包括属性和方法) 不能使用访问修饰符,但是可以用final修饰 作用域仅仅在包含它的方法或结构体中 外部类在方法中可以创建内部类的对象实例,调用含有的方法 外部其他类不能访问局部内部类,内部类的地位是局部变量 如果外部类和局部内部类的成员重名是,访问时遵循就近原则,如果想访问外部类的成员,

Abdul_DD的博客 194

搞定ESD(九):静电放电之PCB设计

不同信号参考地平面应尽量保持完整,减小静电电流流过参考地平面时造成的电位差,防止电位差导致的信号传输电平错误.主芯片GPIO信号布线应保持最短化,减小与参考地平面之间的电场耦合,同时也防止因信号环路面积较大耦合静电放电噪声干扰。外部端子接地引脚顶层采用分地设计,最好是直接过孔到完整参考地平面接地,避免与顶层信号包地、其它包地相连,防止顶层串扰耦合到其它信号,造成ESD问题。

记得诚 1952

前端使用二开Thingsboard一、二、三事(四)-部件库

以项目实战为基础,逐步介绍前端在thingsboard系统二次开发中的一些注意事项以及一些thingsboard一些页面功能讲解,为前端人员开发使用thingsboard提供一种可靠思路,打造一个完美的物联网系统。

weixin_43163457的博客 741

Java笔记——内部类

成员内部类 内部类存在的原因 成员内部类 关于成员内部类产生对象的两种方式 私有内部类 静态内部类 Lambda表达式

m0_61608447的博客 333

YOLOv8性能提升:引入华为GhostNetv1特征提取网络

本文提出一种轻量化改进方案,将GhostNetV1作为YOLOv8的主干网络,以提升移动端部署效率。通过Ghost模块的两步特征生成机制(初级卷积+廉价操作),显著降低了30%的计算量(FLOPs)和参数量,精度损失控制在1%以内。实验表明,改进后的模型在骁龙865芯片上推理速度提升25%。核心创新包括:1)用GhostBottleneck替换CSP模块;2)保留FPN+PAN结构确保多尺度检测能力;3)提供完整的PyTorch实现方案。该工作为资源受限场景的目标检测提供了实用解决方案,未来可结合注意力机制

shrgegrb的博客 1181

Java的匿名内部类详细解读

**# 一、匿名内部类的定义 最本质的还是一个类 是一个内部类(有关内部类的内容不在这里讲述了) 该类没有名字(但是系统会分配一个代号在内存中) 二、匿名内部类的应用场景 假设我们有一个接口A 内部有一个未被实现的方法eat 如果我们想在main中直接调用eat方法 则按照传统思路需要一个类B来实现接口A,同时再创建类B的对象来调用A 代码如下: public class Interface01 { public static void main(String[] args) {

xueyukun1的博客 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java内部类详细介绍

一、什么是内部类? 可以将一个类的定义放在里另一个类的内部,这就是内部类。广义上我们将内部类分为四种:成员内部类、静态内部类、局部(方法)内部类、匿名内部类。 public class Outer{ /** * 我是一个内部类 */ class Inner{ //... } } 二、为什么要用内部类? 使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。——《Think in java》 也就是说内部类拥

weixin_37962206的博客 2207

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

看到如此详细的Java内部类,我泪目了

本文详细介绍了Java内部类:成员内部类、局部内部类、匿名内部类和静态内部类的介绍和使用;并举例说明。欢迎讨论交流!

一入大数据深似海?别怕!“数据极客圈”就是你的救生圈,走对圈子跟对人,趣析数据、畅聊趋势,快进圈子! 1698

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java内部类(超级详细)

自定义函数接口,只需要编写一个只有一个抽象方法的接口即可。csharp复制代码// 自定义函数接口 @FunctionalInterface //这个注解是可选的,但加上该标注编译器会帮你检查接口是否符合函数接口规范。// 使用自定义函数接口书写Lambda表达式 } }*需要注意的是:*

BASK2312的博客 446

Java 内部类学习笔记

内部类是Java中一个强大的特性,能够帮助开发者实现更灵活的类设计和代码组织。通过合理使用内部类,可以解决多重继承问题、提高代码的封装性和可读性。但在实际开发中,应避免滥用内部类,以免增加代码的复杂度和维护成本。

2301_78498098的博客 1508

Java内部类(超详细)

内部类就是在一个类或方法中定义的类。内部类又分为成员内部类,静态内部类,匿名内部类和局部内部类。 成员内部类是定义在类的内部,作为类的成员的类。 特点如下: 内部类可以直接访问外部类的

m0_63785629的博客 4911

Java内部类 (详细讲述java内部类)

深入浅出讲述java内部类以及使用。。。。

weixin_45185267的博客 1万+

Java内部类详细教程

内部类(Inner Class)是定义在另一个类内部的类。在Java中,内部类是一个强大的特性,它允许你将逻辑相关的类组织在一起,提供更好的封装性和代码组织结构。内部类的基本语法: 1.2 为什么需要内部类 逻辑分组: 当一个类只对另一个类有用时,将其作为内部类是合理的 增强封装: 内部类可以访问外部类的私有成员 提高可读性和可维护性: 将小的类放在使用它们的地方附近 实现多重继承: Java通过内部类可以间接实现多重继承 1.3 内部类的分类 Java中有四种类型的内部类:成员内部类是最常见的内部类类

yk_dflkg的博客 1290

Java基础巩固——内部类(静态内部类,局部内部类,匿名内部类)详细讲解

(也叫嵌套类)

Future_yzx的博客 1238

正儿八经的详细讲java内部类

咳咳咳!!!!! 博主真的是正儿八经的人,但是是不是正儿八经的讲就不知道了 目录: 1.成员内部类 2.局部内部类 3.匿名内部类 4.静态内部类 5.内部类的优点 1.成员内部类: (1).定义在类的内部,成员位置上的非静态类 例子: package untl1; public class outer { private static int a = 1; priva...

记录博主学到的点滴 1470

Java内部类:静态内部类和普通内部类的区别, 最详细版

在Java中,内部类是指嵌套在其他类中的类。与外部类不同,内部类可以访问外部类的私有变量和方法,并且可以对外部类进行更细粒度的封装。Java内部类可以分为静态内部类和普通内部类。

grandachn的博客 2353

Java基础内部类学习笔记

Java基础内部类学习笔记一.什么是内部类?二.内部类的分类1.局部内部类2.匿名内部类(很重要)3.成员内部类4.静态内部类 一.什么是内部类? 一个类的内部嵌套了另一个类,这个类叫内部类,是类的第五大成员(属性,方法,构造器,代码块,内部类)。 内部类最大的特点就是可以直接访问私有属性,它本质上还是一个类。 基本语法: public class Localinner { //外部其他类 public static void main(String[] args) { } } clas

cc1373709409的博客 711

java 访问内部类的属性_java中的内部类详细总结

内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动)显然,此处不能单方面用属性或者方法表示一个心脏,而需要一个类而心脏又在人体当中,正如同是内部类在外部内当中实例1:内部类的基本结构//外部类class Out {private int age = 12;//内...

weixin_30000407的博客 1433
上一篇: 期末操作系统思维导图 (计算机操作系统第四版)| 操作系统
下一篇: java 继承、多态、抽象类与接口笔记(超级详细!) | java
LLLLQZ
博客等级 码龄7年 308粉丝 51原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值