Java 面向对象编程 (OOP): 之对象

Java面向对象编程(OOP)全面解析:从基础到实践 面向对象编程(Object-Oriented Programming, OOP)是现代软件开发的核心范式,而Java作为一门纯面向对象的语言,其设计哲学与OOP理念高度契合。本文将全面剖析Java中的面向对象编程,从基础概念到高级特性,帮助开发者深入理解并掌握这一强大的编程范式。 阅读详情

一、对象的定义 (Object Definition)

在 Java 中,对象是类的具体实例。如果将类比作蓝图或模板,那么对象就是根据这个蓝图创建出来的实体。每个对象都拥有:

  1. 状态 (State):

    • 对象的状态由其属性 (Attributes) 或字段 (Fields) 的值决定。
    • 这些属性是类中定义的成员变量。
    • 每个对象都有自己独立的属性值,这些值存储在对象的内存空间中。
  2. 行为 (Behavior):

    • 对象的行为由其方法 (Methods) 定义。
    • 方法是类中定义的函数,用于操作对象的状态或执行与对象相关的操作。
    • 方法可以访问和修改对象的属性。
  3. 标识 (Identity):

    • 每个对象都有一个唯一的标识,用于区分不同的对象。
    • 在 Java 中,对象的标识通常由其内存地址决定(开发者通常不需要直接操作内存地址)。
    • 可以使用 == 运算符比较两个对象的引用是否指向同一个对象(即标识是否相同)。

二、对象的创建 (Object Creation)

在 Java 中,使用 new 关键字和类的构造方法来创建对象。

  1. new 关键字:

    • new 关键字在堆内存中为对象分配空间。
    • new 关键字会调用类的构造方法来初始化对象。
  2. 构造方法 (Constructor):

    • 构造方法是类中一种特殊的方法,用于创建和初始化对象。
    • 构造方法与类同名,没有返回类型(甚至没有 void)。
    • 构造方法可以有参数,也可以没有参数(无参构造方法)。
    • 如果一个类没有显式定义构造方法,Java 编译器会自动提供一个默认的无参构造方法。
    • 如果一个类显式定义了构造方法(无论是否有参),Java 编译器 不会 再提供默认的无参构造方法。
  3. 创建对象的步骤:

    1. 分配内存: new 关键字在堆内存中为对象分配空间。
    2. 初始化成员变量: 对象的成员变量会被初始化为默认值(例如,int 类型为 0,boolean 类型为 false,引用类型为 null)。
    3. 调用构造方法: 调用类的构造方法,执行构造方法中的代码,进一步初始化对象(例如,为成员变量赋初始值)。
    4. 返回对象引用: new 表达式返回新创建对象的引用(内存地址)。
  4. 代码示例:

    // 定义一个 Person 类
    class Person {
        String name;
        int age;
    
        // 构造方法
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }
    
    public class ObjectCreationExample {
        public static void main(String[] args) {
            // 创建 Person 对象
            Person person1 = new Person("Alice", 30); // 使用 new 关键字和构造方法
    
            // person1 是一个引用变量,它存储了新创建的 Person 对象的内存地址
            System.out.println(person1.name); // 输出 "Alice"
            System.out.println(person1.age);  // 输出 "30"
        }
    }
    

三、对象的使用 (Object Usage)

创建对象后,可以通过对象的引用来访问对象的属性和调用对象的方法。

  1. 访问属性:

    • 使用点号 (.) 运算符访问对象的属性(如果属性是 public 的,或者在同一个包内且属性是 protected 或默认访问权限,或者在子类中且属性是 protected 的,或者有 getter 方法)。
    • 通常,会将属性声明为 private,并通过 getter 和 setter 方法提供对属性的受控访问(封装)。
  2. 调用方法:

    • 使用点号 (.) 运算符调用对象的方法。
    • 方法的调用会执行方法体中的代码,可能会修改对象的状态或返回一个值。
  3. 对象作为参数:

    • 对象可以作为参数传递给方法。
    • 在 Java 中,对象是通过引用传递的。这意味着,在方法内部修改对象的属性,会影响到方法外部的对象。
  4. 对象作为返回值:

    • 方法可以返回一个对象。
  5. 对象数组:

  • 可以创建对象数组, 存储和管理一组相关的对象。
  1. 代码示例
    //接上一个代码示例
       public class ObjectUsageExample {
        public static void main(String[] args) {
            Person person1 = new Person("Alice", 30);
    
            // 访问属性 (假设 name 和 age 是 public 的,或者有 getter 方法)
            System.out.println(person1.name);
            System.out.println(person1.age);
    
            // 调用方法
            person1.eat("pizza"); // 假设 Person 类有 eat() 方法
    
            // 对象作为参数
            printPersonInfo(person1);
    
            // 对象作为返回值
            Person person2 = createPerson("Bob", 25);
            
              //对象数组
             Person[] people = new Person[2];
             people[0] = person1;
             people[1] = person2;
        }
    
        // 对象作为参数
        public static void printPersonInfo(Person person) {
            System.out.println("Name: " + person.name + ", Age: " + person.age);
        }
    
        // 对象作为返回值
        public static Person createPerson(String name, int age) {
            return new Person(name, age);
        }
    }
    

