JavaSE--方法与变量

Unity UI Toolkit避坑指南:从官方Samples到实际项目,这些‘坑’我帮你踩过了 本文分享了Unity UI Toolkit在实际项目中的避坑经验和优化技巧,包括动画系统的高效替代方案、3D世界UI的创新实现方式、USS样式继承的反直觉规则等。通过详细的代码示例和性能优化策略,帮助开发者避免常见陷阱,提升开发效率。 阅读详情

一、类的结构组成

在Java中,一个完整的类通常包含以下组成部分:

public class Person {
    // 1. 属性(成员变量/字段)
    private String name;    // 姓名
    private double height;  // 身高
    private int age;        // 年龄
    
    // 2. 方法(成员方法/行为)
    public void speak() {
        System.out.println(name + "正在说话");
    }
    
    public void run() {
        System.out.println(name + "正在跑步");
    }
    
    public int calculate(int a, int b) {
        return a + b;
    }
}

二、方法详解

1. 方法的基本语法

访问修饰符 返回值类型 方法名(参数类型 参数名, 参数类型 参数名, ...) {
    // 方法体
    [return 返回值;]
}

示例代码:

public class Calculator {
    
    // 无返回值方法
    public void printMessage() {
        System.out.println("这是一个计算方法");
    }
    
    // 有返回值方法
    public int sum(int a, int b) {
        return a + b;
    }
    
    // 多个参数的方法
    public double average(double x, double y, double z) {
        return (x + y + z) / 3.0;
    }
}

// 方法调用示例
Calculator calc = new Calculator();
calc.printMessage();            // 调用无返回值方法
int result = calc.sum(5, 3);    // 调用有返回值方法
System.out.println("结果:" + result);

三、构造方法

1. 构造方法的特点

public class Student {
    private String name;
    private int age;
    
    // 1. 无参构造方法(默认提供)
    public Student() {
        System.out.println("无参构造方法被调用");
    }
    
    // 2. 有参构造方法
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("有参构造方法被调用");
    }
    
    // 3. 构造方法重载
    public Student(String name) {
        this(name, 18);  // 默认年龄为18
    }
}

// 使用示例
public class Test {
    public static void main(String[] args) {
        Student s1 = new Student();           // 调用无参构造
        Student s2 = new Student("张三", 20); // 调用有参构造
        Student s3 = new Student("李四");     // 调用重载构造
    }
}

构造方法的注意事项:

  1. 构造方法名必须与类名相同

  2. 构造方法没有返回值类型,连void都不写

  3. 一个类默认有无参构造方法

  4. 如果定义了有参构造,则不再自动生成无参构造

  5. 构造方法可以重载

四、this关键字

1. this的三种用法

public class Person {
    private String name;
    private int age;
    
    // 1. 区分成员变量和局部变量
    public void setName(String name) {
        this.name = name;  // this.name指成员变量,name指参数
    }
    
    // 2. 调用本类其他方法
    public void display() {
        this.showInfo();  // 调用本类的showInfo方法
    }
    
    public void showInfo() {
        System.out.println("姓名:" + name + ",年龄:" + age);
    }
    
    // 3. 调用本类其他构造方法
    public Person() {
        this("未知", 0);  // 调用另一个构造方法
    }
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

五、方法重载(Overload)

1. 为什么要使用方法重载?

不重载的问题:

class Polygon {
    // 每个图形都有独立的计算方法名
    public double getCircleArea(double radius) {
        return Math.PI * radius * radius;
    }
    
    public double getTriangleArea(double base, double height) {
        return 0.5 * base * height;
    }
    
    public double getRectangleArea(double width, double height) {
        return width * height;
    }
    
    public double getTrapezoidArea(double top, double bottom, double height) {
        return (top + bottom) * height / 2;
    }
}

使用方法重载改进:

class ShapeCalculator {
    // 使用方法重载,统一方法名
    public double getArea(double radius) {
        return Math.PI * radius * radius;  // 计算圆面积
    }
    
    public double getArea(double base, double height) {
        return 0.5 * base * height;  // 计算三角形面积
    }
    
    public double getArea(double width, double height, String shape) {
        if ("rectangle".equals(shape)) {
            return width * height;  // 计算矩形面积
        }
        return 0;
    }
    
