Java系列分享
【测开技能】Java语言系列(十五)break和continue
正文
一个class可以包含多个field。我们可以给类定义两个字段
public class Food {
public String birthcity;
public float price;
}
但是,直接把field用public暴露给外部可能会破坏封装性。比如,代码可以这样写:
public static void main(String[] args) {
Food food=new Food();
food.birthcity="beijing";
food.price=10;
}
显然,直接操作field,容易造成逻辑混乱。为了避免外部代码直接去访问field,我们可以用private修饰field,拒绝外部访问.
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;
}
这样编译就会报错
那么定义了之后如何赋值呢,符合使用呢?
很简单,我们可以提供方法来供修改
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。
一个类通过定义方法,就可以给外部代码暴露一些操作的接口,
同时,内部自己保证逻辑一致性。
调用方法的语法是实例变量.方法名(参数);。
一个方法调用就是一个语句,所以不要忘了在末尾加;
从上面可以看出,如何去定义方法
修饰符 方法返回类型 方法名(方法参数列表) {
若干方法语句;
return 方法返回值;
}
方法返回值通过return语句实现,如果没有返回值,返回类型设置为void,可以省略return。
private方法
有public方法,自然就有private方法。和private字段一样,private方法不允许外部调用,那我们定义private方法有什么用?
定义private方法的理由是内部方法是可以调用private方法的。我们定义了一个方法,外面只管调用,就会给出来想要的结果。
this变量
在方法内部,可以使用一个隐含的变量this,它始终指向当前实例。因此,通过this.field就可以访问当前实例的字段。
如果没有命名冲突,可以省略this
public float getPrice() {
return price;//相当于this.price
}
但是,如果有局部变量和字段重名,那么局部变量优先级更高,就必须加上this
public void setPrice(float price) {
this.price = price;
}
方法参数
方法可以包含0个或任意个参数。方法参数用于接收传递给方法的变量值。调用方法时,必须严格按照参数的定义一一传递
比如在food中定义一个方法。
public void setbirthAndPrice(String brith,float price){
}
所以要传递的时候,必须两个都要传递。不然在传递的时候会报错
所以两个参数必须传递,而且类型还需要一致。
可变参数用类型...
定义,可变参数相当于数组类型:
private String[] author;
public void setauthor(String... author){
this.author=author;
}
在调用的时候可以如何传递呢
public static void main(String[] args) {
Food food=new Food();
food.setauthor("leizi","123");
food.setauthor();
food.setauthor("leizi");
}
调用方把参数传递给实例方法时,调用时传递的值会按参数位置一一绑定。
那什么是参数绑定?看一个例子
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());
}
}
结果
可
可以看到:基本类型参数的传递,是调用方值的复制。双方各自的后续修改,互不影响。
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;
}
结果
可以得出来下面的结论:
引用类型参数的传递,调用方的变量,和接收方的参数变量,指向的是同一个对象。双方任意一方对这个对象的修改,都会影响对方。
本次分享了如何定义一个方法,如何给方法传递方法,方法的参数传递影响。
发现问题,解决问题。遇到问题,慢慢解决问题即可。