美文网首页
JAVA-(构造方法、setter/getter方法、this指

JAVA-(构造方法、setter/getter方法、this指

作者: 宁晓鸯 | 来源:发表于2019-08-07 23:48 被阅读0次

    心得体会

    • 似乎自己真的不够努力,因为不够努力,所以上课不能很好的吸收当天的知识,java对我来说真的挺难的,好像至今我还深陷于c语言的思维无法自拔。但是,实际说,我觉得java要更加有趣一点,写一个demo前进行一次逻辑分析,挺有用的,能让自己编程的思路更加清晰一点。

    技术

    • 1.给对象赋值的方式
    • 2.setter/getter方法
    • 3.构造方法
    • 4.变量作用域
    • 5.this指针
    • 6.static

    具体操作

    1.给对象赋值的方式

    • a.对于public修饰的属性 使用对象直接调用
      p.number='A';

    • b.对于private修饰的属性 不能直接调用 只能间接使用,可以用
      getter/setter方法构造方法
    • 2.setter/getter方法
    class Poker{
        private String number;
        private String color;
        
        public boolean bigerThen(String number) {//比较大小
            return true;
        }
        //什么时候用this
        //需要明确指定调用的是自己对象的方法
        public void t1(int... ages){
            bigerThen(null);
            this.bigerThen(null);
        }
    

    上图中的number、color属性由private修饰,不能直接调用,只能间接调用

     //给外部提供一个set方法 通过这个方法间接给number赋值
     //可以对外部给的值进行控制
    
     public void setNumber(String num){
           number=num;
        }
     //给外部提供一个get方法 访问某个变量的值
     public String getNumber(){
            return "number";
        }
     public void setColor(String color) {
            this.color = color;
        }
     public String getColor() {
            return color;
        }
    
    • 上图中给外部提供一个set方法 通过这个方法间接给number,color赋
      值,可以对外部给的值进行控制,
    • 给外部提供一个get方法 访问某个变量的值
    • 通过setter/getter方法,于是poker类中的成员属性number,color可以在外部间接调用
    public class Test {
        public static void main(String[] args){
           Poker p=new Poker();//创建对象
           p.setNumber("jacker");
           System.out.println(p.getNumber());
         }
    }
    
    QQ截图20190807211149.png

    注意:通常setter/getter方法不需要手动添加,可以通过系统直接添加。首先把光标放在setter/getter方法要添加的位置,然后快捷键Alt+Insert。(ps:我的电脑快捷键是这样的,如果你的电脑快捷键不是这样的,可以点击code,然后看Generate,看一下快捷键是什么)

    image.png
    建议!!!: 建议将setter/getter方法定义在类的最后面 避免干扰阅读

    3.构造方法

    • a.构造方法的定义

    构造方法:创建一个类的一个对象的时候 就会被调用的方法

    • b.类的默认构造方法
    • 创建一个类的具体对象
      Poker pp=new Poker();
    • 每个类会默认提供一个构造方法

    1.无参数的默认构造方法

    public Poker(){
        
            System.out.println("构造方法");
        }
    

    2.有参数的默认构造方法

    public Poker(){
            number='2';
            color='♠';
            System.out.println("构造方法");
        }
    
    public class Test {
        public static void main(String[] args){
            Poker pp=new Poker();
            System.out.println(pp.getNumber());
            System.out.println(pp.getColor());
        }
    }
    class Poker {
        private String number;
        private String color;
        //类的默认构造方法
        public Poker(){
            number="2";
            color="黑桃";
            System.out.println("构造方法");
    
        }
       public boolean bigerThen(String number) {
            return true;
        }
    
        public String getNumber() {
            return number;
        }
    
        public void setNumber(String number) {
            this.number = number;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    
    } QQ截图20190807222610.png

    为什么会打印上述结果:
    因为Poker pp=new Poker();这里创建了一个对象,创建这个对象它默认会调用这个对象里面的默认构造方法,这个构造方法里面先赋值,然后打印的System.out.println("构造方法");这句话就会执行完毕。执行完毕,这个对象创建完毕,然后再调用
    System.out.println(pp.getNumber());
    System.out.println(pp.getColor());
    方法,把“2”,“ 黑桃”打印出来

    • c.构造方法的重载
      1.方法重载

    同一个类里面有多个同名的方法 但是返回值或者参数不同
    public int nextInt()
    public int nextInt(int i);
    这两个方法方法名相同,但执行的内容不同,参数不同,返回值一样,这就是重载

    2.自定义的构造方法

    public class Test {
        public static void main(String[] args){
            Poker pp2=new Poker("k","♥");
            System.out.println(pp2.getNumber());
            System.out.println(pp2.getColor());
    
            Poker pp3=new Poker("Q","♣");
            System.out.println(pp3.getNumber());
            System.out.println(pp3.getColor());
        }
    }
    class Poker {
        private String number;
        private String color;
    
        //自定义的构造方法
        public Poker(String num,String col){
            //调用
            number=num;
            this.color=col;
            System.out.println("自定义的构造方法");
        }
       public boolean bigerThen(String number) {
            return true;
        }
    
        public String getNumber() {
            return number;
        }
    
        public void setNumber(String number) {
            this.number = number;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    
    QQ截图20190807230318.png
    • 通常给一个属性赋值 形参名尽量和属性名一致
      变量在使用的时候有就近原则构造方法的时候 这个对象在内存里面已经分配好了
    • d.什么时候使用构造方法**

    a.希望在对象创建的时候 做点其他事情
    (这个时候用默认的构造方法就可以了,用自定义的构造方法也是可以的)
    b.在对象创建的时候 需要给属性赋值
    (这个时候需要写一个自定义的构造方法)

    4.变量作用域

    • a.成员变量的作用域,从对象创建到对象销毁
    • b.方法的变量作用域在这个方法内部,出了这个方法就无法访问
    • 变量在使用时有就近原则
     public Poker(String 
     number,String color){
            //调用
            number=number;//错误!!!
    

    此时没有赋值成功!!!

    public Poker(String 
     num,String col){
            //调用
     number=num;
    

    这是正确的

    5.this指针

    • 什么时候用this

    需要明确指定调用的是自己对象的方法

      public void t1(int... ages) {
            bigerThen(null);
            this.bigerThen(null);
         }
    

    在构造方法里面,这个this指的是创建的这个对象

       public Poker(String number,String color){
            //调用
           this.number=number;
           this.color=color;
            System.out.println("自定义的构造方法");
        }
    

    除构造方法的任意一个方法里面调用this指的是 调用这个方法的对象

    public void setColor(String color) {
    this.color = color;
    }
    

    6.static

    • static 修饰的属性和方法都会在对象创建之前优先加载
    • 属性 静态属性
      方法 静态方法
      实例方法/对象方法:必须创建某一个对象才能调用的方法
      类方法/静态方法: 不需要创建对象 直接用这个类来调用
    class MyClass{
       public void test(){
           System.out.println("这是对象方法");
       }
       public  static void test2(){
           System.out.println("这是静态方法");
       }
    }
    class T2{
       public static void main(String[] args){
           MyClass c1=new MyClass();//使用类的实例方法/对象方法
           c1.test();
    
           MyClass.test2();//使用类/静态方法
    }
    

    什么情况下需要写静态方法:

    • 1.当不需要记录数据的时候 只关心功能就可以使用静态方法
    • 2.注意:静态方法里面不能调用静态这个类里面的属性和非

    相关文章

      网友评论

          本文标题:JAVA-(构造方法、setter/getter方法、this指

          本文链接:https://www.haomeiwen.com/subject/fgmndctx.html