    public double getArea(double a, double b, double h) {
        return (a + b) * h / 2;  // 计算梯形面积
    }
}

// 使用方法
ShapeCalculator calculator = new ShapeCalculator();
double circleArea = calculator.getArea(5.0);  // 调用计算圆面积的方法
double triangleArea = calculator.getArea(3.0, 4.0);  // 调用计算三角形面积的方法
double rectangleArea = calculator.getArea(3.0, 4.0, "rectangle");  // 调用计算矩形面积的方法

方法重载的规则:

  • 方法名必须相同

  • 参数列表必须不同(类型、个数、顺序至少一个不同)

  • 返回类型可以相同也可以不同

  • 与访问修饰符无关

  • 与异常声明无关

六、值传递 vs 引用传递

1. 值传递(基本数据类型)

public class ValuePassingExample {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        
        System.out.println("交换前:a = " + a + ", b = " + b);
        swap(a, b);
        System.out.println("交换后:a = " + a + ", b = " + b);
    }
    
    public static void swap(int x, int y) {
        int temp = x;
        x = y;
        y = temp;
        System.out.println("方法内交换:x = " + x + ", y = " + y);
    }
}

输出结果:

交换前:a = 10, b = 20
方法内交换:x = 20, y = 10
交换后:a = 10, b = 20

2. 引用传递(引用数据类型)

class Student {
    String name;
    
    public Student(String name) {
        this.name = name;
    }
}

public class ReferencePassingExample {
    public static void main(String[] args) {
        Student stu1 = new Student("张三");
        Student stu2 = new Student("李四");
        
        System.out.println("交换前:stu1.name = " + stu1.name);
        System.out.println("交换前:stu2.name = " + stu2.name);
        
        swapReference(stu1, stu2);
        
        System.out.println("交换后:stu1.name = " + stu1.name);
        System.out.println("交换后:stu2.name = " + stu2.name);
        
        modifyObject(stu1);
        
        System.out.println("修改后:stu1.name = " + stu1.name);
    }
    
    public static void swapReference(Student a, Student b) {
        Student temp = a;
        a = b;
        b = temp;
    }
    
    public static void modifyObject(Student student) {
        student.name = "王五";
    }
}

输出结果:

交换前:stu1.name = 张三
交换前:stu2.name = 李四
交换后:stu1.name = 张三
交换后:stu2.name = 李四
修改后:stu1.name = 王五

核心区别总结:

特性

值传递

引用传递

传递内容​

值的副本

地址的副本

数据类型​

基本数据类型

引用数据类型

修改影响​

不影响原始值

可以修改对象内容

交换影响​

无法交换原始变量

无法交换原始引用

七、局部变量 vs 全局变量

1. 变量作用域示例

public class VariableExample {
    // 全局变量(成员变量)
    private String name = "全局变量";
    private static int count = 0;
    
    public void testMethod() {
        // 局部变量
        String localVar = "局部变量";
        int number = 100;
        
        System.out.println("局部变量:" + localVar);
        System.out.println("局部变量:" + number);
        
        // 可以访问全局变量
        System.out.println("全局变量:" + this.name);
        
        // 局部变量与全局变量同名
        String name = "同名的局部变量";
        System.out.println("局部变量name:" + name);
        System.out.println("全局变量name:" + this.name);
        
        // 代码块中的局部变量
        {
            int blockVar = 200;
            System.out.println("代码块变量:" + blockVar);
        }
        // System.out.println(blockVar);  // 错误!无法访问代码块变量
    }
    
    public void anotherMethod() {
        // 无法访问其他方法的局部变量
        // System.out.println(localVar);  // 编译错误!
        
        // 但可以访问全局变量
        System.out.println("访问全局变量:" + name);
    }
}

2. 变量作用域对比

对比项

全局变量(成员变量)

局部变量

声明位置​

类中,方法外

方法、构造方法或代码块内

作用域​

整个类(除静态方法)

所在的方法或代码块

生命周期​

对象创建到销毁

方法调用到结束

内存位置​

堆内存

栈内存

初始值​

有默认值

必须显式初始化

修饰符​

可以加访问修饰符

不能加访问修饰符

八、static关键字详解

1. 静态变量(类变量)

public class School {
    // 实例变量 - 每个对象独立
    private String studentName;
    private int studentId;
    
    // 静态变量 - 所有对象共享
    public static String schoolName = "清华大学";
    public static int studentCount = 0;
    
    public School(String studentName) {
        this.studentName = studentName;
        this.studentId = ++studentCount;  // 每创建一个学生,计数加1
    }
    