四、对象的生命周期 (Object Lifecycle)

对象的生命周期包括以下几个阶段:

  1. 创建 (Creation): 使用 new 关键字和构造方法创建对象。
  2. 使用 (Use): 通过对象的引用访问对象的属性和调用对象的方法。
  3. 不可达 (Unreachable): 当没有任何引用变量指向对象时,对象变为不可达。
  4. 垃圾回收 (Garbage Collection): Java 虚拟机 (JVM) 的垃圾回收器会自动回收不可达对象的内存空间。
  5. 销毁 (Destruction): 对象占用的内存被释放。 (注意, Java中没有析构函数)

五、对象的内存管理 (Memory Management)

  1. 堆内存 (Heap): 对象存储在堆内存中。
  2. 垃圾回收 (Garbage Collection): Java 虚拟机 (JVM) 自动管理内存,通过垃圾回收器 (Garbage Collector, GC) 自动回收不再使用的对象。
  3. 引用类型:
    • 强引用 (Strong Reference): 最常见的引用类型。只要存在强引用,对象就不会被垃圾回收。
    • 软引用 (SoftReference): 用于描述一些还有用但非必需的对象。在内存不足时,垃圾回收器可能会回收软引用指向的对象。
    • 弱引用 (WeakReference): 比软引用更弱,只要发生垃圾回收,弱引用指向的对象就会被回收。
    • 虚引用 (PhantomReference): 最弱的引用类型,无法通过虚引用获取对象。虚引用主要用于跟踪对象被垃圾回收的状态。

六、对象的使用场景

对象是面向对象编程的核心,几乎所有的 Java 程序都会使用对象。 以下是一些典型的使用场景:

  1. 表示现实世界的实体: 如前所述,对象可以用来表示现实世界中的各种事物,例如人、动物、汽车、订单、商品、账户等。

  2. 封装数据和行为: 对象将数据(属性)和操作数据的方法(行为)封装在一起,形成一个独立的单元。这有助于提高代码的可维护性、可重用性和安全性。

  3. 实现业务逻辑: 通过创建和操作对象,可以实现复杂的业务逻辑。

  4. 构建数据结构: 对象可以用来构建各种数据结构,例如链表、树、图等。

  5. 作为方法的参数和返回值: 对象可以作为方法的参数传递,也可以作为方法的返回值。

  6. 集合框架中的元素: Java 集合框架(例如 List, Set, Map)中存储的元素都是对象。

  7. GUI 编程中的组件: 在 GUI 编程中,各种 UI 组件(例如按钮、文本框、标签等)都是对象。

  8. Web 开发中的请求和响应: 在 Web 开发中,HTTP 请求和响应通常被封装成对象(例如 HttpServletRequest, HttpServletResponse)。

  9. 数据库操作中的实体: 在使用 ORM 框架(例如 Hibernate, JPA)时,数据库表中的记录通常被映射为 Java 对象。

  10. 事件处理: 事件源、事件监听器和事件对象通常都是对象。

七、 最佳实践

  1. 面向对象设计原则: 在创建和使用对象时,遵循 SOLID 原则(单一职责、开闭、里氏替换、接口隔离、依赖倒置)。
  2. 封装: 将对象的属性声明为 private,并通过 getter 和 setter 方法提供对属性的受控访问。
  3. 不可变对象 (Immutable Objects): 如果对象的状态不需要改变,可以将对象设计为不可变对象。不可变对象是线程安全的,可以简化并发编程。
  4. 对象比较: 使用 equals() 方法比较对象的内容是否相等,而不是使用 == 运算符比较对象的引用是否相等。 重写equals方法时,通常也需要重写hashCode方法。
  5. 对象克隆: 如果需要创建对象的副本,可以使用 clone() 方法(需要实现 Cloneable 接口)或复制构造函数。
  6. 避免内存泄漏: 及时释放不再使用的对象引用,避免内存泄漏。 特别注意集合类中的对象引用, 以及ThreadLocal中的对象引用。
  7. 合理使用对象池: 对于创建和销毁开销较大的对象 (例如数据库连接),可以使用对象池来重用对象,提高性能。

