声明
本文章是本人在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”
对于可变长参数的方法,传递给可变长参数的实际参数可以是多个对象,也可以是一个对象或者是没有对象