    public void showInfo() {
        System.out.println("学号:" + studentId);
        System.out.println("姓名:" + studentName);
        System.out.println("学校:" + schoolName);
        System.out.println("总人数:" + studentCount);
    }
}

// 使用示例
public class TestSchool {
    public static void main(String[] args) {
        School s1 = new School("张三");
        School s2 = new School("李四");
        School s3 = new School("王五");
        
        s1.showInfo();
        System.out.println("----------------");
        s2.showInfo();
        
        // 通过类名访问静态变量(推荐)
        System.out.println("学校名称:" + School.schoolName);
        
        // 通过对象访问静态变量(不推荐)
        System.out.println("总人数:" + s1.studentCount);
    }
}

2. 静态方法

public class MathUtils {
    // 静态变量
    public static final double PI = 3.1415926;
    
    // 静态方法
    public static int add(int a, int b) {
        return a + b;
    }
    
    public static double circleArea(double radius) {
        return PI * radius * radius;
    }
    
    public static int max(int a, int b, int c) {
        return Math.max(a, Math.max(b, c));
    }
    
    // 实例方法
    public void displayPI() {
        System.out.println("PI的值是:" + PI);
    }
}

// 使用示例
public class TestMath {
    public static void main(String[] args) {
        // 直接通过类名调用静态方法
        int sum = MathUtils.add(5, 3);
        double area = MathUtils.circleArea(2.5);
        int maxValue = MathUtils.max(10, 20, 15);
        
        System.out.println("和:" + sum);
        System.out.println("圆面积:" + area);
        System.out.println("最大值:" + maxValue);
        
        // 实例方法需要通过对象调用
        MathUtils utils = new MathUtils();
        utils.displayPI();
    }
}

3. 静态变量 vs 全局变量对比

特性

静态变量

全局变量(实例变量)

声明方式​

使用static修饰

不使用static修饰

内存位置​

方法区(静态区)

堆内存

加载时机​

类加载时创建

对象创建时创建

访问方式​

类名.变量名(推荐)
对象.变量名

对象.变量名

共享性​

所有对象共享一份

每个对象独享一份

生命周期​

与类共存亡

与对象共存亡

默认值​

有默认值

有默认值

九、综合示例

public class BankAccount {
    // 静态变量
    private static double interestRate = 0.03;  // 年利率
    private static int accountCount = 0;        // 账户总数
    
    // 实例变量
    private String accountNumber;
    private String accountHolder;
    private double balance;
    private final int accountId;
    
    // 构造方法
    public BankAccount(String accountHolder, double initialBalance) {
        this.accountHolder = accountHolder;
        this.balance = initialBalance;
        this.accountId = ++accountCount;  // 自动生成账户ID
        this.accountNumber = generateAccountNumber();
    }
    
    // 静态方法
    public static double calculateInterest(double amount, int years) {
        return amount * Math.pow(1 + interestRate, years) - amount;
    }
    
    public static int getAccountCount() {
        return accountCount;
    }
    
    public static void setInterestRate(double newRate) {
        interestRate = newRate;
    }
    
    // 实例方法
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
            System.out.println("存款成功!当前余额:" + balance);
        }
    }
    
    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
            System.out.println("取款成功!当前余额:" + balance);
        } else {
            System.out.println("取款失败!余额不足。");
        }
    }
    
    public void displayAccountInfo() {
        System.out.println("账户ID:" + accountId);
        System.out.println("账号:" + accountNumber);
        System.out.println("户主:" + accountHolder);
        System.out.println("余额:" + balance);
        System.out.println("年利率:" + (interestRate * 100) + "%");
    }
    
    // 私有方法
    private String generateAccountNumber() {
        return "BANK" + String.format("%08d", accountId);
    }
}

// 测试类
public class TestBank {
    public static void main(String[] args) {
        // 创建账户
        BankAccount account1 = new BankAccount("张三", 1000);
        BankAccount account2 = new BankAccount("李四", 5000);
        
        // 显示账户信息
        account1.displayAccountInfo();
        System.out.println("----------------");
        account2.displayAccountInfo();
        
        // 操作账户
        account1.deposit(500);
        account1.withdraw(200);
        
        // 使用静态方法
        System.out.println("账户总数:" + BankAccount.getAccountCount());
        
        double interest = BankAccount.calculateInterest(10000, 5);
        System.out.println("10000元5年利息:" + interest);
        
        // 修改利率
        BankAccount.setInterestRate(0.035);
        System.out.println("利率已调整");
        
        account1.displayAccountInfo();
    }
}

