浏览以下内容前,请点击并阅读 声明

java是面向对象的语言,而对象的创建,则需要借助类,类可以说是一个创建对象的模具(个人理解)。

类的定义

  以下构成定义类的最简单(不能再简单)语句:

class MyClass {
// 字段,构造器,
// 方法等的声明
}

  通常情况下,类的声明一般包含如下组成部分(按顺序):

  • 类的修饰词,如public(可有可无)
  • class关键词+类的名称,一般一大写字母开头
  • extends关键词+继承的类,一个类只能继承一个超类(可有可无)
  • implements+实现的借口,借口可以有多个,以逗号分隔(可有可无)
  • 类的主体,用花括号括起来

  类的修饰词,类的修饰可以为public,也可以没有如果为public则其可视范围没有限制,若没有,则其可视范围为仅程序包内可见(package)。

  类的继承与借口的实现待后再详说。

  类的主体

  类的主体可以由类的成员组成,包括构造器,方法,字段,内含类等,也可以包含代码块(花括号内的代码),由一对花括号括起来。

  类成员的可视范围

  类成员的可视范围的控制可以通过在成员声明时在其左侧加上修饰词实现,修饰词的作用效果如下表所示:

修饰词 包含成员的类 包含所在类的程序包 继承所在类的类 一切范围
public
protected
不含修饰词
private

对于可是范围控制的修饰词,建议使用最严格的可视范围限制,即尽量减小修饰对象的可视范围,尽量用private,尽量少用public修饰类成员,除非该成员是一个常量。

  static修饰词

  当类的成员,如字段,方法的声明时左侧带有static修饰词时,则表示该成员为类成员(静态),而不是属于该类的一个实例,使用时,直接用类,而无需创建一个类的实例,当然也可以由实例引用,但不提倡这样使用,与之相对的则是实例成员,如一下类的定义中:

public class Bicycle {
//以下字段未使用static修饰词,则其为实例字段
private int cadence;
//以下字段使用了static修饰词,则其为类字段(静态字段)
private static int numberOfBicycles = 0;
//实例方法
public int getID() {
return id;
}
}

  类成员的使用无需创建实例,而实例成员的使用需要创建实例:

//使用上述类中的类字段,方法的使用类似
System.out.println(Bicycle.numberOfBicycles);
//使用上述类中的实例字段,方法的使用类似
System.out.println((new Bicycle()).numberOfBicycles);

  字段

  字段是类中最外部的变量,与局部变量有明显区别,属于类的成员,字段的声明包含如下部分:

  1. 最左边可以有0个或多个修饰词,可以为public,private,static等
  2. 字段的类类型
  3. 字段的名称

  方法

  方法是构成类声明的基本成员,一般情况下,方法的声明包含如下部分:

  1. 修饰词,如public,private等(可有可无)
  2. 返回数据类型,如果没有返回值,则用void代替
  3. 方法名称,与变量的命名方法类似
  4. 由圆括号括起来的参数,参数类型和参数名称成一组,多组由逗号隔开,圆括号内可为空
  5. throws关键词后跟一系列抛出的异常(可有可无)
  6. 方法的主体,由花括号括起来,包含java语句,花括号内也可为空。

  方法的签名:方法的签名由两个部分组成,名称和参数。

  方法的重载:一般情况下,一个类中的方法名称都是唯一的,但是java允许在一个类中有多个名称相同的方法,但是方法的签名必须不同,即参数类型或者数量不同,这就叫方法的重载:

public class DataArtist {
...
public void draw(String s) {
...
}
public void draw(int i) {
...
}
}

构造器

创建一个类的实例时,我们需要调用该类的构造器,构造器的声明和方法的声明类似,不同的是,他们的名称和类的名称相同,而且没有返回值,如果没用定义构造器,编译器会自动给该类插入一个其父类的无参数构造器(如果没有使用implements关键词指定父类,则其父类就是Object),称为默认构造器。

构造器和方法的参数

