zoukankan      html  css  js  c++  java
  • Java基础(2)面向对象和封装,对象的创建和使用、java对象的内存图

    1 类和对象

    类:是一类事物的描述,抽象的。猫

    对象:是一类事物的实例,具体的。某只猫

    2 类的定义

    成员变量和成员方法

    //定义一个学生类
    public class Student {
        //成员变量
        String name;
        int age;
    
        //成员方法,不要写static关键字
        public void eat(){
            System.out.println("吃饭");
        }
        public void study(){
            System.out.println("学习");
        }
    }

    3 对象的创建和使用

    //创建DemoStudent 对象
    public class DemoStudent {
        public static void main(String[] args) {
            Student student1 = new Student();
            System.out.println(student1.name);
            System.out.println(student1.age);
    
            System.out.println("======");
            student1.name = "Wang";
            student1.age = 18;
            System.out.println(student1.name);
            System.out.println(student1.age);
    
            student1.eat();
            student1.study();
        }
    }
    //

    null
    0
    ======
    Wang
    18
    吃饭
    学习

    4 对象的内存图

    01 一个对象的内存图

    方法区存放:成员变量,方法,

    main方法先调用,然后

    call方法压栈,call方法调用结束后出栈;

    send方法压栈,send方法调用结束后出栈;

    main方法出栈,程序结束

    02 两个对象的内存图

    03 两个引用指向同一个对象

    public class DemoStudent1 {
        public static void main(String[] args) {
            Student stu1 = new Student();
            stu1.age = 19;
            System.out.println(stu1.age);
    
            Student stu2 = stu1;//赋值操作,两个对象指向同一个地址
            System.out.println(stu2.age);
            
            stu2.age = 20;//改变其中一个的值,另一个也会修改
            System.out.println(stu1.age);
        }
    }
    //
    19
    19
    20

    04 对象作为方法的参数

    05 对象作为方法的返回值(略)

    06 面向对象三大特性之封装性

    方法就是一种封装:方法内部怎么实现的并不关心,只需要返回值对了就行。

    m关键字private也是一种封装

    
    
    public class Person {
    String name;
    private int age;
    private boolean male;

    public void show(){
    System.out.println("my name is:"+ name + ",my age is:"+ age + "性别是:" + isMale());
    }

    public void setName(String str){
    name = str;
    }

    public void setAge(int num){
    if(num<100 && num>0){
    age = num;
    }else{
    System.out.println("invalid input");
    }
    }

    public int getAge(){//age是private的,只能通过setter和getter方法进行间接访问
    return age;
    }

    public void setMale(boolean m){
    male = m;
    }

    public boolean isMale(){//boolean类型的数据的getter方法比较特殊,用is表示
    return male;
    }
    }
     
    public class Demo03Person {
    public static void main(String[] args) {
    Person person = new Person();
    person.show();
    person.name = "张无忌";
    person.setAge(90);
    person.setMale(true);
    person.show();
    }
    }
    ////

    my name is:null,my age is:0性别是:false
    my name is:张无忌,my age is:90性别是:true

  • 相关阅读:
    jsf web.xml配置
    JSF中Filter的实现
    转码
    facelates标签
    jsf学习笔记注解
    date工具类
    js秒读功能
    w3c document 与 dom4j document转化工具类
    jsf学习笔记ui
    jsf学习笔记拦截器
  • 原文地址:https://www.cnblogs.com/JohnTeslaaa/p/9665780.html
Copyright © 2011-2022 走看看