Java类及其声明

原文链接

类(class)

声明类(class)

声明成员变量(field)

声明构造函数(constructor)

声明方法(method)

类(class)

在面向对象编程概念中介绍面向对象概念时,使用了自行车类,公路自行车、山地自行车和双人自行车子类。以下示例代码是Bicycle类的可能实现,提供了类的声明概述。后续章节会逐步解释类的声明,现在先忽略这些细节。

public class Bicycle {

    // Bicycle类拥有三个成员变量
    public int cadence;
    public int gear;
    public int speed;

    // Bicycle类拥有一个构造函数
    public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }

    // Bicycle类拥有四个方法
    public void setCadence(int newValue) {
        cadence = newValue;
    }

    public void setGear(int newValue) {
        gear = newValue;
    }

    public void applyBrake(int decrement) {
        speed -= decrement;
    }

    public void speedUp(int increment) {
        speed += increment;
    }

}

Bicycle类的MountainBike子类声明如下:

public class MountainBike extends Bicycle {

    // MountainBike子类拥有一个成员变量
    public int seatHeight;

    // MountainBike子类拥有一个构造函数
    public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) {
        super(startCadence, startSpeed, startGear);
        seatHeight = startHeight;
    }

    // MountainBike子类拥有一个方法
    public void setHeight(int newValue) {
        seatHeight = newValue;
    }

}

MountainBike子类继承了Bicycle父类的所有成员变量和方法,并且添加了seatHeight成员变量和setHeight方法。

声明类(class)

类的声明方式如下:

class MyClass {
    // 声明成员变量、构造函数、方法
}

类体({}之间的区域)中包含了类对象生命周期的所有代码:

1. 构造函数:用于初始化新对象;

2.成员变量:提供类和对象的状态;

3.方法:实现类和对象的行为。

前面声明的类只包含类声明所需组件的最小声明,类声明中还可以包含类继承的父类,以及类实现的接口等信息。例如:

class MyClass extends MySuperClass implements YourInterface {
    // 声明成员变量、构造函数、方法
}

MyClass类是MySuperClass类的子类,MyClass类实现了YourInterface接口。

可以在类声明的开头添加public或private修饰符,这样类声明就变得复杂起来。

public和private修饰符决定了哪些类可以访问MyClass类,这些将在后续讨论。接口和继承中将会解释如何以及为什么在类声明中使用extends和implements关键字,现在不必在意这些细节。

通常,类声明可以包含以下组件,顺序如下:

1. modifier:声明public、private和其他修饰符,private修饰符只能用于嵌套类。

2. class:声明类名,首字母大写。

3. extends:声明类继承的父类(超类、基类),一个类只能继承一个父类。

4. implements:声明类实现的接口,一个类可以实现多个接口,用逗号分隔。

5. {}:声明类体。

声明成员变量(field)

Java中存在三种变量类型:

1. field:类中声明的成员变量。

2. local variable:方法或代码块中声明的局部变量。

4. parameter:方法中声明的参数。

Bicycle类中定义了以下成员变量:

public int cadence;
public int gear;
public int speed;

成员变量的声明包含以下三个组件,顺序如下:

1. modifier:声明0个或多个修饰符,例如:public或private。

2. type:声明成员变量的类型。

3. name:声明成员变量的名称。

Bicycle类的成员变量名称为cadence、gear和speed,这些成员变量的数据类型都是int(整型)。public关键字表示这些成员变量都是公共成员,任何可以访问Bicycle类的对象都可以访问这些成员变量。

访问修饰符

最左边的第一个修饰符用于控制哪些类可以访问成员变量。现在只需要考虑public和private,其他访问修饰符在后续讨论。

1. public修饰符:所有类都可以访问成员变量。

2. private修饰符:只能在成员变量所属的类中访问成员变量。

本着封装的原则,通常都会把成员变量设置为private。这意味着只能在Bicycle类中直接访问Bicycle类的成员变量。但是其他类仍然需要访问Bicycle类的成员变量,可以添加public方法来获取Bicycle类的成员变量值,间接访问Bicycle类的成员变量:

public class Bicycle {

    private int cadence;
    private int gear;
    private int speed;

    public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }

    public int getCadence() {
        return cadence;
    }

    public void setCadence(int newValue) {
        cadence = newValue;
    }

    public int getGear() {
        return gear;
    }

    public void setGear(int newValue) {
        gear = newValue;
    }

    public int getSpeed() {
        return speed;
    }

    public void applyBrake(int decrement) {
        speed -= decrement;
    }

    public void speedUp(int increment) {
        speed += increment;
    }

}

