1.4类的成员方法

本文详细介绍了Java中的final关键字用法,包括final实例变量和类变量的初始化规则。同时,讲解了方法成员的概念,包括实例方法和类方法的声明格式及其调用方式。通过示例展示了参数传递的过程,以及静态和实例方法的区别。最后,提到了可变长参数列表的使用,以及如何将函数转换为静态类方法。
摘要由CSDN通过智能技术生成

声明

本文章是本人在bilibili视频的学习笔记,视频地址清华大学java语言49讲(郑莉教授)

凡是final定义的变量,必须在构造方法结束前给予确定的值

final实例变量必须在每个构造方法结束之前赋初值,以保证使用之前会被初始化,final类变量必须在声明的同时初始化(构造任何一个对象之前必须存在)

类变量在任何一个对象产生之前,就应该确定存在,它的值不依赖于构造方法去初始化

方法成员

方法成员是定义类的行为,也分成实例方法和类方法

方法成员的声明

声明格式

[public] [protected] [private]
[static] [final] [abstract] [native] [synchronized]
返回类型 方法名([参数列表])
{
方法体
}

//访问控制属性
//修饰符

方法调用

给对象发消息意味着调用对象的某个方法
#从对象中取得信息
#修改对象的状态或进行某种操作
#进行计算及取得结果等

//如果属于对象的方法,通过对象调用;如果属于整个类的方法,通过类名来调用

参数传递

//值传递
//引用传递 //c语言可以传指针

静态方法

  • 使用static关键字修饰的方法,属于类的公有方法

实例方法

  • 表示特定对象的行为
  • 声明时前面不加static修饰符
  • 使用时需要发送给一个类实例

//调用对象方法相当于给对象打招呼,你只需要给他打声招呼他就执行了他的功能
(给Circle类下的某个对象打招呼,叫他计算自己周长)

在Circle类中声明计算周长的方法
public class Circle{
static double PI=3.14159264;
int radius; //实例变量
public double circumference(){
return 2PIradius;
}
}

由于radius是实例变量(没有声明static就是吧)
在程序运行时,java会自动取其接收者对象的属性值

也可将circumference方法体改为:
return 2PIthis.radius;
//关键字this代表此方法的接收者对象

方法调用测试

public class CircumferenceTester{ public static void main(String args[]){ Circle c1=new Circle(); c1.radius=50; Circle c2=new Circle(); c2.radius=10;
  double circum1=c1.circumference();
  double circum2=c2.circumference();
  System.out.println("Circle 1 has circumference"+circum1);
  System.out.println("Circle 2 has circumference"+circum2);
}

}

运行结果
Circle 1 has circumference 314.159265
Circle 2 has circumference 62.831853

//叫c1计算周长,然后保存到变量circum1中

参数

要完成消息(方法)的功能,需要一些附加指定的数据

例子二(方法)

圆类
//在Circle类及Rectangle类中声明计算面积的方法area();
 public class Circle{
     public double PI=3.14159265;
     int radius;

     public double circumference(){
          return2*PI*radius;
     }                            //计算圆周长(方法)
   public double area(){
       return PI*radius*radius;
   }                              //计算圆面积(方法)

public void enlarge(int factor){
       radius=radius*factor;
   }                            //半径扩大参数(factor)倍(方法)

public boolean fitsInside (Rectangle r){
 return(2*radius<r.width)&&(2*radius<r.height)
   }                          //圆是否能被矩形包裹(方法)
}
矩形类
public class Rectangle{
   double width;
   double height;
   public double area(){
        return width*height;
    }
}

属性是此对象区分于彼对象的方式(应该具体值要不一致),具体值一致的都存static了

同一类对象的行为是一样的(一模一样)
对象的方法默认是作用于对象自己上面

有些方法是必须属于整个类的
(一个新成立的学校,没有学生,如果知道学生总数呢?不可能让学生说,即使有学生以后,也不要让学生说,应该有一个且仅有一份的方法,去做这件事)
(一个对象也没有是也可以调用的方法)
(此对象的运行可以与对象无关)

我们对于单个函数的需求总是需要的
摄氏度_华氏度
人民币_美元

数学函数,sin cos
C语言中我们熟悉的函数,Java按分类存放Class中
变成静态成员方法

类名.方法名 即可调用这个函数

将摄氏温度(centigrate)转换成华氏温度(fahrenheit)

#转换公式 fahrenheit=centigrate*9/5+32
#除了摄氏温度值及公式中需要的常量值,此功能#不依赖于具体的类实例的属性值。因此可声明类方法
转换方法centigrateToFahrenheit放在类Converter中

public class Converter{
public static int centigrateToFahrenheit(int cent){
return(cent *9/5+32);
}
}

方法调用
Converter.centigrateToFahrenheit(40)
//类名.方法名 (不需要自己构造对象)

可变长的参数列表

static double maxArea(Circle c,Rectangle…varRec){
     Rectangle[ ] rec=varRec;
     for(Rectangle r: rec){
     }
}

public static void main(String[ ] args){
   Circle c= new Circle();
   Rectangle r1=new Rectangle();
   Rectangle r2=new Rectangle();

      System.out.println("max area of c and r1 is"+maxArea(c,r1))
     System.out.println("max area of c and r2 is"+maxArea(c,r2))
    System.out.println("max area of only c is"+maxArea(c))
}

从Java5开始,可以在方法的参数中使用可超长参数
可变长参数使用省略号表示,其实质是数组例如,“String…s"表示"String[ ] s”

对于可变长参数的方法,传递给可变长参数的实际参数可以是多个对象,也可以是一个对象或者是没有对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值