方法的定义和调用
一、方法的定义
方法(Method)
方法包括一个方法的开头和一个方法体
[修饰符] [返回值类型] 方法名(参数类型 参数名){
方法体;
return 返回值;
}
1、修饰符
*访问修饰符
用来控制类、方法和变量的访问权限
public:公共访问修饰符 protected:保护访问修饰符
default:默认访问修饰符 private:私有访问修饰符
(1)public:公共访问修饰符
使用 public 修饰的变量、方法或类可以被任意访问,无访问限制。也就是说,public 修饰的成员可以被任何包下的任何类访问
package com.sh.work;
public class Person {
public String name;//name:String类型的公有(public)成员变量,用于存储人员姓名
public int age;//age:int类型的公有(public)成员变量,用于存储人员年龄
public void sayHello() {//一个公有(public)无返回值的方法,被调用时会在控制台输出
System.out.println("Hello, World!");
}
//该类包含一个main方法,属于类级别的静态方法。
public static void main(String[] args) {
Person person = new Person();//在main方法中,创建了一个名为person的Person对象
// 随后为person对象的name属性赋值为"Alice",age属性赋值为30,然后调用person对象的sayHello方法
person.name = "Alice";
person.age = 30;
person.sayHello();
}
}
//当在其他类中想要使用Person类时,需要使用import com.sh.work.Person;将Person类引入到代码中
(2)protected:保护访问修饰符
使用 protected 修饰的变量、方法或类可以被其本身、子类、同一包内的其他类访问。也就是说,protected 修饰的成员可以通过子类对象、同一包内的对象访问,不能通过类名直接访问
package com.sh.work;
public class Person1 {
protected String name;
protected int age;
protected void sayHello() {
System.out.println("Hello, World!");
}
}
package com.sh.work;
public class Student extends Person1 {
public void study() {
System.out.println("Studying...");
}
}
//继承自Person1类,因此可以访问并继承Person1类中的受保护成员变量和方法
//声明了一个成员方法study(),用于输出"Studying…"。
package com.sh.work;
public class Main {
public static void main(String[] args) {
Student s = new Student();
s.name = "Tom";
s.age = 18;
s.sayHello(); // 子类可以访问父类的 protected 成员方法
}
}
//在main方法中创建了一个Student对象 s
//设置了s对象的name和age属性为 “Tom” 和 18
//调用s对象的sayHello() 方法,由于sayHello()方法是受保护的,可以在子类中访问父类的受保护方法并输出"Hello, World!"
(3)default:默认访问修饰符
如果没有为变量、方法或类指定任何访问修饰符,则默认为 default 访问修饰符,也叫包访问修饰符。使用 default 修饰的变量、方法或类只能被相同包内的其他类访问
package com.sh.work;
class Person2 {
String name;
int age;
void sayHello(){
System.out.println("Hello,World!");
}
}
package com.sh.work;
public class Mainp {
public static void main(String[] args) {
Person2 p = new Person2();
p.name = "Tom";
p.age = 18;
p.sayHello();//可以访问同包中的类
}
}
(4) private:私有访问修饰符
使用 private 修饰的变量、方法或类只能被其本身访问,不能被其他类访问。也就是说,private 修饰的成员变量和方法只能在类内部访问,不能通过对象或类名访问
*非访问修饰符
不用于控制类、成员变量、方法访问权限的一些特定功能标识符
例如:static、abstract、final、synchronized、volatile、transient
(1)static
static 关键字
含义: 静态的,全局的
用途: 用于修饰类、方法、变量和代码块
静态变量:
static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。静态变量也被称为类变量。局部变量不能被声明为 static 变量。
静态方法:
static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。
静态代码块:
用static修饰的代码块也叫静态代码块,是在类中独立于类成员的static语句块,它不在任何的方法体内,可以有多个,位置可以随便放,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
无论是变量,方法,还是代码块,只要用static修饰,就是在类被加载时就已经"准备好了",也就是可以被使用或者已经被执行,都可以脱离对象而执行。反之,如果没有static,则必须要依赖于对象实例。
特性:
如果一个类要被声明为static的,只有一种情况,就是静态内部类。
静态内部类可以声明普通成员变量和方法,而普通内部类不能声明static成员变量和方法。用static修饰的方法,只能调用static变量和static方法,不能以任何形式引用this和super,是抽象方法abstract
用static修饰的变量,在定义时必须要进行初始化,且初始化时间要早于非静态变量。
(2) abstract
抽象类:抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误,抽象类可以包含抽象方法 和 非抽象方法。
抽象方法:
抽象方法是一种没有任何实现的方法,该方法的具体实现由子类提供。
抽象方法不能被声明成 final 和 static,任何继承抽象类的 子类必须实现父类的所有抽象方法,除非该子类也是抽象类。如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。
抽象类可以不包含抽象方法。抽象方法的声明以分号结尾(;)
(3) final
final 类不能被继承,没有类能够继承 final 类的任何特性,final 变量一旦被赋值就不能被改变。
final 方法不能被重写(可以被重载)
注意:
对于引用类型 来说, “不可变” 说的是 地址不可变
对于基本类型 来说, “不可变” 说的是 数据不可变