总结

对象是 Java 面向对象编程的核心概念,它是类的实例,具有状态、行为和标识。 理解对象的定义、创建、使用、生命周期、内存管理以及使用场景,对于编写高质量的 Java 代码至关重要。 通过合理地创建和使用对象,可以构建出结构清晰、易于维护和扩展的应用程序。

面向对象编程(OOP):深入探索与Java实践 面向对象编程(OOP)是一种编程范式,它将现实世界中的实体抽象为对象,通过对象之间的交互来设计和构建软件系统。OOP的核心原则包括封装、继承、多态和抽象。这些原则不仅帮助我们组织和管理代码,还提高了代码的可重用性、可维护性和可扩展性。本文将深入讲解这些原则,并展示如何在Java中应用它们。 阅读详情

相关推荐

Java中创建对象的方式

使用对象克隆:通过调用对象的 clone() 方法可以创建对象的副本。要使用克隆方式创建对象,需要实现 Cloneable 接口,并重写 clone() 方法。使用反射机制:使用 Java 的反射机制可以在运行时动态地创建对象。通过获取类的 Class 对象,可以调用其构造方法来创建对象。通常情况下,使用 new 关键字创建对象是最常见和简单的方式。使用静态工厂方法:有些类提供了静态工厂方法来创建对象。使用 new 关键字:使用 new 关键字后面跟随类名和参数列表,调用类的构造方法来创建对象。

舒一笑的博客 434

Java 对象

Java对象是Java语言中最重要的概念之一,它允许开发人员将数据和方法组合在一起,创建具有自己行为和状态的实体。本文将详细介绍Java对象的概念、特性以及在实际工作中的应用。

笔记 3250

Java面向对象编程实践教程:OOP-HW1

在Java语言中,类是一种用于描述具有相同属性和行为的对象的抽象和模板。它是一个结构体,可以包含不同类型的变量、方法、构造器和其他类型(例如内部类、枚举和注解)。一个类的结构通常包括类头和类体两部分。类头包含类的修饰符、类名以及类所实现的接口或继承的父类。类体则包含成员变量和成员方法的定义。成员变量可以是任何类型的变量,它们是类的属性。成员方法定义了类的行为,可以实现具体的功能。// 成员变量// 成员方法// 方法体在上述代码中,定义了一个包含私有成员变量和公开成员方法。

weixin_42610671的博客 744

java中的对象

一、对象概念 1.对象是由我们自己定义的类来创建出来的。 2.对象实际上就是类的具体实现。 例如:修建大楼时绘制的设计图纸就是类,根据设计图纸修建起来的真实的可以住人的 大楼就是对象。 类--抽象【抽取象什么一样的东西】--模板【设计图】 对象--实现--实例【楼房】 3.没有类就没有对象 4.一个类可以创建出多个对象 5.类是对象的模板,对象是类的真实表现 对象的作用...

slom_fxt的博客 5187

掌握Java OOP:从PacMan游戏看面向对象编程

本文通过深入分析PacMan游戏的Java实现,揭示了面向对象编程(OOP)的核心概念,包括继承、多态和封装。详细探讨了游戏中的实体类如PacMan和Ghost的实现,以及如何在游戏循环中使用多态性来调用相应的方法。此外,还提到了一些额外的游戏功能实现,如PacMan吃下大药丸后改变游戏模式的挑战。

weixin_31749299的博客 340

基于VS2012 C#调用bartender自动打印条形码

GitHub:https://github.com/sanjaywu/BarcodePrintTool 一、在引用添加Interop.BarTender.dll 1、在资源解决方案的引用这里,右击选择“添加引用”: 2、按照如下步骤添加Interop.BarTender.dll引用: 3、添加完成 二、使用bartender工具设置打印模板 1、页面大小设置: 2、条码设置: 三、代码...

Sanjay_Wu的博客 5955

【Java】类和对象详解!!!

对象:真实存在的一个实体。在java中,一切事物皆为对象对象与对象之间相互协作来完成,注重的是对象。例如,用洗衣机洗衣服,人只要放入衣服-->倒入洗衣液-->选择模式,启动洗衣机人、衣服、洗衣液、洗衣机四个对象相互协作完成就好。注重的是对象之间的相互协作。面向过程:注重的是过程例如,我们自己洗衣服,放衣服到盆里,装水-->将衣服浸湿,使用洗衣服,揉搓>放入水中-->拧干-->放入水中-->拧干这个过程我们注重的是过程类:对一个对象的描述。描述对象的属性(尺寸,颜色、型号)和功能。比如:一瓶水。