构造器和方法的参数类型可以为基本数据类型,也可以为类,当参数类型为基本数据类型时,在方法和构造器中无论对参数进行如何的操作,调用方法和构造器过后,参数的值都不会变,而当参数为一个对象或者对应一个对象的变量时,方法和构造器中对对象的操作最终会对对象的状态产生影响。传入方法和构造器的变量与对象的对应关系不会发生改变。

参数数量可变

方法或者构造器的参数数量可以是任意长度的,要使用任意长度的参数,就要在参数类型后面紧跟上一个省略号(三点),例如:

public test(int… integerVal){

//此处省略了方法内的代码

}

对象的创建

对象创建的表达式包含两个个部分:

  • new关键词

  • new关键词后跟一个构造器的调用

new关键词会给新创建的对象分配一定的内存,并将该内存(对象)的引用地址返回,一般用于变量的赋值或者用作参数。

对象的使用

对象创建之后,我们便可以使用其成员了,在一个类之外的代码使用该类的成员时,必须使用 对象引用表达式或者变量+点(.)+类成员的格式,如下所示:

//可以使用对应一个对象的变量的形式使用该对像的字段,方法的使用类似

var.fieldName

//或者使用能产生一个对象引用的表达式使用该对象的字段(如构造器),方法的使用类似
//该语句过后,没有对于该对象的引用,所以该对象的资源(内存等)便会被java虚拟机回收
int height = new Rectangle().height;
垃圾回收
对象创建之后变回占用系统的资源,java有一个垃圾回收的机制,即如果java运行时环境认为一个对象不在需要时,便会删除它,以释放其占用的资源。
判断一个对象是否可以被回收是通过判断该对象是否还被引用,如果一个对象仅被一个变量引用,而该变量失效之后,该对象便可被回收,也可以给一个变量赋值为null以消除该变量对于之前对象的引用关系。注意:一个对象可以对应多个变量。 方法的执行
遇到以下任意一种情况,程序会退出方法的执行:
  • 完成方法中所有的语句的执行
  • 执行完return语句过后
  • 抛出异常
在方法的声明中如果指定返回类型,则必须在方法主体中使用return语句以返回指定类型的值,当然如果声明中没有指定返回类型(即返回类型为void),也可以在方法中使用return语句以跳出该方法的执行,但return关键词后不能跟返回的值,否则会编译出错。
方法的返回类型可以为基本数据类型,也可以为类或者是借口,当返回类型为类或者是借口时,方法中实际返回的值可以是返回类的子类或者是返回借口的实现的类,这就叫java的共变返回类型。
this关键词
在实例方法或者是构造器中,this关键词是对包含该方法或者构造器的对象的引用(注意类方法中不能使用this关键词)。当方法或构造器需要引用被隐藏的字段(含有与字段名称相同的参数)或者当一个构造器需要引用另外一个构造器时,我们就需要使用this关键词,this的使用方法参照如下示例:
public class Rectangle {
private int x, y;
private int width, height; public Rectangle() {
//在构造器中如果需要调用类中其他的构造器,则需要用到this关键词
this(0, 0, 1, 1);
}
public Rectangle(int width, int height) {
this(0, 0, width, height);
}
public Rectangle(int x, int y, int width, int height) {
//该方法含有与字段名称相同的参数,要想使用该字段,则需要使用this关键词
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
...
}

字段的初始化
一般对于字段的初始化比较简单,比如
      int a=0;

  或者不对其进行赋值,然而如果要字段初始化的值需要进行比较复杂的运算比如循环时,我们可以在构造器里面进行运算,另外,我们还可以使用其他的方法。
静态字段的初始化
静态字段的初始化可以使用静态初始化代码块,静态初始化代码块在类主体的最外层,由static关键词后跟一个由花挂号括起来的代码块,静态初始化代码块内的代码在类初始化时按照顺序执行。
另外一种静态字段初始化的方法就是在类中定义静态方法,然后在字段声明中调用该静态方法。
实例字段的初始化
与静态初始化代码块类似,初始化代码块能够对实例字段进行初始化,初始化代码块相对于静态初始化代码块没有static关键词,每次创建一个对象时,初始化代码块中的代码都会按顺序执行。
同样,实例字段的声明中也可以调用类中的方法进行初始化。

java-类的更多相关文章

