封装和参数调用(格式修改)

封装:把一类事物的特性抽象出来,比如方法和属性,并用代码包装起来,以结果为导向,忽略具体实现过程,即为封装。

思路:

1.封装类

class 类名{

               成员属性定义;

               构造函数(或构造器);

               成员方法定义并输出;

              }

 

2.加载类对象,初始化属性

TestClass   类名{

                        初始化对象并赋值;

                        再调用;

                       }

代码举例:

 1 public class Teacher1{
 2     private String name;
 3     private int age;
 4     private char gender;
 5     private String majorField;
 6     public String getName(){
 7         return name;
 8     }
 9     public void setName(String name){
10         this.name=name;
11     }
12     public int getAge(){
13         return age;
14     }
15     public void setAge(int age){
16         if(age<0 || age>100){
17         this.age=30;
18         System.out.println("年龄应该在0到100之间,默认为30");
19     }else{
20         this.age=age;
21     }
22 }
23 public char getGender(){
24     return gender;
25 }
26 public void setGender(char gender){
27     this.gender=gender;
28 }
29 public String getMajorField(){
30     return majorField;
31 }
32 public void setMajorField(String majorField){
33     this.majorField=majorField;
34 }
35 public Teacher1(){
36     name="李丽";
37     age=25;
38     gender='女';
39     majorField=".NET";
40 }
41 public Teacher1(int a,char g){
42     age=a;
43     gender=g;
44 }
45 public void print(){
46     System.out.println("我是"+name+",我的年纪是"+age+"岁,我的性别是"+gender+",我的专业研究ß"+majorField);
47 }
48 }
49 public class TestPeople{
50     public static void main(String args[]){
51     People p1=new People("Lili",20,'woman',55,165);
52     p1.speak();
53     String temp=p1.info();
54     System.out.println(temp);
55         }
56 }
57 
58 public class Test9{
59     public static void main(String[] args) {
60         Teacher1 t1=new Teacher1();
61 
62         //为属性赋值用setXXX()方法
63         t1.setName("戚薇");
64         t1.setAge(200);
65         t1.setGender('女');
66         t1.setMajorField(".Net");
67 
68         //取属性的值用getXXX()方法
69         System.out.println("我的名字叫"+t1.getName());
70         t1.print();
71     }
72 }

/*

运行结果:

年龄应该在0到100之间,默认为30

我的名字叫戚薇

我是戚薇,我的年纪是30岁,我的性别是女,我的专业研究ß.Net

*/

class A{
	int a;
	int b;
}

public class TestParam{
	public void exchange(int x,int y){
	System.out.println("交换前:x="+x+",y="+y);
	int temp=x;
	       x=y;
	       y=temp;
	       System.out.println("交换后:x="+x+",y"+y);
	}

	public void exchange(A a){
	System.out.println("交换前:x="+x+",y="+y);
	int temp=a.a;          
                      //a.a是什么意思???任意一个变量,引用数据类型的一种写法
	     a.a=a.b;
	     a.b=temp;
	     System.out.println("交换后:x="+x+",y="+y);
	}

	public static void main(String[] args){
	A a=new A();
	a.a=1;
	a.b=2;
	TestParam tp=new TestParam();
	int x=5;
	int y=10;
	System.out.println("在main()方法中,交换前:x="+x+",y="+y);
	tp.exchange(x,y);
	System.out.println("在main()方法中,交换后:x="+x+",y="+y);

	System.out.println("

在main()方法中,交换前a.a="+a.a+",a.b="+a.b);
	tp.exchange(a);
	System.out.println("在main()方法中,交换前:a.a="+a.a+",a.b="+a.b);
	}
}

  

/*

运行结果:

在main()方法中,交换前:x=5,y=10

交换前:x=5,y=10

交换后:x=10,y=5

 

 

在main()方法中,交换前:a.a=1,a.b=2

交换前:a.a=1,a.b=2

交换后:a.a=2,a.b=1

在main()方法中,交换后:a.a=2,a.b=1

*/

理解:

主要是基本数据类型和引用数据类型之间的区别;

1.exchange(int x, int y)是值传递,main方法中x、y传递给它时,交换仍然按交换处理,但main方法中的x、y,没有发生变化,只是相当于一个中间变量,自身并不发生变化。(值的拷贝)

2.exchage(A a)是引用传递,也可以理解为地址传递,传递是对象a的地址值,回到main方法中仍然处于交换状态。(方法还是不能让引用类型参数指向新的对象,即交换)

 

方法的可变参数

方法重载的一种特殊情况:需要定义一组方法,这组方法有相同的类型的参数但参数个数却不同

例如,需要创建一个计算一组整数和的方法

可变参数的示例:

public class VarArgs {

    public static void main(String[] args) {

        System.out.println(sum(1, 2));

        System.out.println(sum(1, 2, 3));

    }

 

    /**

     * 变长参数求和

     * <a href="http://home.cnblogs.com/u/309701/" target="_blank">@param</a> args

     * @return

     */

    public static int sum(int... args) {

        int n = 0;

        for (int arg : args) {

            n += arg;

        }

        return n;

    }

}
成年人的世界没有那么多的童话,也没有那么多的逆袭。
原文地址:https://www.cnblogs.com/shijinglu2018/p/8277630.html