前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【测开技能】Java系列(二十 二)方法

【测开技能】Java系列(二十 二)方法

作者头像
雷子
发布2022-09-29 20:19:57
2400
发布2022-09-29 20:19:57
举报

Java系列分享

【测开技能】Java语言系列(一)Java入门

【测开技能】Java语言系列(二)Java基础语法

【测开技能】Java语言系列(三)变量和数据类型

【测开技能】Java语言系列(四) 整数运算

【测开技能】Java语言系列(五) 浮点数运算

【测开技能】Java语言系列(六) 布尔运算

【测开技能】Java语言系列(七) 字符和字符串

【测开技能】Java语言系列(八)数组类型

【测开技能】Java语言系列(九)输入和输出

【测开技能】Java语言系列(十)if判断

【测开技能】Java语言系列(十一)switch多重选择

【测开技能】Java语言系列(十二)while循环

【测开技能】Java语言系列(十三)dowhile循环

【测开技能】Java语言系列(十四)for循环

【测开技能】Java语言系列(十五)break和continue

【测开技能】Java语言系列(十六)简单知识训练

【测开技能】Java语言系列(十七)数组操作--遍历与排序

【测开技能】Java语言系列(十八 )多维数组

【测开技能】Java语言系列(十九 )命令行参数

【测开技能】Java系列(二十 )初识面向对象编程

【测开技能】Java系列(二十 一)面向对象编程基础

正文


一个class可以包含多个field。我们可以给类定义两个字段

代码语言:javascript
复制
public class Food {

    public String birthcity;
    public float  price;
}

但是,直接把field用public暴露给外部可能会破坏封装性。比如,代码可以这样写:

代码语言:javascript
复制
public static void main(String[] args) {
    Food food=new Food();
    food.birthcity="beijing";
    food.price=10;
}

显然,直接操作field,容易造成逻辑混乱。为了避免外部代码直接去访问field,我们可以用private修饰field,拒绝外部访问.

代码语言:javascript
复制

public class main {

    public static void main(String[] args) {
        Food food=new Food();
        food.birthcity="beijing";
        food.price=10;
    }
}
class Food{
    private String birthcity;
    private float  price;
}

这样编译就会报错

那么定义了之后如何赋值呢,符合使用呢?

很简单,我们可以提供方法来供修改

代码语言:javascript
复制
ublic class main {
    public static void main(String[] args) {
        Food food=new Food();
        food.setBirthcity("beijing");
        food.setPrice(10);
    }
}
class Food{
    private String birthcity;
    private float  price;
    public String getBirthcity() {
        return birthcity;
    }
    public void setBirthcity(String birthcity) {
        this.birthcity = birthcity;
    }
    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }
}

外部的代码不能直接调用private方法。但是可以通过调用对应的get和set方法来实现对字段的修改。这样外部也不能直接获取price和birthcity。

代码语言:javascript
复制
一个类通过定义方法,就可以给外部代码暴露一些操作的接口,
    同时,内部自己保证逻辑一致性。
调用方法的语法是实例变量.方法名(参数);。
    一个方法调用就是一个语句,所以不要忘了在末尾加;

从上面可以看出,如何去定义方法

代码语言:javascript
复制
修饰符 方法返回类型 方法名(方法参数列表) {
    若干方法语句;
    return 方法返回值;
}

方法返回值通过return语句实现,如果没有返回值,返回类型设置为void,可以省略return。

private方法

有public方法,自然就有private方法。和private字段一样,private方法不允许外部调用,那我们定义private方法有什么用?

定义private方法的理由是内部方法是可以调用private方法的。我们定义了一个方法,外面只管调用,就会给出来想要的结果。

this变量

在方法内部,可以使用一个隐含的变量this,它始终指向当前实例。因此,通过this.field就可以访问当前实例的字段。

如果没有命名冲突,可以省略this

代码语言:javascript
复制
public float getPrice() {
    return price;//相当于this.price
}

但是,如果有局部变量和字段重名,那么局部变量优先级更高,就必须加上this

代码语言:javascript
复制
public void setPrice(float price) {
    this.price = price;
}

方法参数

方法可以包含0个或任意个参数。方法参数用于接收传递给方法的变量值。调用方法时,必须严格按照参数的定义一一传递

比如在food中定义一个方法。

代码语言:javascript
复制
public  void  setbirthAndPrice(String brith,float price){

}

所以要传递的时候,必须两个都要传递。不然在传递的时候会报错

所以两个参数必须传递,而且类型还需要一致。

可变参数

可变参数用类型...定义,可变参数相当于数组类型:

代码语言:javascript
复制
private  String[]  author;
public  void  setauthor(String... author){
   this.author=author;
}

在调用的时候可以如何传递呢

代码语言:javascript
复制
public static void main(String[] args) {
    Food food=new Food();
    food.setauthor("leizi","123");
    food.setauthor();
    food.setauthor("leizi");
}

参数绑定

调用方把参数传递给实例方法时,调用时传递的值会按参数位置一一绑定。

那什么是参数绑定?看一个例子

代码语言:javascript
复制
public class main {

    public static void main(String[] args) {
        Food food=new Food();
        String brith="beijing";
        food.setBirthcity(brith);
        System.out.println(food.getBirthcity());
        brith="shanghai";
        System.out.println(food.getBirthcity());
    }
}

结果

可以看到:基本类型参数的传递,是调用方值的复制。双方各自的后续修改,互不影响。

代码语言:javascript
复制
public class main {

    public static void main(String[] args) {
        Food food=new Food();
        String[] autor=new  String[]{"leizi","leizi"};
        food.setAuthor(autor);
        System.out.println(food.getAuthor());
        autor[0]="123";
        System.out.println(food.getAuthor());
    }
}
class Food{


    public String getAuthor() {

        return this.author[0] + " " + this.author[1];
    }

    public void setAuthor(String[] author) {
        this.author = author;
    }

    private  String[]  author;

}

结果

可以得出来下面的结论:

引用类型参数的传递,调用方的变量,和接收方的参数变量,指向的是同一个对象。双方任意一方对这个对象的修改,都会影响对方。

本次分享了如何定义一个方法,如何给方法传递方法,方法的参数传递影响。

发现问题,解决问题。遇到问题,慢慢解决问题即可。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可变参数
  • 参数绑定
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档