• 【Java面向对象 05】


    一、构造方法

    1、方法名与类名称相同,2、没有返回值,不需要void关键字
    2、调用类里面的属性必须先进行对象的引用,即:new 类名(),引用:引用名.属性

    以下举例:Test01类对Students类进行初始化调用,Test02类对Students类进行属性的修改,即修改成员变量
    public class Students {
        //学号
        int id;//成员变量(属性)-->想要访问成员变量,必须有对象才能访问
        //姓名
        String name;
        //性别
        String sex;
        //地址
        String address;
        //年龄
        int age;
        //构造方法(1、方法名与类名称相同,2、没有返回值,不需要void关键字)
        Students(){}
    }
    public class Test01 {
        public static void main(String[] args){
            //创建学生对象
            //语法:new.类名();
            //Students是一种引用数据类型,所有的类都是引用数据类型
            //类里面的方法调用(类名.方法名),类里面的属性调用,引用对象.属性名
            Students zhangsan = new Students();
    
            System.out.println("id:"+zhangsan.id);
            System.out.println("name:"+zhangsan.name);
            System.out.println("age:"+zhangsan.age);
            System.out.println("address:"+zhangsan.address);
            System.out.println("age:"+zhangsan.age);
        }
    }
    public class Test02 {
        //修改变量
        public static void main(String[] args){
            Students stu = new Students();
    
            stu.id = 1001;
            stu.name = "张三";
            stu.age = 20;
            stu.address = "北京";
            stu.sex = "男";
    
            System.out.println("id:"+stu.id);
            System.out.println("name:"+stu.name);
            System.out.println("age:"+stu.age);
            System.out.println("address:"+stu.address);
            System.out.println("age:"+stu.age);
        }
    }

    二、对象的封装

    封装性:属性私有化,对外提供公开的setter 和 gettter方法
    目的:不让外部程序对属性进行任意访问,通过方法进行访问
    属性的安全可以得到保障,可以在方法中编写业务逻辑代码
    不带static的方法叫非静态方法,成员方法,实例方法,调用时必须先创建对象才能调用,调用的方法:引用.方法名(实际参数)
    public class Students {
       private int age;
    
       public void setAge(int _age){
           if(age<0 || age >120){
               System.out.println("年龄不符合!!!");
           }
           age = _age;
       }
    
       public int getAge(){
           return age;
       }
    
       public static String name(String n){
           if( n == "张三"){
               System.out.println("正确");
           }else{
               System.out.println("错误");
           }
           return n;
       }
    }
    public class Test001 {
        public static void main(String[] args){
           Students stu = new Students();
    
           stu.setAge(-10);
          // System.out.println(stu.getAge());
    
           stu.setAge(25);
           System.out.println(stu.getAge());
    
           //静态方法,既可以用类名.方法名调用。也可以用引用.方法名调用
            Students.name("张三");
            stu.name("李四");
    
        }
    }

    三、进一步了解对象的引用

    引用数据类型是内存地址的传递,基本数据类型是值传递(不涉及到堆,只涉及到栈)

    package com.JavaStudy.study0417;
    
    public class Test002 {
        public static void main(String[] args){
            Study stu = new Study();
    //        Test002 t = new Test002();
    //        t.add(stu);  甭管是不是同一个类,非静态方法调用只能用引用.方法名()
            add(stu);
            System.out.println(stu.age);
        }
    
        public static void add(Study s){
            s.age++;
            System.out.println(s.age);
        }
    
    //    public  void add(Study s){
    //        s.age++;
    //        System.out.println(s.age);
    //    }
    
    }
    
    class Study{
    
        int age;
    
        public Study(){}
    }

    ==========
    执行结果:
    1
    1

    数据传递理解图

    程序先执行main方法-->进行压栈-->执行Study()构造方法,构造方法new动作时会进行:1、创建Study对象 2、初始化成员变量int age=0  --> 构造方法执行结束后进行弹栈-->

    弹栈后给Study对象分配内存地址,引用stu会指向此内存地址,并且保存内存地址-->程序在执行add()方法进行压栈-->add方法内的形式参数会进行值的传递(stu传递给s),所以会指向

    堆的内存地址-->执行s.age++进行修改为1,并打印-->执行结束后进行弹栈,弹栈都内存地址同样也保存了-->在执行main方法里面的System.out.println(stu.age); 值仍然是1

    特别注意:对象的引用,传递的是内存地址

  • 相关阅读:
    JSP注册登录页教程
    SSH框架搭建详细图文教程
    .Net Core2.2升级到3.1小记
    AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署
    AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排
    AspNetCore容器化(Docker)部署(二) —— 多容器通信
    AspNetCore容器化(Docker)部署(一) —— 入门
    asp.net core 3.0 gRPC框架小试
    HttpClient Received an unexpected EOF or 0 bytes from the transport stream
    PdfReader按页将PDF切割成多个PDF
  • 原文地址:https://www.cnblogs.com/frankruby/p/11353238.html
Copyright © 2020-2023  润新知