0
点赞
收藏
分享

微信扫一扫

java入门——类与对象


文章目录

  • ​​类的认识​​
  • ​​类的创建​​
  • ​​对象的创建和使用​​
  • ​​参数的传递​​
  • ​​匿名对象​​
  • ​​小结​​

类的认识

什么是类呢?首先举个简单的例子:

java入门——类与对象_成员变量

这是一个学生类,学生下面有不同的对象Student1,Student2,…… Studentn,学生有自己的姓名,性别,身高,年龄等信息,这些信息是学生类的属性,而每个学生有着自己的行为,比如:努力学习,参加竞赛,唱歌等等行为,由此说明类有着自己的属性和行为,在类中我们通过成员变量来描述属性,通过成员方法来描述行为。

通过上述描述,我们可以有很明显的感觉,类是抽象的,我们不能够详细地描述出来,但是对象是实实在在存在的个体。具有相同的属性和行为的对象共同的组成了一个类,就像上述的学生类,每个学生都有自己的姓名,身高等,同样学生需要学习,做自己的事情等。

类的创建

📖类的定义格式

[类修饰符] class 类名{

[修饰符] 数据类型 成员变量名;

[修饰符] 返回值的数据类型 方法名(参数1,参数2,…,参数n){

方法体;

return [表达式];

}

}

🥠类的举例

public class Student{
String name;
double height;
char sex;
int age;
public void read(){
System.out.println("在看书");
}
public double average(double Chinese,double English){
double aver=(Chinese+English)/2;
return aver;
}
}

需要注意的是:

🍥相互对立的修饰符不能同时在一个类中使用;

🍥一个成员变量可以被两个以上的修饰符同时修饰,但是有些修饰符不能同时使用;

🍥成员方法与成员变量类似。

我们可以轻易地发现在类中有变量,在方法中也可以有变量,但是这两种变量究竟有什么区别呢?

在类中定义的变量称为成员变量,而在方法中定义的变量称为局部变量。

  • 修饰符有异同;
  • 从内存角度看,成员变量属于对象的一部分,而对象是存在于堆内存中的,局部变量是存在栈内存当中的;
  • 从生存时间看,由于成员变量是对象的一部分,所以有对象就有成员变量,也就是说随着对象的创建而存在,局部变量是属于方法的一部分,当方法被调用时,局部变量产生,当方法结束时,局部变量自动消失;
  • 成员变量一般情况下没有被赋值,会被自动地根据类型进行赋值。局部变量必须赋值后才能使用。

对象的创建和使用

对象的生命周期是:创建–>使用–>销毁。

对象是类的实例,对象是属于某个已知的类。所以创建一个对象我们可以通过下列步骤创建:

//步骤1:声明指向“由类所创建的对象”的变量
Student s1;
//利用new运算符创建新的对象,并将其指派给上面所创建的变量S1
s1=new Student(); //变量s1指向new创建的新的对象

由于步骤1中有s1,步骤2中也有s1,所以我们可以猜想是否可以合并一下变成下面的形式:

Student s1=new Student();

答案是可以的。对于新创建的对象s1,因为是通过Student类创建而来的,所以它具有保存数值的变量name、height、sex、age变量,拥有read、average方法。

我们以Student作为变量类型在栈空间中定义了变量s1,用来指向通过new运算符在堆内存中创建的一个Student类的实例对象。

我们来看一下内存分配情况:

java入门——类与对象_局部变量_02

实际上,s1变量是指向由Student所创建的对象,故s1可以看做是对象的名称,s1并不是对象本身,我们可以理解s1起到的是引导作用。

我们所定义的变量都需要赋初值,当对象被创建时,对象中各种类型的成员变量都会自动初始化。

成员变量类型

初始值

成员变量类型

初始值

成员变量类型

初始值

byte

0

long

0L

boolean

false

short

0

float

0.0F

char

‘\u0000’

int

0

double

0.0D

所有引用类型

null

对象创建的作用就是为了我们能够访问到对象的成员,访问格式如下:

🍥对象名.对象成员

为了更好的记忆,我们可以将格式中的.理解为"的"的意思。简单举例:s1.name代表的是对象s1的name成员,也就是s1的名字。对对象的成员赋值例如下面格式:s1.name=“张三”。