2301_80543957的博客 5740

把STM32MP135当单片机玩:实战SD卡脱机运行LED程序(基于MP135DK开发板)

本文详细介绍了如何在STM32MP135开发板上实现SD卡脱机运行LED程序,通过裸机开发方式(Bare Metal)利用HAL库完成GPIO控制,并解析了SD卡启动流程。内容涵盖工程创建、代码编写、SD卡烧录及常见问题排查,为开发者提供了一种高性能单片机开发方案。

weixin_33734785的博客 242

Java中的对象

java中的对象

z972065491的博客 7812

【IxNetwork】史上最全IxNetwork测试仪使用精讲(一),图文教程超赞超详细!!!

IXIA使用的是Server-client模式,Server端在测试仪表的主机上,在开机后会随着主机内的操作系统的启动而自动启动,一般情况下不需要人为的手工启动。因此在通常不需要为主机配置专用的显示器和键盘。client端包括两个测试软件: Ixia Explorer和ScriptMate。这两个软件一般安装在测试用计算机上,在仪表自带的主机中也有这两个软件。根据测试项目的不同来选择使用不同的软件。Ixia Explorer主要提供数据流的测试,针对设备的功能进行测试;

风云说通信 2053

深度解析电力负荷预测:基于深度学习的完整实战指南

电力负荷预测是智能电网运行中的核心技术之一,准确的负荷预测对于电网的稳定运行、电力市场交易以及能源调度具有重要意义。本文将详细介绍电力负荷预测的完整解决方案,从数据预处理、特征工程到模型构建与评估,提供完整的可执行代码。我们将使用LSTM(长短期记忆网络)和Transformer两种主流深度学习模型进行实现,并通过实际数据集验证模型效果。电力负荷预测是指根据历史负荷数据、气象因素、时间特征等多维信息,预测未来某一时段的电力需求。超短期负荷预测:未来几分钟到几小时短期负荷预测:未来1天到1周中期负荷预测。

YOLO 111

面向对象编程(OOP):Java 的核心思想(详细笔记)

面向对象编程(Object-Oriented Programming,OOP)是Java的核心设计思想,它将现实世界中的“事物”抽象为“对象”,通过“类”定义对象的共性,以“封装、继承、多态”三大特性实现代码的可复用、可维护、可扩展。核心逻辑:将问题拆解为“对象”,通过对象之间的“交互”完成功能,而非像“面向过程”那样按步骤编写指令。**对象(Object)**是程序的基本单元,它是对现实世界中具体实体的抽象和模拟。

weixin_70530563的博客 1188

WPF实现圆形菜单动态展开折叠效果

实现效果如下: 思路:根据子菜单个数计算旋转角度动态生成子菜单,并设置展开折叠动画。 步骤: 1、自定义按钮MyButton,建立展示图像属性DisplayImage public class MyButton : Button { public static readonly DependencyProperty DisplayImageProperty = DependencyProperty.Register("DisplayImage", typeof(

dnazhd的博客 3149

oop面向对象编程_Java中的面向对象编程原理:面向初学者的OOP概念

oop面向对象编程Object-oriented programming offers a sustainable way to write spaghetti code. It lets you accrete programs as a series of patches.― Paul Graham 面向对象的编程提供了一种可持续的方式来编写意大利面条式代码。 它使您可以将程序作为一系列补丁来...

cumian8165的博客 5344

WPF+MVVM案例实战(一)- 设备状态LED灯变化实现

采用WPF+MVVM框架实现,MVVM框架使用CommunityToolkit.Mvvm 依赖包,代码案例部署了三个LED灯,按照红黄绿三色后台自动刷新状态进行变化,根据后台数据不同,UI层显示不同颜色。

lingshuangcanxue 1381

UNET改进77:全网首发-添加CFBlock |

本文介绍了在UNet模型中集成CFBlock注意力机制的实现方法。主要分为三个步骤:1) 创建CFBlock模块,包含卷积注意力机制和MLP;2) 在UNet连接处添加注意力模块;3) 在卷积层中嵌入注意力机制。具体实现包括:定义Conv、MLP和ConvolutionalAttention等基础模块,构建CFBlock核心结构;在UNet跳跃连接处插入注意力模块;将注意力机制整合到DoubleConv和Down模块中。该方法通过在不同位置引入注意力机制,可有效提升模型的特征提取能力。代码实现使用PyTor

