重新开始学Java——类和对象
程序员文章站
2022-07-15 17:07:05
...
Java 是面向对象的程序设计语言,类是面向对象的重要内容,可以把类当成一种自 定义的类型,可以使用类来定义变量,这种变量统称为引用变量。也就是说,所有类是 引用类型。
面向对象的程序设计中有两个重要的概念:类(class)和对象(object,也被称为实 例,instance),其中类是一批对象的抽象,可以把类理解成某种概念;对象才是一个 具体存在的实体,从这个意义行来看,日常所说的人,其实都是人的实例,而不是人类。 Java 语言是面向对象的程序设计语言,类和对象是面向对象的核心。Java 语言提供了 对创建类和创建对象简单的语法支持。
Object:在 Java 语言来看,万事万物皆对象(所有的东西都可以当作一个对象)。是一个具体的物体(能看得见摸得着的东西),它是某个类的实例(instance)。
Class 类:是一类相关的 物体的 抽象化在 Java 语言中,Class 是创建对象的模版。
在类中可以定义属性和方法:
属性:用来反应当前类型的事物的特征;
方法:用来反应当前类型的事物可以干什么(做什么)。
例如 :
/**
* 创建一个 用 class 修饰的 Rabbit,它表示 Rabbit 类型,是对一类事物的抽象
*/
public class Rabbit{
// 属性:用来反应当前类型的事物的特征
String name;
int age;
char sex;
// 方法:用来反应当前类型的事物可以干什么,比如吃、喝、玩
public void eat( String food){
System.out.println("吃"+food);
}
}
如何使用呢?(参看数组的使用方式)[此时要注意,TestRabbit与Rabbit 这两个类是要放在一起的]
public class TestRabbit {
public static void main(String[] args) {
/*****************声明Rabbit类型的变量 *****************************/
int[] array;// 声明一个数组
// 声明一个Rabbit 类型的变量 r ,这个变量会存放在在main方法的方法栈中
Rabbit r = null; // 通过等号为改变来那个赋值为null
System.out.println("Rabbit:" + r);
/*****************创建Rabbit类型的对象,(创建一个Rabbit类的实 例)**************/
// 为每个数组元素赋予默认值
array = new int[10]; // 创建一个数组对象,并将其堆内存中的首地址赋给array 变量
System.out.println("数组的地址是:" + array);
// 为属性 赋予默认值(默认值 跟 数组的默认值 是一样的 比如 int类型默认是 0)
r = new Rabbit();// 创建一个Rabbit 对象,并将其堆内存中的首地址赋给 r 变量
System.out.println("Rabbit对象的地址是:" + r);
/****************输出Rabbit对象(实例)的默认值 ******************************/
// 获得到默认值
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " , ");
}
System.out.println();
// 圆点运算符 可以理解成 汉字中的 “的”
System.out.println("name" + r.name);// 输出r 的name(r 存储的 那个地址 对应的 对象的 name)
System.out.println("age" + r.age);// 输出r 的age (通过 r 变量 存储的地址 找到 那个对象后 ,再找 age)
System.out.println("sex " + r.sex);// 输出r 的sex
/***************为Rabbit对象(实例) 的属性 赋予相应的值 **************/
// 为数组中的元素赋值
array[0] = 100;
array[1] = 200;
array[2] = 300;
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " , ");
}
System.out.println();
// 为 r 所引用的对象 的 各个属性 赋予相应的值
r.name = "罗马";
r.age = 1000;
r.sex = '女';
System.out.println("name:" + r.name);// 输出r 的name(r 存储的 那个地址 对应的 对象的 name)
System.out.println("age:" + r.age);// 输出r 的age (通过 r 变量 存储的地址 找到 那个对象后 ,再找 age)
System.out.println("sex :" + r.sex);// 输出r 的sex
/********通过具体的对象(实例)来调用Rabbit 类中定义的方法 *********/
// r 的 eat 方法 执行 (找到r 所引用的对象,执行它的eat 方法)
r.eat("快餐");
}
}
简单的写法(主要研究 new Rabbit() 干了什么事情)
public class TestRabbit1 {
public static void main(String[] args) {
/*****************声明Rabbit类型的变量 *****************************/
// 声明一个Rabbit 类型的变量 r ,这个变量会存放在在main方法的方法栈中
Rabbit r = null; // 通过等号为改变来那个赋值为null
System.out.println("Rabbit:" + r);
/*****************创建Rabbit类型的对象,(创建一个Rabbit类的实 例)**************/
/**
* 1、new 关键字 负责在堆内存中开辟空间
* 2、为Rabbit对象的各个属性赋予默认值
* 3、执行 Rabbit()中的代码(执行构造方法 中的代码)
* 4、将 内存 中的 该对象 首地址 返回 ( 通常在 前面用 等号 赋给某个
变量 ,比如 r )
*/
r = new Rabbit();// 创建一个Rabbit 对象,并将其堆内存中的首地址赋给 r 变量
System.out.println("Rabbit对象的地址是:" + r);
/****************输出Rabbit对象(实例)的默认值 ******************************/
System.out.println("name" + r.name);
System.out.println("age" + r.age);
System.out.println("sex " + r.sex);
/***************为Rabbit对象(实例) 的属性 赋予相应的值 **************/
r.name = "罗马";
r.age = 1000;
r.sex = '女';
System.out.println("name:" + r.name);
System.out.println("age:" + r.age);
System.out.println("sex :" + r.sex);
/********通过具体的对象(实例)来调用Rabbit 类中定义的方法 *********/
r.eat("快餐");
}
}
那么此时就可以总结一下,那么一个类中可以有什么(是暂时的,如果不理解,可以参看后边的文章):
[修饰符] class 类{
0 到 n 个构造方法( constructor );
0 到 n 个属性( field ) ;
0 到 n 个方法( method )定义;
}
类的属性定义语法:
[ 修饰符 ] 属性类型 属性名 [ = 默认值 ] ; // 如: private String name ;
属性语法格式详解:
修饰符: 可选(可以省略)
关于权限的修饰符: public、 protected、 private (三者选其一)
关于常量和静态的修饰符: static 、 final ( 可以连用 )
属性类型: 指属性的类型
可以是 Java 语言中允许的任何数据类型(8 中基本数据类型和引用类型)
属性名: 即属性的名称(Sun 的官方说法叫做 Field<字段>)
属性名必须是合法的标识符
方法语法格式:
[ 修饰符 ] 方法返回值类型 方法名 (形参列表){
//方法体
}
方法语法详解:
修饰符: 可选(可以省略)
访问权限修饰符: public 、 protected 、 private (三选一)
其他的: abstract、 final 、 static (前面两个不能同时出现)
方法返回值类型: 可以是 基本类型、 引用类型、 void
方法名:
望文生义, 即看到名字就知道该方法完成什么功能
建议使用英文单词, 单个单词全小写
多个单词从第二个单词起逐个首字母大写
形参列表: 就是方法接受的参数(在后面的方法详解中讲解)
构造方法语法格式:
[ 修饰符 ] 类名 ( [ 形参列表 ] ){
//方法体
}
构造方法语法详解:
修饰符: 可选, 可以是 public、 protected、 private 之一
类名: 即构造方法的名字, 规定必须跟类名相同
形参列表: 可选, 跟普通方法的参数列表一样
构造方法一定不能书写返回类型!!!
构造方法注意的点:
构造方法顾名思义, 作用在于构造一个对象
如果一个类没有构造方法, 那么可能就无法构造该类的实例
即使程序员没有给类写构造, 系统也会提供默认的无参空构造
一旦显式地为类提供了构造, 系统将不再提供默认的无参空构造
转载于:https://my.oschina.net/lujiapeng/blog/2249916