  1. 如何用Java类配置Spring MVC(不通过web.xml和XML方式)

    DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置方式, XML看起来太累, 冗长繁琐. 还好借助于Servl ...

  2. jvm系列(一):java类的加载机制

    java类的加载机制 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装 ...

  3. java类与实例

    最近在看设计模式,感觉自己对java的三大特性的理解不够清晰,搞不清楚抽象类.接口.泛型的用处和优缺点.设计模式学了一半,想着还是停下来脑补一下java的基础,就从java对象开始吧. 一.java对 ...

  4. oracle调用JAVA类的方法

    导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了,  1.操作系统需要拥有支持loadjava命令的jdk.  2.加 ...

  5. Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序

    先看一道Java面试题: public class Baset { private String baseName = "base"; // 构造方法 public Baset() ...

  6. hibernate中java类的成员变量类型如何映射到SQL中的数据类型变化

    hibernate映射文件??.hbm.xml配置映射元素详解--Hibernate映射类型 在从Hibernate的java的成员类型映射到SQL中的数据类型,其内映射方式它满足,SQL可以自己调制 ...

  7. kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件

    该kettle插件功能类似kettle现有的定义java类插件,自定java类插件主要是支持在kettle中直接编写java代码实现自定特殊功能,而本控件主要是将自定义代码转移到jar包,就是说自定义 ...

  8. Myeclipse中导入项目后java类中汉字注释出现乱码问题(已解决)

    今天重装系统,安装了新的Myeclipse后,导入之前的项目后,,出现了乱码问题.乱码问题主要是java类中的注释,而jsp页面中汉字却完好如初: 右键项目,查看项目的编码格式,UTF-8,把java ...

  9. Java类初始化

    Java类初始化 成员变量的初始化和构造器 如果类的成员变量在定义时没有进行显示的初始化赋值,Java会给每个成员变量一个默认值 对于  char.short.byte.int.long.float. ...

  10. 深入研究Java类装载机制

    目录 1.为什么要研究java类装在机制? 2.了解类装载机制,对于我们在项目开发中有什么作用? 3.装载实现细节. 4.总结 一.为什么药研究Java类装载机制 java类加载机制,便于我们使用自定 ...

随机推荐

  1. hdu1018(数位)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1018 题意:求n!的数位(即n!有多少位): 思路:对于一个数x,它的数位ans=log10(x): ...

  2. Python中判断是否为闰年,求输入日期是该年第几天

    #coding = utf-8 def getLastDay(): y = int(input("Please input year :")) m = int(input(&quo ...

  3. iOS开发Xcode7真机调试教程

    从Xcode7开始,Xcode 不需要$99/$299升级开发者直接可以进行真机调试 调试步骤 1.假设已经你已经有了苹果账号,下载并安装好了Xcode7 2. 打开Xcode-> Prefer ...

  4. Android ANR分析(2)

    转自:http://blog.csdn.net/ruingman/article/details/53118202   定义 主线程在特定的时间内没有做完特定的事情 常见的场景 A.input事件超过 ...

  5. 设计模式学习之代理模式(Proxy,结构型模式)(11)

    参考地址:http://www.cnblogs.com/zhili/p/ProxyPattern.html 一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访 ...

  6. x86架构的android手机兼容性问题

    x86架构的android手机兼容性问题 http://www.cnblogs.com/guoxiaoqian/p/3984934.html 自从CES2012上Intel发布了针对移动市场的Medf ...

  7. Android 线程更新UI报错 : Can't create handler inside thread that has not called Looper.prepare()

    MainActivity中有一个按钮,绑定了save方法 public void save(View view) { String title = titleText.getText().toStri ...

  8. git revert 和 git reset的区别

    git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 作为一次最新的提交    * git revert HEAD               ...

  9. golang 索引

    入门的基础路线 a Tour of GoEffective GoGo By Example 以上的三部分通读算是入门. 4个重要的组成部分 1. 基础知识2. 并发特性3. 异常处理4. 常用开源项目 ...

  10. 模板模式与策略模式/template模式与strategy模式/行为型模式

    模板模式 模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去 ...