变量类型

所有变量(成员变量、局部变量、参数)都必须具有类型,变量类型可以是:

1. primitive type(原始类型、基础类型):int, float, boolean等;

2. reference type(引用类型):字符串、数组、对象等。

变量名称

所有变量(成员变量、局部变量、参数)都必须遵循语言基础中变量命名的规则和约定。 这里的方法和类使用了相同的命名规则和约定,除了:

1. 类名的第一个字母应该大写;

2. 方法名的第一个单词应该是动词。

声明构造函数(constructor)

类包含了用于根据类的蓝图来创建对象的构造函数。构造函数的声明类似于方法的声明,但是构造函数使用的是类名,并且构造函数没有返回类型。例如,Bicycle类拥有一个构造函数:

public Bicycle(int startCadence, int startSpeed, int startGear) {
    gear = startGear;
    cadence = startCadence;
    speed = startSpeed;
}

要创建一个名为myBike的新Bicycle对象,需要使用new操作符来调用构造函数:

Bicycle myBike = new Bicycle(30, 0, 8);

new Bicycle(30, 0, 8)在内存中为对象开创了空间,并初始化对象的成员变量。 虽然Bicycle类拥有一个构造函数,但是它可以拥有其他构造函数,包括无参构造函数:

public Bicycle() {
    gear = 1;
    cadence = 10;
    speed = 0;
}

Bicycle yourBike = new Bicycle() 调用无参构造函数来创建一个名为yourBike的新Bicycle对象。 Bicycle类中可以声明这两个构造函数,因为这两个构造函数具有不同的参数列表。跟方法一样,Java平台根据参数数量和类型来区分构造函数。不能在同一个类中编写两个具有相同参数数量和类型的构造函数,因为平台无法区分这两个构造函数,这样会导致编译期错误。 可以不需要给类提供构造函数,编译器会自动给没有构造函数的类提供一个默认的无参构造函数,这个默认的构造函数会调用父类的无参构造函数。这种情况下,如果父类没有无参构造函数的话,编译器就会报错,所以必须验证父类是否具有无参构造函数。如果一个类没有显式父类的话,那么这个类就有一个隐式父类Object,Object父类确实具有一个无参构造函数。 可以使用父类的构造函数,之前的MountainBike类就是这么做的,接口和继承章节会讨论这个问题。 可以在构造函数的声明中使用访问修饰符来控制哪些类可以调用这个构造函数。 注意:如果一个类不能调用MyClass类的构造函数,那么这个类就无法直接创建MyClass对象。

声明方法(method)

下面是声明方法的典型示例:

public double calculateAnswer(double wingSpan, int numberOfEngines, double length, double grossTons) {

}

方法声明的必要元素是方法的返回类型、名称、小括号(),以及大括号{}之间的方法体。

方法声明包括以下组件,顺序如下:

1. modifier:声明public、private,以及其他修饰符。

2. type:声明方法的返回类型,方法没有返回值时,返回类型为void。

3. name:声明方法名,成员变量的命名规则适用于方法名,只是约定略微不同。

4. ():声明参数列表,使用逗号分隔,参数声明包括参数类型和参数名称,方法没有参数时,使用空的小括号()。 5. throws:声明异常列表,使用逗号分隔。

6. {}:声明方法体,用于放置局部变量声明等方法代码。 方法签名的组成:方法名和方法的参数类型。 上面声明的calculateAnswer方法的签名为:

calculateAnswer(double, int, double, double)

命名方法

尽管方法名可以是任意合法的标识符,但是代码约定限制了方法命名。按照约定,方法名应该是一个小写的动词,或者以一个小写的动词开头,后面紧跟着形容词、名词等。具有多个单词的方法名中,第二个单词之后的所有单词的第一个字母都应该大写。以下是一些示例方法名:

run
runFast
getBackground
getFinalData
compareTo
setX
isEmpty

通常一个类中的方法名是惟一的,但是因为方法可以重载,所以一个类中可以包含其他同名方法。

重载方法

Java编程语言支持重载(overload)方法,Java可以区分具有不同方法签名的方法。这意味着一个类中的可以包含同名方法,但是这些同名方法必须具有不同的参数列表。接口和继承章节会讨论方法重载的一些限制条件。 假设有一个类可以使用书法来描绘各种类型的数据(字符串、整数等),这个类包含了描绘各种数据类型的方法。每个方法都要使用新的方法名是一件很麻烦的事情,例如:drawString、drawInteger、drawFloat等等。Java编程语言中,所有描绘方法都可以使用相同的方法名,但是每个方法必须具有不同的参数列表。这样的话,数据描绘类可能会声明4个名为draw的方法,每个方法都具有不同的参数列表。

