类的定义:
[public|default] [abstract|final] class 类名 [extends 父类] [implements 接口1[,接口2[,接口n]]]{
[{初始代码块}]
[static{静态初始化代码块}]
//零个或多个构建器
[public|protected|private|default] 类名 (参数类型 参数值[,参数类型 参数值]){
[this([参数值])|super([参数值])]
方法体
}
//零个或多个属性
[public|protected|private|default] [static] [final] 属性类型 属性名 [=属性值];
//零个或多个方法
[public|protected|private|default] [static] [ final] 返回值类型 方法名 (参数类型 参数值[,参数类型 参数值]){
方法体
[return obj]
}
[public|protected|default] [abstract] 返回值类型 方法名 (参数类型 参数值[,参数类型 参数值])
}
1. 类名定义:
public 该类可以被任何类引用
default 默认没有修饰符,指在与该类同包内的类可以引用
abstract 该类是一个抽象类,该类不可以被实例化
final 说明该类不可被继承
类只能有扩展一个父类,但可以实现多个接口。
类必须实现接口定义的方法和父类的抽像方法,除非该类是抽像类,可以将具体实现交给子类来实现。
2. 属性定义:
[public|protected|private|default] [static] [final] 属性类型 属性名 [=属性值];
[public|protected|private|default] 只允许其中一个
public 属性可以被任何类引用(前提Class是public的,否则等同于default)
protected 同包内的类可以引用或子类可以引用
private 该属性不能被其它类引用
default 默认没有修饰符,同包内的类可以引用
任何属性都可以在本类中被引用。
引用范围 由大至小为 public->protected->default->private
[static] 该属性为静态属性,在由字节码的class文件生成Class对象时就已初始化,static属性属于Class对象,由于在jvm中每个类(在每个ClassLoader中)只有一个class对象,static属性也只有一个,对于类的多个实例共享。未用static 标注的属性属于类的实例,每个的实例在内存中都有自已的一块区域保存属性方法等,因此非static属性唯一的属于一个类实例,与另一个类实例的同名属性内存地址不同,值也可能不同。
[final] 该属性被赋值后不可以再次被赋值。
赋值三种方式:1. 定义时初始化:final Map map = new HashMap();
2.final Map map; 然后在构建器里初始化。
3.final Map map ;然后在初始化代码块中初始化
final 型变量如果未赋值,系统不会自动给默认值,因此引用时会编译报错。
非final属性可以在定义和初始化时不赋值,系统会自动赋默认值:
int,byte,char,short,long, 默认值为0。
float,double 默认值为0.0.
boolean 默认值为:false
引用对象型属性默认值为null;
3.局部变量
局部变量定义在方法内或初始化代码块内,格式为 :[final] 属性类型 属性名 =属性值;
局部变量定义时必须赋值。
局部变量的作用域:局部变量定义代码所在的大括号内。
方法的参数是另一种局部变量,方法调用时参数才被赋值,基本数据类型和String类型参数 是值传递,其它对象类型参数是引用传递。 值传递变量改变不会影响原值(调用者里的值),因为值相同于复制了一份,新的不会影响老的。 引用传递变量的值是对象的内存地址,该值变化对原对象没有影响,相当于指向了另一内存地址,但通过引用传递变量操作了引用对象,应会对原对象产生景响。
4.方法定义
[public|protected|private|default] [static] [ final] 返回值类型 方法名 (参数类型 参数值[,参数类型 参数值])
[public|protected|private|default] 只允许其中一个
public 方法可以被任何类引用(前提Class是public的,否则等同于default)
protected 方法同包内的类可以引用或子类可以引用
private 该方法不能被其它类引用
default 默认没有修饰符,同包内的类可以引用
任何属性都可以在本类中被引用。
[static] 该方法属于静态方法,调用方式【类名.方法名】,静态方法在字节码的class文件被加载生成Class对象时就准备好了,与类实例无关,所以在反射调用静态方法时不需要类的实例 、静态方法不可以调用非静态方法和非静态变量(非静态方法和属性需要实例对象才能调用)。
[final] 该方法不可以被子类覆盖(override)
5.方法的重载(overload)
方法重载: 多个方法,方法名相同,但参数个数或类型不同,与修饰符和返回值无关。
方法重载的多个方法一般用于实现相同功能,其中某些方法简化了参数(使用默认值)等。方便用户的调用。
6.方法的覆盖( override )
方法的覆盖:用子类的方法覆盖父类的方法,在调用中调用的是子类的方法而不是父类的方法。
父类的方法在子类中可见,才能够被覆盖,否则即使子类的方法签名与父类完全相同,也达不到覆盖的作用。
子类覆盖方法:
1.方法签名:方法名,参数列表,需要与父类方法完全相同
2. 父类的方法在子类中可见
3. 子类的方法修饰符范围不能比父类的小。
4. 返回值类型与父类返回值类型相同或是其子类
5. 子类抛出的异常与父类异常类型相同或是其子类。
6. 子类的方法签名可以增加 final 和synchronized
7. 子类中调用父类方法可以使用 super.方法名。
8. 父类的static 方法的子类覆盖方法必须是static的
8. 父类的非static 方法的子类覆盖方法必须是非static的
7.子类与父类 属性名相同
子类方法访问的是子类的属性,父类方法访问的是父类的属性,这两个属性完全不同。
子类需要访问父类的属性需要使用super、
注:父类中的static属性,子类中不能有同名属性
8.构建器
用于类实例化时被调用,做初始化工作。
[public|protected|private|default] 类名 (参数类型 参数值[,参数类型 参数值]){
[this([参数值])|super([参数值])]
方法体
}
public 该类可以被任何类实例化(前提Class是public的,否则等同于default)
default 默认没有修饰符,同包内的类才可以实例化该类
protected 方法同包内的类或子类才可以实例化该类
private 该方法不能被其它类实例化,只能该类本身可以实例化,如单例模式
一个类可以不定义构建器,默认有一个空参数的构建器。
由参数不同可以有多个构建器,构建器之间的调用需要使用this关键字,并且为第一行代码,调用父构建器需要使用super关键字,并且为第一行代码。
父类中没有默认构建器,则子类构建器中必须显示调用父构建器,并且为第一行代码.
构建器的调用顺序:父类构建器先执行,然后是子类的构建器。
9.初始化代码块
[{初始代码块}] --优先于构建器执行
[static{静态初始化代码块}] --类加载时执行
10.类的实例化顺序
类的实例化分成两大步
一. 加载类,同一个类只加载一次,static属性及static代码块也只被执行一次。
加载类时static 代码块被执行,执行顺序是: 父类static初始化完成后才是子类static初始化
1.父static 属性初始化。
2.父static代码块执行。
3.子类static 属性初始化
4.子类static 代码块执行
二.实例化类,多次实例化,则调用多次,执行顺序是:父类先于子类执行
1.父类非static属性初始化
2.父类非static代码块执行。
3.父类构建器执行
4.子类非static属性初始化
5.子类非static代码块执行。
6.子类构建器执行
接口的定义
[public|default] interface 接口名 extends 接口1 接口2,{
//零个或多个属性
[public||default] [static] [final] 属性类型 属性名 =属性值;
//零个或多个方法
[public|default] [abstract] 返回值类型 方法名 (参数类型 参数值[,参数类型 参数值]);
}
接口中定义的属性默认为 static final的,定义时必须被赋值。
接口中定义的方法默认是public的
枚举定义:
[public|default] enum 枚举类名{
实例名1[(构建器参数)][{
//重写枚举类方法,实现多态
}]
[,实例名N[(构建器参数)]{
//重写枚举类方法,实现多态
}];
[public|protected|defalut|private] [final] 属性类型 属性名 [=属性值];
[private 枚举类名({构建器形参}){方法体}]
//零个或多个属性
[public|protected|private|default] [static] [final] 属性类型 属性名 [=属性值];
//零个或多个方法
[public|protected|private|default] [static] [ final] 返回值类型 方法名 (参数类型 参数值[,参数类型 参数值]){
方法体
[return obj]
}
[public|protected|default] [abstract] 返回值类型 方法名 (参数类型 参数值[,参数类型 参数值]);//由子类实现
}
枚举类用来定义固定数量的常量类型。
固有方法:
values();//静态方法 返回枚举实例数组,按声明顺序
valueOf(String name)://静态方法,name与枚举实例名相同,则返回该枚举实例,都不相同则报错
枚举类的父类为Enum类,因此所有枚举类实例均可以调用父类的方法:
toString()://返回枚举实例名
name()://返回枚举实例名
ordinal()://返回枚举实例在枚举类中的顺序号。 按声明顺序,由0开始。第三个实例的 ordinal()为2.
示例 :
package temp.java;
public enum Season {
SPRING(3,5),SUMMER(6,8),AUTUMN(9,11),WINTER(12,2){
@Override
protected boolean isMonthMatch(int month) {
// TODO Auto-generated method stub
return (startMonth==month )|| (endMonth>=month && month >0);
}
};
int startMonth ;
int endMonth;
private Season(int startMonth,int endMonth){
this.startMonth = startMonth;
this.endMonth = endMonth;
}
public static Season getSeason(int month) throws Exception {
Season [] seasons = Season.values();
for(Season season :seasons){
if(season.isMonthMatch(month)){
return season;
}
}
throw new Exception(" invalid month:"+month);
}
protected boolean isMonthMatch(int month){
return this.startMonth<= month && this.endMonth>=month;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.name()+": from "+this.startMonth+" month to "+this.endMonth+" month";
}
public static void main(String args []){
Season [] seasons = Season.values();//返回枚举实例数组,按声明顺序
for(Season season :seasons){
System.out.println("seasonName:"+season.name()//返回枚举实例名
+" ordinal:"+season.ordinal()//ordinal()方法 返回枚举实例的数值,按实例声明顺序,由0开始
+" "+season.getDeclaringClass());
}//输出结果:
// seasonName:SPRING ordinal:0 class temp.java.Season
// seasonName:SUMMER ordinal:1 class temp.java.Season
// seasonName:AUTUMN ordinal:2 class temp.java.Season
// seasonName:WINTER ordinal:3 class temp.java.Season
try{
int month=6;
Season season = Season.getSeason(month);
System.out.println(month +" month is in "+season.name()+", ("+season.toString()+")");//输出:6 month is in SUMMER, (SUMMER: from 6 month to 8 month)
switch(season){//输出:夏天。。
case SPRING:
System.out.println("春天。。");break;
case SUMMER:
System.out.println("夏天。。");break;
case AUTUMN:
System.out.println("秋天。。");break;
case WINTER:
System.out.println("冬天。。");break;
}
}catch(Exception e){}
String seasonName ="SUMMER";
Season season = Season.valueOf(seasonName);//字符串与实例名相同,才转换成为枚举
System.out.println(season.toString());//输出:SUMMER: from 6 month to 8 month
try{
seasonName ="夏天";
season = Season.valueOf(seasonName);
}catch(Exception e){
e.printStackTrace();
//输出异常:Exception in thread "main" java.lang.IllegalArgumentException: No enum const class temp.java.Season.夏天
}
}
}
相关推荐
在C++编程中,"点、线、圆、矩形、抛物线的类定义"是一个涉及面向对象编程的重要主题。面向对象编程(OOP)是C++的核心特性,它通过类来封装数据和功能,使得代码更加模块化和易于管理。在这个场景下,我们将分别...
C++ 基本知识 - 类定义、初始化、析构 本文将对 C++ 中的类定义、初始化和析构进行详细的阐述。 1.1 类的定义 在 C++ 中,类是一种新的数据类型,而对象是具有这种类型的变量。类就是对同类对象的属性和行为进行...
双向链表类定义及测试文件 对应于数据机构与算法分析(c++版)第三版或第二版 Clifford A.Shaffer 重庆大学使用教材
win7中vfp软件安装后出现 0: 找不到MSXML2.DOMDOCUMENT.4.0类定义,此中是Dll文件下载,直接放在c:\windows\system目录下即可!msxml4.cab
HID设备类定义的中文版,本汉语版为USB爱好都编写,仅供参考。为保证原书语意,书中的专有名词均采用英语原文。原书为 ”Device Class Definition for Human Interface Device(HID)”。
以下是对类定义与实现关联的详细解释。 **类定义与实现的区分** 1. **声明与定义**: - 声明(Declaration):向编译器表明一个标识符(如变量、函数、类等)的存在,但不提供完整的实现细节。例如,`void func...
在这个场景中,我们使用抽象类来定义一个"形状类",该类包含计算周长和面积的通用方法。这允许我们创建一个统一的接口,使得所有形状都遵循相同的规范。 首先,我们可以定义一个名为`Shape`的抽象类,它包含两个...
zfind是本人写的一个简单的C/C++宏定义和类定义搜索工具,z是左的意思,即本人姓氏。取此名字是因为windows下有find命令,为避免冲突。另外本工具是本人在32位WIN7环境下使用的,其余环境本人不保证兼容。 写此工具...
定义一个Book(图书)类,在该类定义中包括: (1) 数据成员:bookname(书名)、price(价格) 和number(存书数量)。 (2) 成员函数:display()显示图书的情况;borrow()将存书数量减1。并显示当前存书数量;restore( )...
对如下多项式编写类定义: +++…+ 其中,n为多项式的次数。完成如下功能: (1)可存储任意大的多项式(提示:可用动态数组实现)。 (2)定义构造函数、析构函数、拷贝构造函数。 (3)包含一个static成员存储定义...
Java 类定义 Java 类是 Java 编程语言的基础概念之一,它是对象的蓝图,用于描述对象的状态和行为。在 Java 中,类是用户自定义的数据类型,对象是类的实例。类定义了对象的属性和行为,对象则是类的实例化结果。 ...
本资源"COM对象转类定义模块.rar"包含了一个易语言类定义模块的源码,旨在帮助开发者理解如何将COM对象转换为类定义,以便于在易语言环境中使用这些对象。 首先,了解COM的基本概念是非常重要的。COM是一个二进制...
Python 类定义是面向对象编程的基础,它允许程序员创建自定义的数据结构并定义与这些结构相关的操作。类定义在Python中是通过`class`关键字来实现的,它为封装数据和行为提供了一种方式。 首先,类定义的基本语法...
本设计源码提供了一个基于Objective-C的JSON数据生成Objective C类定义的工具,包含21个文件,其中包括4个gitignore文件,4个m源文件,3个h头文件,2个xib文件,2个md文档,1个pbxproj文件,1个xcworkspacedata文件...
HID(Human Interface Device)设备类定义中文版PDF是一份详细阐述USB(Universal Serial Bus)人机交互设备标准的文档,对于理解与开发HID设备的软件或硬件工程师来说至关重要。这份文档通常会涵盖HID协议的基本...
代码定义了一个名为Person的类,它有两个属性name和age,以及一个名为sayHello()的方法。在Main类的main()方法中,我们创建了...类定义了对象的属性和方法,而对象是根据类定义创建的实例,可以设置属性值和调用方法。
本cpp采用C++编写,利用Clock类定义一个带“AM”,“PM”的新时钟类NewClock,显示时间带有上午下午标志
《HID设备类定义(中文)》文档详细阐述了USB人机交互设备(Human Interface Device,简称HID)的相关规范,旨在为HID设备制造商提供生产USB兼容设备所需的指导,并规定了驱动程序如何从USB设备获取数据。...