zoukankan      html  css  js  c++  java
  • Java基础之:类与对象

    Java基础之:类与对象

    Java是面向对象的编程语言。

    那么什么是对象呢? 什么又是类呢? 现实案例理解:

    人类 与 小范 : 人类就是一个类,而小范就是这个类中的一个对象

    狗 与 小白 : 狗就是一个类,而小白 就是这个类中的一个对象

    那么,不管是小范 还是 小白 ,都会有一些特定的属性。比如小范的年龄,小白的体重...

     

    为什么使用类与对象?

    当基本数据类型不够用的时候,我们就自己声明一些类,来使用。

     

    代码实现

    类的声明: class 类名 { }

    对象的声明 : 类名 对象名 = new 类名();

    对象属性访问符: "." , 使用: 对象名.属性名

    public class Test{
        public static void main(String[] args){
            //声明一个Person对象 p 
            Person p = new Person();
            //对象p 的属性赋值
            p.name = "小范";
            p.age = 20;
            
            //声明一个Dog对象 d
            Dog d = new Dog();
            //对象d 的属性赋值
            d.name = "小白";
            d.wide = 10;
        }
    }
    ​
    class Person{
        String name;
        int age;
    }
    class Dog{
        String name;
        int wide;
    }
    

    属性/成员变量

    属性也叫做成员变量 , 而我们上面定义的name、age、wide 都是成员变量。

    属性的定义: 访问修饰符 属性类型 属性名;

    说明:

    1. 属性可以是基本数据类型,也可以是引用数据类型。例如 Person 中可以有一个属性是 Dog 类型的对象 d。

    2. 属性如果不进行赋值,则会有默认值。这里默认值的取值与数组中的默认值取值一样。

    3. 不同的对象是相互独立的,互相不影响的。一个对象对属性进行更改,对另一个对象不会有影响。例如:有两个人分别是 小黄 和 小范,如果小范体重增加了10kg,对小黄并没有影响。

    4. 属性有访问修饰符,它们按可访问范围分为:public>protected>默认(default)>private。

    public class Test{
        public static void main(String[] args){
            //对象p1
            Person p1 = new Person();
            //对象p1 的属性赋值
            p1.name = "小范";
            p1.age = 20;
            
            //对象p2
            Person p2 = new Person();
            //对象p2 的属性赋值
            p2.name = "小黄";
            p2.age = 18;
            
            //改变 p1 的age属性与name属性 , p2不会受到影响
            p1.name = "小雨";
            p1.age = 19;
        }
    }
    ​
    class Person{
        String name;
        int age;
    }
    

      

    内存图理解

     

    对象是引用类型的,所以对象和数组以及String字符串一样,存在赋值问题。例如

    public class Test{
        public static void main(String[] args){
            //对象p1
            Person p1 = new Person();
            //对象p1 的属性赋值
            p1.name = "小范";
            p1.age = 20;
            
            Person p2 = p1;
            
            p2.age = 18; //这时 p1.age 也就等于 18
        }
    }
    ​
    class Person{
        String name;
        int age;
    }

    内存图理解

    内存图说明:

    1) 栈: 一般存放基本数据类型(局部变量)

    2) 堆: 存放对象(Cat cat , 数组等)

    3) 方法区:常量池(常量,比如字符串), 类加载信息

    程序流程分析:

    1) 先加载Person 类 , 只会加载一次

    2) 在堆中,分配空间[地址],并进行默认初始化,比如 name=null age = 0

    3) 把堆中地址,返回给 p1

    4) 进行指定初始化 name = “小范” age = 20

    5) 在栈空间中声明一个p2,将p1在栈空间中保存的堆地址复制给p2

    6)p2.age 改变 堆空间保存的 age属性。

  • 相关阅读:
    liunx 解压与压缩
    缓存设计与优化
    易混乱javascript知识点简要记录
    初识RedisCluster集群
    Redis Sentinel(哨兵模式)
    JavaScript作用域简单记录
    JavaScript引用类型简单记录
    redis主从复制初识
    javascript基础知识点
    持久化的一些问题
  • 原文地址:https://www.cnblogs.com/SongHai/p/14033946.html
Copyright © 2011-2022 走看看