目录
目录
方法的四要素:访问修饰符, 返回值类型 ,方法名(形参), {方法体}
类的方法有四种:
无参无返回值
无参有返回值
有参无返回值
有参有返回值
示例:
创建对象
类名 对象名 = new 类名();
使用对象
对象名.属性名
对象名.方法名()
f(x) = 3x^2 + 4x + 1; 此时 x表示形参
求f(2) = ? 此时 2表示实参
简单来说 方法可以分为四类
无参无返回值:让王浩下去一趟(不用带东西下去,回来也不用给我东西)
有参无返回值:给王浩10元,让他下去一趟(需要带东西下去,回来不用给我东西)
无参有返回值:让王浩下去给我买瓶水(不带东西下去,回来需要给我一瓶水)
有参有返回值:给王浩10元,让他下去给我买瓶水(需要带东西下去,回来需要给我一瓶水)
//学生类
public class Student{
String studentName;
//无参无返回值
public void goingDown(){
sout(studentName + "下去了");
}
//有参无返回值
public void goingDown(String x){
sout(studentName + "拿着" + x +"下去了");
}
//无参有返回值
public String goingDown(){
sout(studentName + "下去了");
return "华子";
}
//有参有返回值
public String goingDown(String x){
sout(studentName + "拿着" + x +"下去了");
return "水"
}
}
Student zhai = new Student();//创建学生对象
zhai.studentName = "zhai";
//调用无参无返回值时:
zhai.goingDown();
//调用有参无返回值时:
zhai.goingDown(10);
//调用无参有返回值时:
String result = zhai.goingDown();
//调用有参有返回值时:
String result = zhai.goingDown(10);
无参方法:
如果方法没有返回值,返回值类型为void;
方法有返回值,方法中必须使用关键字 return 返回该值,返回值类型为该返回值的类型。
return存在与方法逻辑的末尾。每条逻辑只能返回一次;
方法调用:先创建对象,用“ 对象名 + 方法名();的方法进行调用。
//方法
public class AutoLion {
String color = "黄色"; //颜色
/*跑*/
public void run(){
System.out.println("正在以0.1米/秒的速度向前奔跑。");
}
/*抢球*/
public String robBall(){
String ball = "球" ;
return ball;
}
/*获得颜色*/
public String getColor(){
return color;
}
/*显示狮子特性*/
public String showLion(){
return "这是一个" + getColor() + "的玩具狮子!";
}
}
//调用方法
public class TestLion {
public static void main(String[ ] args) {
AutoLion lion = new AutoLion();
String info = lion.showLion();
System.out.println(info);
lion.run();
System.out.println("抢到一个" + lion.robBall());
}
}
同一个类中方法允许互相调用,实现重用,提高效率。
同类中调用方式: 方法名();
有参方法:
语法:
<访问修饰符> 返回类型 <方法名>(<形式参数列表>) {
//方法的主体
}
访问修饰符:只能用public,protected或private。指该方法被访问的权限范围了。
形参为 参数类型 + 变量 ,有多个形参,用“ ,”隔开。表示传递的数据。
如果形参列表为空,就是无参方法。
调用方法:
实例化对象,再调用方法。
对象名.方法名(参数1, 参数2,……,参数n)
调用时的参数为实参,实参与形参要一一对应,包括类型,数量,顺序等。
基本数据类型与引用数据类型传参的区别
如果方法传递的参数为基本数据类型时,操作传递的是变量的值,改变形式参数的值不会影响实际
参数的值。
如果方法传递的参数为引用数据类型时,传递参数的过程是把原对象的引用(可理解为内存地址)
传递给另一个引用。引用对象的值可以发生改变。
String类型传参的原数据也不会发生变化。因为String有final修饰,其值不会被改变。
另外,对象也可以作为参数传参。
下面为示例代码:
package com.base.day18.dayshow.param;
/**
* @author: zjl
* @datetime: 2023/12/9
* @desc:
*/
public class Main {
int[] arr =new int[3];
{
arr[0] = 2;
arr[1] = 3;
arr[2] = 4;
}
public static void main(String[] args) {
Test test = new Test();
double num = 8;
test.calc1(3);
System.out.println("num = " + num);
Student student = new Student();
student.age = 18.5;
test.calc2(student);
System.out.println("age = " + student.age);
String bbb = "hello";
test.calc3(bbb);
System.out.println(bbb);
System.out.println(test.calc3(bbb));
//基本数据类型传参,前后的值不会发生变化
//基本数据类型传参,相当于将值复制了一份传了过去,对方修改的是复制体,对本体不会有任何影响
//引用数据类型传参,前后的值会发生变化
//引用数据类型传参,相当于将地址传过去了,对方在你的地址上做的任何操作,当你再拿到这个地址时,会发现这个地址上的数据变化了
//String类型虽然也是引用数据类型,但是传参前后的值也不会发生变化
//String类型是被final修饰的,表示String类型创建出来的变量/对象是不可被修改的,所以,即使将地址传过去,也依然不能修改其值
}
}
package com.base.day18.dayshow.param;
/**
* @author: zjl
* @datetime: 2023/12/9
* @desc:
*/
public class Test {
public void calc1(double num){
num = num + 1;
}
public void calc2(Student student){
student.age = student.age + 1;
}
public String calc3(String name){
name += "KGC";
return name;
}
}
package com.base.day18.dayshow.param;
/**
* @author: zjl
* @datetime: 2023/12/9
* @desc:
*/
public class Student {
double age = 1;
}
成员变量与局部变量
Java中以类来组织程序,在类的方法中,同样可以定义变量。
变量的声明位置决定了变量的作用域。
在类中定义的变量为类的成员变量。在类的方法中定义的变量称为局部变量。
成员变量有默认初始值,局部变量没有,所以需要手动赋值。
同一类中成员变量变量不能重名,同一方法中局部变量不能重名。
同一类中,成员变量和局部变量可以重名。重名时,局部变量具有更高的优先级。可以用 this. 变量名 表示成员变量。
构造方法是一种特殊的方法,它是一个与类同名且无返回值类型的方法。
构造方法的功能主要是完成对象的初始化。
对象的创建就是通过构造方法来完成,当类实例化一个对象时会自动调用构造方法。
在没有给类提供任何构造方法时,系统会提供一个默认无参构造方法。一旦提供了自定义构造
法,系统将不再提供这个无参构造方法。如果要使用它,则必须手动添加。
方法重载
方法重载:在同一个类中,方法名相同,通过参数个数和类型的不同来区分不同的方法,方法的
载跟返回值类型和修饰符无关。
方法重载的优点:
方法重载其实是对一般方法的一种升级,可以根据参数的不同,采用不同的实现方法,而且不需编写多个名称,只要记住一个方法即可。
public class Calc {
public int getResult(int num1, int num2) {
return num1 + num2;
}
public double getResult(double num1, double num2, double num3) {
return num1 + num2 + num3;
}
}
构造方法重载
构造方法重载是指在同一个类中定义多个具有相同名称但参数列表不同的构造方法。这种方法允许我们在创建对象时使用不同的初始化方式,根据需要选择合适的构造函数。
static修饰词总结
在加载类的过程中,完成静态变量的内存分配,再执行静态块,两者是在创建对象之前执行的。
类属性和类方法可以通过类名和对象名访问,实例属性和实例方法只能通过对象名访问。
类方法只能访问类属性和其他类方法,不能使用this和super关键字。
实例方法中不可以定义static变量
static修饰和非static修饰的区别
static、非private修饰 | 非static、private修饰 | |
属性 | 类属性、类变量 | 实例属性、实例变量 |
方法 | 类方法 | 实例方法 |
调用方式 | 类名.属性 类名.方法() 对象.属性 对象.方法() | 对象.属性 对象.方法() |
归属 | 类 | 单个对象 |