java:封装

时间:2019-04-20 22:23:23   收藏:0   阅读:173

/*构造方法是一种特殊的方法,专门用于构造/实例化对象,
形式:[修饰符] 类名(){ }
构造方法根据是否有参数分为无参构造和有参构造*/
public class Dog {
String name;
int health;
int love;
String sex;
/*
无参方法(一般没有构造方法,系统默认无参方法,
同时可以直接在上面属性声明后面赋值,如果没有赋值,系统自动输入默认值)
但是加有参方法时,建议一定要把无参加上
修饰符+类名(){}*/
public Dog(){
health=90;
love=10;
}


public void showOf(){
System.out.println("我的名字叫"+name);
System.out.println("健康值:"+health);
System.out.println("亲密度:"+love);
System.out.println("性别:"+sex);
}
}

public class Penguin {      //创建Penguin类
     String name;
     int health=100;           //属性
     int love=0;
     String kind;
     public void pay(){             //方法
         System.out.println("我的名字叫"+name);
          System.out.println("健康值"+health);
           System.out.println("亲密度"+love);
            System.out.println("品种"+kind);
     }
}

 


import java.util.Scanner;
public class Pet { public static void main(String [] ages){ Scanner arr=new Scanner(System.in); System.out.println("请输入宠物的名字"); String name=arr.next(); System.out.println("请选择宠物类型1.企鹅2.狗狗"); int a=arr.nextInt(); if (a==1){ Penguin sc=new Penguin(); //插入Penguin包 sc.name=name; //赋值(从输入录入的值) System.out.println("请选择性别1.Q女2.Q男"); int b=arr.nextInt(); if (b==1) { sc.kind="Q女"; //赋值 sc.pay(); }else { sc.kind="Q男"; sc.pay(); } }else { Dog sc=new Dog(); sc.name=name; System.out.println("请选择狗的种类1.土狗2.腊肠"); int b=arr.nextInt(); if (b==1){ sc.sex="雄性"; sc.showOf(); }else { sc.sex="雌性"; sc.showOf(); } } } }

4种结果

 

技术分享图片技术分享图片技术分享图片技术分享图片

 

 

有参构造


/*构造方法是一种特殊的方法,专门用于构造/实例化对象,
形式:[修饰符] 类名(){ }
构造方法根据是否有参数分为无参构造和有参构造*/
public class Dog {
     String name;
     int health=10;
     int love=10;
     String sex;
    
     public Dog(){
         }
     
/*当构造一个对象时可以直接在构造方法中传递参数,
但是加有参方法时,建议一定要把无参加上
this 是一个关键字 表示对象本身,本质上是对象的地址,用来引用对象,
this用于访问本对象属性,同时解决局部变量和成员变量同名的问题。
通过打印this中的引用,可以看出对象dog和this指向同一内存。
一般而言,dog(在下面提取Dog类可见)用于类的外部,this用于类的内部。
因为类的内部根本不知道dog变量名的存在。
修饰符 类名(是属于Pet的属性){}*/


    /* 如果没有赋值
    public Dog(String name,int health,int love,String sex){  //在Pet赋值
         this.name=name;    //pet先赋值给括号里的属性
         this.health=health;// this.Dog类的属性=括号内的属性
         this.love=love;
         this.sex=sex;
     }*/     
    //如果已经赋值,可以这样写
    public Dog(String name,String sex){  //在Pet赋值
         this.name=name;    //pet先赋值给括号里的属性
         this.sex=sex;// this.Dog类的属性=括号内的属性
         
         
     }
    

     public void showOf(){
         System.out.println("我的名字叫:"+this.name);
          System.out.println("健康值:"+this.health);
           System.out.println("亲密度:"+this.love);
            System.out.println("性别:"+this.sex);
     }
}

 



public
class Pet { public static void main(String [] ages){ //如果没有赋值这样写 //Dog dog=new Dog("黑狗",50,50,"雄"); //如果已经赋值这样写 Dog dog=new Dog("黑狗","");//类是用new引入 System.out.println("dog:"+dog);//对象的地址 dog.showOf();//用Dog类的方法输出 } }

两种结果

技术分享图片技术分享图片

 对象初始化内存图

 

 

Car car  = new Car(…);

 

当实例化一个对象时,jvm首先把Car.class加载到方法区

 

[1]读取Car.class 根据声明的成员变量计算申请内存需要的字节数

 

[2]读取Car.class 中的静态成员,静态变量分配空间并初始化。

 

new Car 申请内存得到一个car对象此时才有对象的空间。showInfo才可以通过car对象调用。

 

 

 

技术分享图片

方法的调用内存图

技术分享图片

 

 


/*需求:统计宠物店有几只狗
统计宠物店有几只狗的功能应该放在类功能上,不应该属于某个对象
声明一个变量用于统计个数,这个变量应该被类的实例共享。
被类的实例共享的区域在方法区(Car.class)
用static关键字声明这样的变量

static 关键字表示静态,可以修改变量,也可以修饰方法。
静态变量 
static 修饰的变量称为静态变量/静态属性,形式  :static 类型 变量名称 [= 初始值]
被static修饰的变量称为静态变量,归类所有,
分配在方法区(共享区)中的静态区,可以被类的实例共享访问。

*/
public class Dog {
     String name;
     int health;
     int love;
     String sex;
    static int count=0;
    /*静态变量归类所有,也叫类变量,访问方式
      [1] 类名.静态变量(推荐)
       [2] 对象.静态变量*/
     public Dog(){
         Dog.count++;
         }//必须两种构造都写

    public Dog(String name,int health,int love,String sex){  
         this.name=name;    
         this.health=health;
         this.love=love;
         this.sex=sex;
        Dog.count++;//必须两种构造都写
     }

     public void showOf(){
         System.out.println("我的名字叫:"+this.name);
          System.out.println("健康值:"+this.health);
           System.out.println("亲密度:"+this.love);
            System.out.println("性别:"+this.sex);
            System.out.println("我是第"+Dog.count+"只狗");
     }

      //实例方法可以访问静态成员。
       //静态方法不能访问非静态成员。
       //[修饰符] static 返回值类型 方法(arg…){}

       //static 修饰的方法称为静态方法形式

       public static int jiaoDog(){

        return Dog.count;
       }


}

 


public
class Pet { public static void main(String [] ages){ Dog dog1=new Dog("黑狗",50,50,""); dog1.showOf(); Dog dog2=new Dog("白狗",60,20,""); dog2.showOf(); Dog dog3=new Dog("黑狗",60,50,""); dog3.showOf(); System.out.println(Dog.count); System.out.println(dog2.count); //类名.静态变量 对象.静态变量 都得到狗的总数 // 所以建议选 类名.静态 因为选对象容易误会成这是第几只狗 其实所以德对象都是一样的


//静态方法归类所有,调用形式
//[1] 类名.方法名() (推荐)
//[2] 对象.方法名()
//得出来结果同上
System.out.println(Dog.jiaoDog());
System.out.println(dog2.jiaoDog());

      }
    }

 

技术分享图片

静态代码块

静态代码块位于类中,类所有static修饰。类加载时执行,在构建多个对象时只执行一次。

原文:https://www.cnblogs.com/406070989senlin/p/10742388.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!