public class DataArtist {

    public void draw(String s) {

    }

    public void draw(int i) {

    }

    public void draw(double f) {

    }

    public void draw(int i, double f) {

    }

}

重载方法根据方法的参数数量和类型进行区分。示例代码中,`draw(String s)`和`draw(int i)`是两个不同的方法,因为它们具有不同的参数类型。 不能使用相同方法名称、相同参数数量和类型来声明多个方法,编译器无法区分这些方法。 区分方法时编译器不会考虑返回类型,即使两个方法具有不同的返回类型,也不能声明两个具有相同签名的方法。 注意:应该小心使用重载方法,因为重载方法会降低代码的可读性。

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2章:简单Java程序】_简单Java程序笔记.pdf 010301_【第3章:Java基础程序设计】_Java数据型笔记.pdf 010302_【第3章:Java基础程序设计】_运算符、表达式与语句笔记.pdf 010303_【第3章:Java基础程序设计】_判断与循环语句笔记.pdf 010401_【第4章:数组与方法】_数组的定义及使用笔记.pdf 010402_【第4章:数组与方法】_方法的声明及使用笔记.pdf 010403_【第4章:数组与方法】_数组的引用传递笔记.pdf 010404_【第4章:数组与方法】_Java新特性对数组的支持笔记.pdf 020501_【第5章:面向对象基础】_面向对象、与对象的定义笔记.pdf 020502_【第5章:面向对象基础】_与对象的进一步研究笔记.pdf 020503_【第5章:面向对象基础】_封装性笔记.pdf 020504_【第5章:面向对象基础】_构造方法与匿名对象笔记.pdf 020505_〖第5章:面向对象基础〗_实例讲解—设计分析(学生)笔记.pdf 020506_【第5章:面向对象基础】_String笔记.pdf 020507_【第5章:面向对象基础】_String的常用方法.pdf 020508_【第5章:面向对象基础】_引用传递及其应用笔记.pdf 020509_【第5章:面向对象基础】_this关键字笔记.pdf 020510_【第5章:面向对象基础】_static关键字笔记.pdf 020511_【第5章:面向对象基础】_理解main方法笔记.pdf 020512_【第5章:面向对象基础】_代码块笔记.pdf 020513_【第5章:面向对象基础】_构造方法私有化笔记.pdf 020514_【第5章:面向对象基础】_对象数组笔记.pdf 020515_【第5章:面向对象基础】_内部笔记.pdf 020516_〖第5章:面向对象基础〗_实例讲解—系统登陆笔记.pdf 020517_〖第5章:面向对象基础〗_实例讲解—单向链表(1)笔记.pdf 020518_〖第5章:面向对象基础〗_实例讲解—单向链表(2)笔记.pdf 020601_【第6章:面向对象(高级)】_继承的基本实现笔记.pdf 020602_【第6章:面向对象(高级)】_继承的进一步研究笔记.pdf 020603_〖第6章:面向对象(高级)〗_范例:继承的应用笔记.pdf 020604_【第6章:面向对象(高级)】_final关键字笔记.pdf 020605_【第6章:面向对象(高级)】_抽象的基本概念笔记.pdf 020606_【第6章:面向对象(高级)】_接口的基本概念笔记.pdf 020607_【第6章:面向对象(高级)】_对象的多态性笔记.pdf 020608_【第6章:面向对象(高级)】_instanceof关键字笔记.pdf 020609_【第6章:面向对象(高级)】_抽象与接口的应用笔记.pdf 020610_〖第6章:面向对象(高级)〗_实例分析:宠物商店笔记.pdf 020611_【第6章:面向对象(高级)】_Object笔记.pdf 020612_【第6章:面向对象(高级)】_包装笔记.pdf 020613_【第6章:面向对象(高级)】_匿名内部笔记.pdf 020701_【第7章:异常的基本概念】_异常的基本概念笔记.pdf 020702_【第7章:异常的基本概念】_异常的其他概念笔记.pdf 020801_【第8章:包及访问控制权限】_包的定义及导入笔记.pdf 020802_【第8章:包及访问控制权限】_访问控制权限及命名规范笔记.pdf 030901_【第9章:多线程】_认识多线程笔记.pdf 030902_【第9章:多线程】_线程常用操作方法笔记.pdf 030903_〖第9章:多线程〗_线程操作范例笔记.pdf 030904_【第9章:多线程】_同步与死锁笔记.pdf 030905_【第9章:多线程】_线程操作案例——生产者和消费者笔记.pdf 030906_【第9章:多线程】_线程生命周期笔记.pdf 031001_【第10章:泛型】_泛型入门笔记.pdf 031002_【第10章:泛型】_通配符笔记.pdf 031003_【第10章:泛型】_泛型的其他应用笔记.pdf 031004_〖第10章:泛型〗_实例讲解—泛型操作范例笔记.pdf 031101_【第11章:Java常用库】_StringBuffer笔记.pdf 031102_【第11章:Java常用库】_Runtime笔记.pdf 031103_【第11章:Java常用库】_国际化程序笔记.pdf 031104_【第11章:Java常用库】_System笔记.pdf 031105_【第11章:Java常用库】_日期操作(Date、Calendar)笔记.pdf 031106_【第11章:Java常用库】_日期操作(DateFormat、SimpleDateFormat)笔记.pdf 031107_〖第11章:Java常用库〗_实例操作:取得当前日期笔记.pdf 031108_【第11章:Java常用库】_Math与Random笔记.pdf 031109_【第11章:Java常用库】_NumberFormat笔记.pdf 031110_【第11章:Java常用库】_大数操作(BigIntger、BigDecimal)笔记.pdf 031111_【第11章:Java常用库】_对象克隆技术笔记.pdf 031112_【第11章:Java常用库】_Arrays笔记.pdf 031113_【第11章:Java常用库】_比较器(Comparable、Comparator)笔记.pdf 031114_【第11章:Java常用库】_观察者设计模式笔记.pdf 031115_【第11章:Java常用库】_正则表达式笔记.pdf 031116_【第11章:Java常用库】_定时调度笔记.pdf 031201_【第12章:JAVA IO】_File笔记.pdf 031202_【第12章:JAVA IO】_RandomAccessFile笔记.pdf 031203_【第12章:JAVA IO】_字节流与字符流笔记.pdf 031204_【第12章:JAVA IO】_字节-字符转换流笔记.pdf 031205_【第12章:JAVA IO】_内存操作流笔记.pdf 031206_【第12章:JAVA IO】_管道流笔记.pdf 031207_【第12章:JAVA IO】_打印流笔记.pdf 031208_【第12章:JAVA IO】_System对IO的支持笔记.pdf 031209_【第12章:JAVA IO】_BufferedReader笔记.pdf 031210_〖第12章:JAVA IO〗_IO操作实例笔记.pdf 031211_【第12章:JAVA IO】_Scanner笔记.pdf 031212_【第12章:JAVA IO】_数据操作流笔记.pdf 031213_【第12章:JAVA IO】_合并流笔记.pdf 031214_【第12章:JAVA IO】_压缩流笔记.pdf 031215_【第12章:JAVA IO】_回退流笔记.pdf 031216_【第12章:JAVA IO】_字符编码笔记.pdf 031217_【第12章:JAVA IO】_对象序列化笔记.pdf 031218_〖第12章:JAVA IO〗_实例操作—单人信息管理程序笔记.pdf 031219_〖第12章:JAVA IO〗_实例操作:投票程序笔记.pdf 031301_【第13章:Java集】_认识集、Collection接口笔记.pdf 031302_【第13章:Java集】_List接口笔记.pdf 031303_【第13章:Java集】_LinkedList笔记.pdf 031304_【第13章:Java集】_Set接口笔记.pdf 031305_【第13章:Java集】_排序及重复元素说明笔记.pdf 031306_【第13章:Java集】_SortedSet接口笔记.pdf 031307_【第13章:Java集】_Iterator接口笔记.pdf 031308_【第13章:Java集】_ListIterator接口笔记.pdf 031309_【第13章:Java集】_foreach及Enumeration接口笔记.pdf 031310_【第13章:Java集】_Map接口笔记.pdf 031311_【第13章:Java集】_Map接口使用的注意事项笔记.pdf 031312_【第13章:Java集】_IdentityHashMap笔记.pdf 031313_【第13章:Java集】_SortedMap笔记.pdf 031314_【第13章:Java集】_集合工具:Collections笔记.pdf 031315_【第13章:Java集】_Stack笔记.pdf 031316_【第13章:Java集】_属性:Properties笔记.pdf 031317_〖第13章:Java集〗_范例讲解:一对多关系笔记.pdf 031318_〖第13章:Java集〗_范例讲解:多对多关系笔记.pdf 031401_【第14章:枚举】_枚举的作用笔记.pdf 031402_【第14章:枚举】_Enum笔记.pdf 031403_【第14章:枚举】_集对Enum的支持笔记.pdf 031404_【第14章:枚举】_枚举的其他应用笔记.pdf 031501_【第15章:Java反射机制】_认识Class笔记.pdf 031502_【第15章:Java反射机制】_Class的使用笔记.pdf 031503_【第15章:Java反射机制】_反射应用——取得的结构笔记.pdf 031504_【第15章:Java反射机制】_Java反射机制的深入研究笔记.pdf 031505_【第15章:Java反射机制】_动态代理笔记.pdf 031506_【第15章:Java反射机制】_工厂设计模式笔记.pdf 031601_【第16章:Annotation】_系统内建Annotation笔记.pdf 031602_【第16章:Annotation】_自定义Annotation笔记.pdf 031603_【第16章:Annotation】_反射与Annotation笔记.pdf 031604_【第16章:Annotation】_深入Annotation笔记.pdf 031701_【第17章:Java数据库编程】_JDBC概述笔记.pdf 031702_【第17章:Java数据库编程】_MySQL数据库笔记.pdf 031703_【第17章:Java数据库编程】_SQL语法基础笔记.pdf 031704_【第17章:Java数据库编程】_JDBC操作步骤及数据库连接操作笔记.pdf 031705_【第17章:Java数据库编程】_执行数据库更新操作笔记.pdf 031706_【第17章:Java数据库编程】_ResultSet接口笔记.pdf 031707_【第17章:Java数据库编程】_PreparedStatement接口笔记.pdf 031708_【第17章:Java数据库编程】_处理大数据对象(1)—处理CLOB数据笔记.pdf 031709_【第17章:Java数据库编程】_处理大数据对象(2)—处理BLOB数据笔记.pdf 031710_【第17章:Java数据库编程】_CallableStatement接口笔记.pdf 031711_【第17章:Java数据库编程】_JDBC 2.0操作笔记.pdf 031712_【第17章:Java数据库编程】_事务处理笔记.pdf 031713_【第17章:Java数据库编程】_使用元数据分析数据库笔记.pdf 031714_【第17章:Java数据库编程】_使用JDBC连接Oracle笔记.pdf 031801_【第18章:图形界面】_AWT、Swing简介笔记.pdf 031802_【第18章:图形界面】_基本容器:JFrame笔记.pdf 031803_【第18章:图形界面】_标签组件:JLabel笔记.pdf 031804_【第18章:图形界面】_按钮组件:JButton笔记.pdf 031805_【第18章:图形界面】_布局管理器笔记.pdf 031806_【第18章:图形界面】_其他容器笔记.pdf 031807_【第18章:图形界面】_不弹起的按钮组件:JToggleButton笔记.pdf 031808_【第18章:图形界面】_文本组件:JTextComponent笔记.pdf 031809_【第18章:图形界面】_事件处理笔记.pdf 031810_【第18章:图形界面】_单选钮:JRadioButton笔记.pdf 031811_【第18章:图形界面】_复选框:JCheckBox笔记.pdf 031812_【第18章:图形界面】_列表框:JList笔记.pdf 031812_【第18章:图形界面】_下拉列表框:JComboBox笔记.pdf 031813_【第18章:图形界面】_菜单组件笔记.pdf 031814_【第18章:图形界面】_文件选择框笔记.pdf 031815_【第18章:图形界面】_表格笔记.pdf 031901_【第19章:Java网络编程】_IP(Internet Protocol)与InetAddress笔记.pdf 031902_【第19章:Java网络编程】_URL与URLConnection笔记.pdf 031903_【第19章:Java网络编程】_URLEncoder与URLDecoder笔记.pdf 031904_【第19章:Java网络编程】_TCP程序设计笔记.pdf 031905_【第19章:Java网络编程】_UDP程序设计笔记.pdf 032001_【第20章:Java新IO】_缓冲区与Buffer笔记.pdf 032002_【第20章:Java新IO】_通道(Channel)笔记.pdf 032003_【第20章:Java新IO】_文件锁笔记.pdf 032004_【第20章:Java新IO】_字符集笔记.pdf 032005_【第20章:Java新IO】_Selector笔记.pdf 042101_【课程讲解】_附录:Eclipse开发工具笔记.pdf 050101_〖开发实例〗_Java开发实例讲解(人员管理)笔记.pdf

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值