AIcurator的博客 388

Java面向对象编程(OOP):概念、特性与应用

Java面向对象概述

qq_62552203的博客 2487

灰度图像采集显示

灰度图像采集显示 在FPGA内部,采集到的视频数据线通过一个FIFO,将原本与25MHZ时钟同步的数据流转换到FPGA内部50MHZ的时钟。接着将这个数据再送入写DDR3缓存的异步FIFO中,这个FIFO中的数据一旦达到一定数量,就会被写入DDR3中。于此同时,使用另一异步FIFO缓存从DDR3读出的图像数据;LCD驱动模块不断地发出读图像数据请求给到这个FIFO,从中读取图像数据并送给VGA显示器进行实时图像的显示。 ...

小柚子的博客 484

Java中的面向对象编程(OOP)基础:通俗易懂的入门指南

面向对象编程(OOP)是一种编程范式,它将现实世界中的事物抽象为“对象”,并通过对象之间的交互来解决问题。与面向过程的编程不同,OOP更注重对象的设计和它们之间的关系。在Java中,一切皆对象。你可以把对象看作是现实世界中的实体,比如一个人、一辆车、一本书等。每个对象都有自己的属性(状态)和行为(方法)。通过将数据和操作数据的方法封装在一起,OOP使得代码更加模块化、可重用和易于维护。抽象是指将复杂的现实世界简化为模型,只关注与问题相关的部分。在Java中,抽象可以通过抽象类和接口来实现。抽象类。

Yi_An_Jie的博客 228

深度学习工具包 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")

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java面向对象编程:用菜系来理解OOP

面向对象编程(OOP)是一种编程范式,它通过将数据和操作数据的方法封装在对象中来模拟现实世界。Java是一种完全支持OOP的语言,它提供了丰富的特性来实现OOP的概念。在这篇文章中,我们将通过一个菜系的例子来详细解释OOP的核心概念,并展示如何在Java中实现这些概念。

xinyuerti的博客 905

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java面向对象编程:揭开OOP的神秘面纱

以上就是我对Java面向对象编程的理解。OOP是一种强大的工具,它让我们能够以一种更自然、更模块化的方式来构建软件。通过类和对象,我们可以将现实世界的复杂性映射到代码中,使得代码更加清晰、易于维护和扩展。Java作为一门支持OOP的语言,提供了丰富的特性来支持这种编程方式。通过封装、继承、多态、抽象、组合和聚合等概念,我们可以构建出复杂而灵活的软件系统。同时,通过访问修饰符和构造方法,我们可以控制对象的访问和初始化。OOP不仅仅是一种编程范式,更是一种思考问题的方式。

m0_75062447的博客 701

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java 面向对象编程 (OOP):类与对象

Java 面向对象、Java类与对象、JavaBean

zeijiershuai的博客 747

Java小白入门:面向对象编程(OOP)轻松学

面向对象编程是一种强大的编程范式,它帮助我们将现实世界的问题转化为代码中的对象和交互。通过学习封装继承和多态这三大特性,你可以更好地理解和使用Java进行编程。记住,编程是一个不断学习和实践的过程,不要害怕犯错,大胆尝试吧!

2301_78169197的博客 990

Java基础:Java面向对象编程(OOP)之【类与对象】

本文介绍了Java面向对象编程的核心概念——类与对象。首先对比了面向过程与面向对象编程的区别,并阐述了OOP的四大特性(封装、继承、多态、抽象)。重点讲解了如何定义类(作为对象的模板)和创建对象实例,通过学生类示例展示了属性定义、方法声明和对象实例化的过程。文章还比较了成员变量与局部变量的区别,详细说明了构造方法的作用和使用技巧,包括默认构造方法、自定义构造方法以及this关键字的应用。最后指出了初学者常见误区,并提供了汽车类定义的练习题目。全文采用代码示例和表格对比的方式,帮助读者深入理解面向对象编程的基

lzq617789的博客 518

Java的魔法世界:面向对象编程(OOP)是什么?

java面向对象

m0_63141213的博客 1119

Java面向对象编程1:初识面向对象OOP

Java面向对象编程1:初识面向对象OOP

sunyusong666的博客 128
上一篇: Java 单例模式 (Singleton)
下一篇: 为什么需要工厂模式
冰糖心书房
博客等级 码龄15年 6014粉丝 690原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值