十、总结与最佳实践

1. 方法设计原则

  • 单一职责原则:一个方法只做一件事

  • 命名规范:方法名使用动词开头,如getXXX(), setXXX(), calculateXXX()

  • 参数数量:尽量保持参数数量在5个以内

  • 方法长度:一个方法不要超过50行

2. 变量使用建议

  • 优先使用局部变量

  • 静态变量用于真正需要共享的数据

  • 常量使用static final修饰

  • 避免过度使用全局变量

3. 构造方法建议

  • 提供有意义的无参构造

  • 通过构造方法确保对象完整性

  • 使用构造方法重载提高灵活性

4. 代码组织技巧

  • 将相关的属性组织在一起

  • 将相关的方法组织在一起

  • 使用合适的访问修饰符

  • 添加必要的注释和文档

通过合理使用方法和变量,可以创建出结构清晰、易于维护的Java程序。掌握这些基础知识是成为优秀Java开发者的第一步。

计算机导论期末知识点及试题总结 [近三万字总结 · 全] 计算机网络:计算机网络是利用通信线路连接起来相互独立的计算机的集合,其主要目的是实现数据通信和资源共享。 计算机病毒:破坏计算机功能或数据,影响计算机使用,并能自我复制的一组计算机指令或程序。 操作系统:操作系统是由程序和数据结构组成的大型系统软件,它负责计算机的全部软硬件的资源分配,调度和管理,控制各类程序的正常执行,并为用户使用计算机提供良好的环境。 高速缓冲储存器(Cache):位于cpu和内存之间的储存器,其特点是速度快,目的是是储存器的速度与cpu的速度相匹配。 总线:若干信号线的集合,是 阅读详情

相关推荐

Scrapy实现微博关键词爬虫(爬虫结果写入mongodb)

话不多说,上代码: spiders文件夹下的microBlogSpider.py里这样写: # -*- coding: utf-8 -*- import scrapy from scrapy import Spider, Request, FormRequest from scrapy.selector import Selector import datetime import random from blogSpider.items import microBlogItem, keyWordItem f

qq_39360565的博客 1779

【JavaSE】数据类型,变量,运算符,逻辑语句,方法

本文是一篇Java基础语法学习笔记,作者从大二学生的角度出发,系统整理了JavaSE的基础知识。内容涵盖:1)Java程序结构与运行原理;2)注释、标识符规范;3)数据类型与变量(包括4类8种基本类型);4)运算符(算术、关系、逻辑等6类);5)流程控制(分支、循环结构);6)方法定义与递归原理;7)输入输出操作。重点讲解了类型转换规则、位运算特性、方法重载条件等核心概念,并通过阶乘计算、斐波那契数列等案例演示编程实践。作者强调动手练习的重要性,建议读者通过实际编码巩固语法知识,为后续Java开发打下坚实基

2401_88012649的博客 2615

基于大模型的肾结石诊疗全流程风险预测与方案制定研究报告

目录一、引言1.1 研究背景与意义1.2 国内外研究现状1.3 研究目标与内容二、大模型技术原理与应用概述2.1 大模型的基本原理2.2 大模型在医疗领域的应用进展2.3 适用于肾结石预测的大模型选择与依据三、术前风险预测与准备3.1 患者身体状况评估3.2 结石情况分析3.3 术前准备方案制定四、术中风险预测与应对4.1 出血风险预测与处理4.2 脏器损伤风险预测与预防4.3 实时监测与决策支持五、术后恢复预测与护理5.1 恢复时间预测5.2 护理要点与措施5.3 并发症预防与处理六、并发症风险预测与管理

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1147

JavaSE入门:JavaSE程序基础——变量与方法

变量 变量的定义:将一些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元被称为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值。变量是程序中最基本的存储单元。 变量声明:每个变量的使用前都需要先声明, 结构:数据类型 变量名; 变量定义:数据类型 变量名=值; 变量分类: 局部变量 在方法体中使用的变量,没有默认值,我们要先对变量进行赋值才能使用。 成员变量 类体中,有默认值存在,不需要用static修饰。 静态变量 类体中,有默认值存在,需要用static修饰。

明光 318

