类与对象

类(class)和对象(object)是面向对象程序设计方法中的最核心概念

类的基本概念

:是对某一类事物的描述,是抽象的、概念上的定义;

对象:是实际存在的属该类事物的具体个体,因而被称为实例

方法:封装在类中的函数,在java语言中函数被称为方法

定义类

定义类,实际上是定义类的属性与方法,在使用类之前,必需先定义它,然后才可利用定义的类来声明相应的变量,并创建对象。

类的一般结构:

1
2
3
4
5
6
7
8
9
10
11
[类修饰符] class 类名称
{
[修饰符] 数据类型 成员变量名称;
.....
[修饰符] 返回值的数据类型 方法名(参数1 ,参数2, ...., 参数n)
{
语句序列;
return [表达式];
}
..........
}

方括号[]中的修饰符是可选项,它是一组限定类,成员变量和成员方法是否可以被程序里的其他部分访问的调用的控制符。其中,类标识符可以分为公共访问控制符抽象类说明符最终类说明符缺省访问控制符四种。

修饰符 含义
public 将一个类声明为公共类,它可以被任何对象访问
abstract 将一个类声明为抽象类,没有实现方法,需要子类提供方法的实现,所以不能创建该类的实例
final 将一个类声明为最终类,即非继承类,表示它不能被其他类所继承
缺省 缺省修饰符时,则表示只有在相同包中的对象才能使用这样的类

一个类可以有多个修饰符,但abstract和final相互对立,所以不能同时应用在一个类的定义中

成员变量

/因为我自己有些C语言基础,所以在理解java语言元素时爱用C语言中的相似元素来类比/

成员变量就好像C语言中的全局变量

格式如下:

1
[修饰符] 变量类型 变量名[ = 初值]

成员变量的修饰符有访问控制符静态修饰符最终修饰符过渡修饰符易失修饰符

修饰符 含义
public 公共访问控制符。指定该变量为为公共的,它可以被任何对象的方法访问
private 私有访问控制符。指定该变量只允许知己的类的方法访问,其他任何类(包括子类)中的方法均不能访问此变量
protected 保护访问控制符。指定该变量只可以被它自己的类及其子类或同一包中的其他类访问
缺省 缺省访问控制符时,则表示在同一个包中的类可以访问此成员变量,而其他包中的类不能访问该成员变量
final 最终修饰符。指定此变量的值不能改变
static 静态修饰符。指定该变变量被所有对象共享,即所有的实例都可以使用该对象
transient 过度修饰符。指定该变量是一个系统保留、暂无特别作用的临时性变量
volatile 易失修饰符。指定该变量可以同时被几个线成控制和修改

修饰符的要求:除了访问控制修饰符有多个以外,其他的修饰符只有一个。一个成员变量可以被两个以上的修饰符同时修饰。

成员方法

声明方法的语法格式如下:

1
2
3
4
5
[修饰符] 返回值的数据类型 方法名(参数1,参数2,...,参数n)
{
语句序列;
return [表达式];
}

如果不需要传递参数到方法中,只需要将方法名后的圆括号写出即可,不必填入任何内容,另外,若方法没有返回值,则返回值的数据类型应该是void,且return语句可以省略。

修饰符 含义
public 公共访问控制符。指定该方法为公共的,它可以被任何对象的方法访问
private 私有访问控制符。指定该方法只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能访问此方法
protected 保护访问控制符。指定该方法只可以被它的类及其子类或同一包中的其他类访问
缺省 缺省访问控制符时,则表示在同一个包中的类可以访问此成员方法,而其他包中的类不能访问该成员方法
final 最终修饰符。指定该方法不能被覆盖
static 静态修饰符。指定不需要实例化一个对象就可以调用的方法
abstract 抽象修饰符。指定该方法只声明方法头,而没有方法体,抽象方法需在子类中被实现
synchronized 同步修饰符。在多线程程序中,该修饰符用于对同步资源加锁,以防止其他线程访问,运行结束后解锁
native 本地修饰符。指定此方法的方法体是用其他语言(如C语言)在程序外编写的

成员变量与局部变量的区别

类额成员变量和方法中的局部变量,其区别和C语言中全局变量和局部变量的区别是一样的。

对象的建立与使用

一个对象的生命周期为:创建->使用->销毁

创建对象

创建步奏只需要两步:

  1. 声明指向“由类所创建的对象”的变量
  2. 利用new运算符创建新的对象,并指派给前面所创建的变量
1
2
Scanner scanner;
scanner = new Scanner;

对象的使用

创建对象后,就可以对对象的成员进行访问,通过对象来引用对象成员的格式:

对象名 . 对象成员

eg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package way;
class Cylinder
{
double radius;
int height;
double pi = 3.14;
void area()
{
System.out.println("底面积="+ pi*radius*radius);
}
double volume()
{
return (pi *radius *radius)* height;
}
}

public class way01 {
public static void main(String[] args) {
Cylinder volu;
volu = new Cylinder();
volu.radius = 2.8;
volu.height = 5;
System.out.println("底圆半径 = "+volu.radius);
System.out.println("圆柱的高 = "+volu.height);
System.out.print("圆柱");
volu.area();
System.out.println("圆柱体积 = " +volu.volume());
}
}

eg2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package way;

import java.util.Scanner;

class student
{
int age;
String name;
char sex;
long number;
void people()
{
System.out.print("学生姓名:%s 性别:%c 年龄:%d 学号:%d".formatted(name,sex,age,number));
}
}


public class way02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
student std;
std = new student();
std.name ="dasd";
std.age = 19;
std.number = 202545131L;
std.sex = 'M';
std.people();





}
}

由上边的两个例子可以看成,在主方法main()内如果需要访问类的成员,是通过格式

对象名.成员名

进行的。

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2023 dwx
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信