Java基础学习之路-笔记day11

心不动则不痛 提交于 2020-02-25 21:23:18

JavaSe-day11-类和对象


    类和对象概念
        生活中所有的内容和事物,都可以用一个名词概括:东西
        在Java中,所有的内容和事物,也都可以用一个名词概括:对象。
        概念对比
            生活中                                     Java中
类别/种类                                       类    -    class
个体(具体的某个个体)            对象    -    Object
属性:有什么参数                           成员变量
行为:能干什么                              成员方法
1、类和对象的关系
    生活中:类别和个体的关系
    类别是个体的抽象    //界门纲目科属种
    个体是类别的真实一个存在

    Java中:类和对象的关系
        类是对象的抽象
        对象是类的实例
              具有相同属性和行为的一类事物的集合/抽象,封装的是这类事务共有的属性和行为。
              对象:类下面真实存在的很具体的一个个体
                        对象的点在于非常非常具体的一个个体
                        类是对事物类别的一种描述,对象则为具体存在的某一个事物
                       对象属于某个类,一个类可以有多个具体的对象
  Java中,类是对象的数据类型
                eg:
    int    a =1
    人    moumou =张三
 Student s = new Student();
        万物皆对象
    面向对象
        面向对象是一种思想,一种解决问题的思路,源于生活
   面向过程:只关注解决问题的过程,而不关注多个解决方法之间的关系等
        面向过程:关注的是解决问题的具体思路,相当于基层员工
            做法:
求和
1. 获取两个数
2. 把两个数相加
.....
n. 拿到计算结果


        面向对象:在寻找解决方案前,先找对象(能解决我问题的对象),让对象来帮我拿出解决方案
            面向对象:关注的是能解决该类问题的对象,相当于领导
            做法:
求和
1. 获取两个数
2. 让能实现求和的对象帮你算,算好了告诉你结果
2.1 定一个方法,这个方法有两个参数,方法体会运算结果,把结果返回
    类的定义
        生活中事物都有固有的属性,在Java中称之为成员变量,定义在类里面方法外面
            局部变量定义在方法里面(暂定)
        生活中事物都有一些行为,在Java中称之为成员方法,成员方法没有static关键字修饰
        现实生活中事务(eg:人)这个类别由属性和行为组成
        Java中类由成员变量和成员方法组成
类定义的格式
            public class 类名{
    成员变量;
    数据类型 成员变量名1;
    数据类型 成员变量名2;
        
    成员方法(没有static关键修饰的方法,其他与之前方法的定义格式都一样):
    public 返回值类型 成员方法名1(){……}
    public 返回值类型 成员方法名2(){……}
}
        命名规则
            大驼峰(类):第一个单词首字母大写,后面的每个单词首也字母大写
            小驼峰(方法、变量):第一个单词首字母小写,后面的每个单词首也字母大写
        对应关系:
现实生活中    Java类中
属性        成员变量
行为        成员方法
    对象/类的使用
        使用位置
            需要先编写一个测试类,测试类中有main方法(程序的入口)
                评判一个类是不是测试类,可以以有没有main方法类来判断(暂时)
            在main方法中通过创建被测试类的对象来使用其成员(成员变量和成员方法)。
        创建对象的格式
            类名 对象名 = new 类名();
            Scanner sc = new Scanner(System.in);
            Random r = new Random();
            Phone p = new Phone();
        调用成员的格式
            对象名.成员变量
            Phone p = new Phone();
            p.brand = "华为";        //成员变量的使用
            对象名.成员方法();
            sc.nextInt();        --调用Scanner的成员方法
            r.nextInt();        --调用Random的成员方法
            成员的定义没有顺序,因为执行顺序由调用的顺序决定。
        打印对象
            直接打印对象,打印的是根据对象根据内存地址等信息生成的16进制的hash值
            sout(new int[10])    -    [I@a9d2c4
                [    数组
                [[    二维数组
                I     数组中元素类型(如果是引用数据类型,前面会加一个L,然后类型是完整的类型名<包含包名和类型>)
                9d2c4    根据内存地址等信息生成的16进制的hash值
            sout(new Student())    -    com.itheima.Student@f6d7a8
                com.itheima.Student     完整的类型名(完整的类名<包名和类名>)
                f6d7a8    根据内存地址等信息生成的16进制的hash值
    对象的内存图
        对象的引用
            就是对象所属类型的变量
            存在栈内存中,值为其所指向的对象的地址值
            stu1不是对象 他仅仅是一个存在在栈内存中的一个引用类型的变量
            叫他变量也行 叫他对象引用也可以
        对象本身
            存在堆内存中的一块内存空间,对象中成员变量的值有默认初始化值
                整数类型 : 0
                小数类型 : 0.0
                字符类型 : '\u0000' (空字符)
                布尔类型 : false
                引用数据类型 : null
        方法执行
            被调用的方法进入栈内存才能运行,此为进栈
            方法运行结束后方法出栈,此为弹栈
            栈内存的运行特性:先进后出    -    FILO
            main方法执行的时候首先进栈,
main方法中调用的其他方法在被调用的时候进栈,调用结束后就弹栈
main方法继续执行调用上述方法后的代码,运行结束后弹栈
        成员内存分布
            成员变量:类下的每个对象独有,相互独立,存储在对象在堆内存开辟的空间中
            成员方法:类下所有对象共享,存储在方法区
        多个引用指向同一个对象
            对比图示
                
            多个对象引用(对象所属类类型的变量)存储的是同一个对象在堆内存中的地址值
            通过任何一个引用修改对象内容/值,其他引用对应内容或值会同时发生改变。
        单个引用指向单个对象内存图
            成员变量使用过程
                
            成员方法调用过程
                
            上课内存图
                
         多个引用指向不同对象内存图
            成员变量使用过程
                
            成员方法调用过程
                图碎了
            上课内存图
                
        多个引用指向相同对象内存图
            图示
                
            上课图示
                
        字节码对象
            类的字节码加载到方法区中,以字节码对象的形式存在
            字节码在被使用的时候才会加载进方法区,而且只加载一次
    成员变量和局部变量
        成员变量:定义在类中方法外的变量
        局部变量:定义在方法内或者方法声明上的变量
        区别图示
            
        变量的作用域
            变量只能在其定义的{}内可以使用,离开该区域后,变量将从内存中消失,不能继续使用
        注意:
            测试类中,main方法中不能使用main方法所在类的成员变量。因为静态只能调用静态,后续会讲。
            结论<暂定>:
测试类中,编写的方法一般都要带static
实体类中,编写的方法一般不要带static
    附件
        对象内存图、局部成员变量的区别文字版.md

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!