Linux与Windows双系统,安装完linux后无法通过grub进入Windows的解决方法

先装Windows 10,Windows可正常启动,再装Kali,Kali提示装grub后照装。然而装完后重启发现无Windows选项。

sakurashockwave的博客 6454

Mac查看以太网信息,IP地址,查看配置桥接网络,使得虚拟机和本机ping通--linux系统part

4. 在本机的终端中使用ping命令,查看是否能够ping通虚拟机系统,如下图所示已经ping通。3-查看IP为192.168.1.244,还可以看到一些具体信息,如TCP/IP,DNS等;2-打开centos,进入管理员root模式(使用su命令加上输入管理员密码)然后使用ifconfig命令查看端口地址,如下所示为192.168.1.248。3-在虚拟机内使用ping命令,测试是否和网络连通,如下图所示已经ping通。打开虚拟机设置-点击网络适配器-选择桥接网络。1-打开设置,选择网络。

m0_65485230的博客 1546

JavaSE——面向对象高级一(1/4)-static修饰成员变量、应用场景,static修饰成员方法、应用场景

类变量:有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享。 实例变量(对象的变量):无static修饰,属于每个对象的。 类变量的用法: 类名.类变量(推荐) 对象.类变量(不推荐) 类变量的应用场景 在开发中,如果某个数据只需要一份,且希望能够被共享(访问、修改),则该数据可以定义成类变量来记住。

li13437542099的博客 488

SAP_FICO模块-资产减值功能对折旧和残值的影响

SAP_FICO模块-资产减值操作对资产历史折旧以及后续折旧的影响,包括减值操作的配置前提

风沙的博客 2804

JAVASE基础模块九(继承 方法重写 static super final 同名变量 代码块等)