在类定义内部,方法与方法之间也可以实现相互调用,比如说我们数学上学的圆柱体,首先我们需要有底面圆半径和圆柱高,通过半径计算底面圆面积,借用面积与高实现体积的计算。

java入门——类与对象_java_03

在体积的计算中,我们需要借用面积,而用语言表达则是,在求体积的方法中调用求面积的方法,这就是在类的内部实现方法之间的调用。

🍪一丢丢的小细节:

🍥在类的内部中,本类的某个方法需要调用本类中其他方法时,不需要加上对象名;

🍥如果强调是对象本身的成员的话,则可以再成员名前加this关键字

🍥当成员变量与成员方法中的局部变量同名时,在方法内对同名变量的访问是指的局部变量,当我们特指成员变量时,需要用this关键字。

参数的传递

以变量为参数调用方法

示例:

public void average(double Chinese,double English){
double aver=(Chinese+English)/2;
System.out.println(aver);
}

在方法中的参数变量Chinese,English都是局部变量,它们的作用范围为average方法内部,超出范围无效。

以数组为参数或返回值的方法调用

传递数组示例:

pubilc static void main(String[] args){
int a[]={6,23,4,7};//定义一维数组
MinNumber min_1=new MinNumber();
min_1.least(a);//将一维数组a传入laest()方法
}
class MinNumber{//定义一个类
public void least(int arr[]){//参数arr接收一维整型数组
int temp=arr[0];
for(int i=0;i<arr.length;i++)
if(temp>arr[i])
temp=arr[i];
System.out.println("最小的数为:"+temp);
}
}

返回值为数组类型的方法示例:

pubilc static void main(String[] args){
int a[][]={{1,2,3},{4,5,6},{7,8,9}};//定义二维数组
int b[][]=new int[3][3];
Change_1 pose=new Change_1();
b=pose.transpose(a);
}
class Change_1{
int temp;
int [][] transpose(int arr[][]){//返回值和参数均为二维数组
for(int i=0;i<arr.length;i++)
for(int j=i+1;j<arr[i].length;j++){
//实现行列交换
temp=arr[i][j];
arr[i][j]=arr[j][i];
arr[j][i]=temp;
}
return array;//返回二维数组
}
}

方法中的可变参数
📖语法格式

返回值类型 方法名(固定参数列表,数据类型…可变参数名)

{

方法体

}

数据类型…可变参数名由于个数可变,所以相当于数组。可变实参实际上以数组的形式被保存下来,而可变参数名就是数组名。

🍥如果方法中有多个参数,可变参数必须放在最后一位;

🍥可变参数符号"…"要位于数据类型和数组名之间,其前后可有空格;

🍥调用可变参数方法时,在方法体中以数组的形式访问可变参数。

匿名对象

在生活中匿名代表着什么——没有名字,这里的匿名对象也是没有名字,举个例子,我们之前创建对象是这样创建的:

Student s1=new Student();
s1.average(80.5,78.5);
//当我们采用匿名对象时
new Student().average(80.5,78.5);

从上述代码段看,我们将第一行的s1整体代换到第二行的s1中,在第四行代码中,new Student()就是匿名对象。当方法执行完后,该对象就成为了垃圾。

那么问题来了,我们什么时候使用匿名对象呢?

🍥如果对一个对象只需要一次调用,我们使用匿名对象;

🍥将匿名对象作为实参传递给一个方法调用时。比如我们定义一个方法getMessage需要接收Student类对象作为参数则:

public static void getMessage(Student s1){ } //我们可以用这样的语句调用getMessage方法 getMessage(new Student());

小结

🍥类是把事物的数据和相关功能封装在一起,形成的一种特殊结构;

🍥同一个java程序中,最多只能有一个类声明为public,此时文件名要和public类名保持一致;

🍥若方法本身没有返回值,则必须在方法定义的前面加上关键字void。

📖回顾:

🍪匿名对象是什么?

🍪成员变量和局部变量有哪些异同?

🍪创建属于某类的对象需要那些步骤?

🍪在类的外部我们能否访问到类内部的成员?

🍪当需要强调"对象本身的成员"时,我们应该怎么做?


举报

相关推荐

JAVA入门——浅谈类与对象

类与对象java

Java类与对象

JAVA:类与对象

JAVA//对象与类

java:类与对象

Java 类与对象

0 条评论