zoukankan      html  css  js  c++  java
  • 封装和参数调用(格式修改)

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

    思路:

    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;
    
        }
    
    }
    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    C#语言之“string格式的日期时间字符串转为DateTime类型”的方法(转载)
    SQL Server中使用convert进行日期转换(转载)
    C#夯实基础之多线程二:主线程、前台线程与后台线程(转载)
    C# 程序默认使用管理员权限(转载)
    SQL中char、varchar、nvarchar、ntext的区别(转载)
    ASP.NET Core StaticFiles中间件修改wwwroot(转载)
    C#中byte[]类型转换为其它类型
    SQL Server数据库(时间戳timestamp)类型 (转载)
    SQL Server中删除用户时报错,提示:The database principal owns a schema in the database, and cannot be dropped(转载)
    SQL Server如何更改系统用户dbo的所属账号
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/8277630.html
Copyright © 2011-2022 走看看