JAVASE基础模块九(继承 方法重写 static super final 同名变量 代码块等) 长方形的属性 public class JuXing { private double chang; private double kuan; private double mianJi; private double zhouChang; public JuXing() { } public JuXing(double chang, double

cx9977的博客 315

UE5接入在线直播视频源,如hls(m3u8)格式

UE5接入在线直播视频源

专注GIS开发 9498

【软考高项论文】论信息系统项目管理的干系人绩效域

例如,在处理与电信运营商合作铺设光纤网络的问题时,考虑到其在通信设施建设和运维方面的专业性和重要性,我们将之定位为高权力高利益的干系人,给予了高度关注和优先沟通。项目全程,我们对干系人绩效域的执行效果进行了定期检查和评估,通过定量与定性的数据收集,确认了项目在干系人管理上的成效,具体表现为:建立了稳固的工作关系网络,使干系人普遍认可项目目标;鉴于本项目牵涉到政府各级部门、企事业单位、市民团体、技术研发伙伴等多种类型的干系人,且干系人的诉求和影响力各异,因此,有序且持续的干系人参与管理显得尤为关键。

Programming Talk 1681

JavaSE总结分享一下变量数值交换的4种方法

1、借助中转变量法(最为常用) int a = 3,b = 4; int temp = a; a = b; b = temp; System.out.println(a); System.out.println(b); 2、用和交换法 int a = 3,b = 4; a = a+b; b = a-b; a = a-b; System.out.println(a); System....

qq_44256373的博客 175

交通规划仿真软件:TransCAD_(7).公交系统规划与分析

通过TransCAD进行公交系统规划与分析,可以有效地评估公交网络的性能,优化线路设计,提高服务质量。数据准备、模型建立、仿真运行和结果分析是公交系统规划与分析的关键步骤。在实际应用中,规划者和分析师可以根据仿真结果提出具体的优化建议,不断完善公交系统的运行效率和乘客体验。

kkchenjj的博客 955

javaSE 变量 基本语句 属性 方法 类 内存

顺序表 一个类 链表 两个类 小结: 1.数据类型 1.基本数据类型 数值 整型/浮点型 字符型 布尔型 2.引用数据类型 1.数组 2.类对象 3.接口对象 2.变量 4种位置定义变量 1.形参 2.局部变量 3.属性 4.静态属性 格式(定义) 数据类型(基本|引用) 变量名=初始化; 格式(使用) 引用类型的变量;(一定指向一个对象或者是null) int[] array=new i...

LiAphrodite的博客 224

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

学习javaSE 类和对象,方法,构造方法,成员变量与局部变量

一、类和对象 1、类:类是具有相同属性和行为的一组对象的集合与抽象。    对象:对象是一个具体存在的实体,他是类的实例化。对象用来描述客观事物的一个实体,由一组属性和方法组成。万物皆对象。 2、类的定义     语法:     [类声明修饰符] class 类名 [继承][接口]{ 0—n个属性; 0---n个方法;     } 3、对象的创建和使用      ①对象的声明

qq_38234087的博客 422

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

JavaSE final的使用(变量,方法和类)

一·final变量 final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常,由final定义的变量为常量。 final关键字定义的变量必须在声明时对其进行赋值操作。final除了可以修饰基本数据类型的常量,还可以修饰对象引用,也可以修饰数组。一个既是static又是final的字段只占据一段不能改变的储存空间。 import static java.lang.System...

ReverieZH的博客 178

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【JavaSE韩顺平学习笔记 2】13.类变量,类方法,main方法,代码块

类变量,类方法main方法代码块。

qq_53479519的博客 191

javaSE第四章面向对象—方法,变量的分类

方法的一些基本概念及变量的分类

WoWBOOM的博客 192

javaSE.静态变量和静态方法

我们通过使用static关键字来声明一个变量或一个方法为静态的,一旦被声明为静态,那么通过这个类创建的所有对象,操作的都是同一个目标,也就是说,对象再多,也只有这一个静态的变量或方法。实际上是将.class 文件丢给JVM去执行的,而每一个.class 文件其实就是我们编写的一个类,我们在java中使用一个类前,所有被标记为静态的内容,会在类刚加载的时候就分配,而不是在对象创建的时候分配,所以说静态内容一定会在。同样的,在静态方法中,无法使用this关键字,因为this关键字代表的是当前的对象本身。

2401_87338545的博客 352

JavaSE - 封装、static修饰成员变量或成员方法

封装、包、static修饰成员变量或成员方法

Fighting!!! 717

JavaSE_day06 - 类与对象 - 成员变量 - 成员方法

- 类与对象 - 成员变量 - 成员方法

weixin_44890576的博客 1148

javase面向对象1:类与对象、成员变量与成员方法

目录 1. 笔记 1.1 类与对象 1.2 成员变量 1.3 成员方法 2. 练习 2.1 实例变量的练习 2.2 定义和调用实例化方法练习 1. 笔记 1.1 类与对象 1. 面向对象 这是一种思想,在学习过程中,知识点很杂、也很难! 1.1 面向过程与面向对象 开饭店: 调研(饭店开在哪一块最合适,饭店主要方向是什么) 找门面 装修 开业 .

weixin_43498449的博客 434

javaSE-第169篇-final修饰方法局部变量

3)final修饰方法 最终方法,不能被子类重写 4)final修饰局部变量 一旦初始化就不能再修改 5)final修饰方法的形参 在方法体中,不能修改final形参的值 ...

java孤独求败的博客 672

JavaSE查漏补缺之类变量和类方法

类变量和类方法

lpblog的博客 144

2019-9-10【Javase】方法、this、成员变量和局部变量、带参方法、参数传递、引用参数

文章目录一、方法定义二、成员变量和局部变量的区别三、带参方法定义四、方法参数传递五、引用参数 一、方法定义 1.一个文件定义多个类注意: 1.只能有一个类定义类public的; 2.public修饰的类名 与 文件名一致; 3.public 修饰的类 定义主方法。 2.this: 表示 本类对象。 作用: 1) 调用成员变量 和成员方法; 2)成员变量和 局部变量同名,使用this区分调用成员变量...

木羽的博客 653

javaSE基础面向对象笔记(3)成员变量局部变量区别,构造方法与普通方法区别,重载,封装

12.25 成员变量局部变量区别 1.声明位置 成员变量:类以内,方法以外 局部变量:方法内部 2.作用域 成员变量:在类的方法内部调用 局部变量:方法内部 3.默认值 成员变量:有默认值,即使没有初始化也可以使用 局部变量:没有默认值,在使用之前必须初始化 4.内存区域 成员变量:内存在堆中 局部变量:栈中 类和对象:对象是类的实例,类是对象的模板(抽象) public class Student { //成员变量 属性 全局变量-->类以内 方法以外 String name; int age

Echoxxxxx的博客 254
上一篇: MySQL(4)
下一篇: JavaSE-面向对象三大特性:封装、继承、多态详解
StackNoOverflow
博客等级 码龄1年 22粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值