A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

虚幻和妖仙

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 虚幻和妖仙 初级黑马   /  2019-8-21 00:16  /  808 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

经过15天的学习对类的知识学习的比较深刻,简单分享下
1. 类和对象
生活中所有的内容和事物,都可以用一个名词概括:东西
在Java中,所有的内容和事物,也都可以用一个名词概括:对象。       
        万物皆对象。       
生活中                                        Java中
类别/种类                                类        -        class
东西(具体的某个东西)        对象        -        Object
属性:有什么参数                成员变量
行为:能干什么                        成员方法

生活中:类别和东西的关系
        类别是东西的抽象        //界门纲目科属种
        东西是类别的实体
Java中:类和对象的关系
        类是对象的抽象
        对象是类的实体
       
类的特点:
        类是具有相同属性和行为的一类事物的集合/抽象。
        类是对象的数据类型
        eg:int        1
                人        张三               
面向对象
        面向对象是一种思想,一种解决问题的思路
        面向过程:只关注解决问题的过程,而不关注多个解决方法之间的关系等
        面向对象:在寻找解决方案前,先找对象(能解决我问题的对象),让对象来帮我拿出解决方案
       
        面向过程:关注的是解决问题的具体思路
        面向对象:关注的是能解决该类问题的对象               
2. 类的定义之成员变量和成员方法
        事物都有固有的属性,在Java中称之为成员变量,定义在类里面方法外面(局部变量定义在方法里面)
        事物都有一些行为,在Java中称之为成员方法,成员方法没有static关键字修饰
        类定义的格式:
        public class 类名{
                成员变量;
                数据类型 成员变量名1;
                数据类型 成员变量名2;
               
               
                成员方法(没有static关键修饰的方法,其他与之前方法的定义格式都一样):
                public 返回值类型 成员方法名1(){……}
                public 返回值类型 成员方法名2(){……}
        }
       
       
        大驼峰(类):第一个单词首字母大写,后面的每个单词首也字母大写
        小驼峰(方法、变量):第一个单词首字母小写,后面的每个单词首也字母大写       
3. 对象/类的使用
        需要定义一个测试类,测试类中有main方法(程序的入口),
        在main方法中通过创建被测试类的对象来使用其成员变量和成员方法。
       
        对象创建格式:
                类名 变量名/对象名 = new 类名();
                Scanner sc = new Scanner(System.in);
                Random r = new Random();
                Phone p = new Phone();       
成员的使用方法:

对象名.成员(成员变量和成员方法)
sc.nextInt();                --调用Scanner的成员方法
r.nextInt();                --调用Random的成员方法
       
Phone p = new Phone();
p.brand = "华为";                //成员变量的使用               
4. 对象的内存图



















直接打印对象,打印的是对象的地址值
                System.out.println(s);        //com.itheima_03.Student@f6d7a8
               
                [I@a9d2c4
                        [        数组
                        [[        二维数组
                        I         数组中元素类型(如果是引用数据类型,前面会加一个L,然后类型是完整的类型名<包含包名和类型>)
                        9d2c4        内存中地址值(16进制的hash值)
               
                com.itheima_03.Student@f6d7a8
                        com.itheima_03.Student         完整的类型名(完整的类名<包名和类名>)
                        f6d7a8        内存中地址值(16进制的hash值)
                                       
                对象的引用        存在栈内存中,其值是所指向对象的地址值(对象引用就是指向该对象的变量)
                对象本身        存在堆内存中,对象中成员变量的值有默认初始化值
                                        int        0
                                        String        null
                                       
                main方法执行的时候首先进栈,main方法中调用的其他方法,被调用的时候进栈,调用结束后就弹栈(结束)。       
                多个对象的成员方法相同,但是成员变量却独立拥有。       
                结论:
                        多个引用指向同一个对象,通过任何一个引用修改对象内容/值,其他引用对应内容或值会同时发生改变。
                       
                                引用个数        对象个数       
        情况一                1                        1                        一个引用指向一个对象,通过引用可以修改/使用对象
        情况二                2                        2                        两个引用分别指向了自己的对象,通过每个引用只能
                                                                                修改自己指向的对象,不会影响另外一个对象
        情况三                2                        1                        两个引用指向了同一个对象,可以理解成为
                                                                                该对象起了两个名字,任意一个名字就可以直接修改/使用对象。
                                                                                对象被修改后,通过任意一个名字读取该对象,结果值都是修改过的。
                                                                                       
5. 成员变量和局部变量的区别
        成员变量:定义在类中方法外的变量
        局部变量:定义在方法内或者方法声明上的变量

       
        区别:                                成员变量                                局部变量
                定义位置                见上
                内存中位置                堆内存中                                栈内存中
                初始化值                有默认初始化值                        没有默认初始化值,必须先定义、赋值后,才能使用
                生命周期                随着对象的创建而创建        随着方法的调用(进栈)而创建
                                                随着对象的消失而消失        随着方法的调用结束(弹栈)而消失
                                               
        成员的定义没有顺序,因为执行顺序由调用的顺序决定。
       
6. private

        是一个访问权限修饰符
        能修饰成员(成员变量和成员方法)
        作用:保护成员不被外界直接访问。被private修饰的成员只能在本类中被直接访问
                其他类中想要使用该程序员,就需要通过制定的方法来使用
               
        设置值:public void set变量(形式参数){}        通过该方法设置成员变量的值
        获取值:public 返回值类型 get变量()                通过该方法可以获取成员变量的值
       
        为了安全起见,我们可以在set方法中(setter)进行判断限定
        但是,一般不建议这样做:
                javabean - 实体类        实体类一般只包含基本的成员变量和变量的getter/setter,
                        这里的setter和getter最好是标准的,没有任何修改的。
                -30的年龄是属于业务逻辑问题,就业务逻辑层做判断排除,实体类一般用作实例化对象并且存储该对象的数据       
        编码思想:
                高内聚,低耦合
                一个方法只干一件事
                age        设置age --setAge(int a)          == s.name = 10
                        获取age值 --int getAge()  == s.name               
        实体类外获取|设置实体类成员变量的方式
                第一种(成员变量的访问权限修饰符不能是private)
                        设置 s.name = 值
                        获取 s.name
                       
                第二种(成员变量被private修饰后,因为被private修饰后,外界不能直接访问该成员)
                        设置s.setName(值)
                        获取 s.getName()
                        这种方式是java推荐的,建议重点掌握
                       
                第三种(非标准类成分,只能获取不能设置)
                        show()       
                        根据自己的思路展示成员变量的值
                       
                注:在实体类内部,可以随意访问成员变量/方法,不受任何限制
使用idea编辑器时,使用getter \setter方法可以使用编辑器快捷键:ALT+insert
                       
7. this关键字







       

this用于指代成员变量
        当方法中局部变量和成员变量不重名时,不需要使用this
        当方法中局部变量和成员变量重名时,需要在成员变量前面添加this关键字。解决的是局部变量隐藏成员变量的问题,没有该问题也可以使用this,但是没有意义。
       
        this代表的是当前对象
                谁调用当前方法,当前方法内的this只得就是谁。
               
8. 封装
        面向对象三大特征:封装、继承、多态
       
        封装的原则:
                将成员变量私有化,避免外部程序直接访问,可以通过指定的公共方法访问(getter、setter)
        封装的好处:
                成员变量不能被直接访问,提高了代码的安全性
                使用方法进行操作,提高了代码的复用性
               
               
9. 构造方法
        构造方法是一个特殊的方法
        自己定义的类,要想其他人能用,要创建对象,就必须创建构造方法。
        没有参数的构造方法一般称为无参构造
                public Student(){}
        有参数的构造方法一般称为有参构造
                public Student(String name, int age){
                        this.name = name;
                        this.age = age;
                }
        格式:
                访问权限修饰符 类名(参数 列表){}
               
                一般方法定义格式:访问权限修饰符 (其他修饰符) 返回值类型 方法名(参数列表){}
               
        功能:
                在创建对象的时候对对象进行初始化操作
               
        什么时间被调用
                在创建对象的时候被调用
构造方法无返回值类型,方法名与类名相同。
                       
10. 构造方法使用注意事项
        a. 如果没有手动书写构造方法,系统会默认提供一个无参构造。
        b. 但凡是手动写了任意一个构造方法,系统将不再提供默认无参构造。
        c. 构造方法之间可以重载
        d. 系统根据提供的参数列表决定调用某一个构造方法,没有对应的构造方法则会报错
       
       
        推荐书写方式:
                不管在任何时候,先手动书写一个无参构造
               
11. 面试题
        什么是面向对象?
                面向对象是Java里面的一个非常优秀的编程思想,区别于面向过程的思想,面向对象的思想更符合生活的思考方式。
                面向对象不只关注与解决问题是细节,更多的是关注能够解决问题的对象,以及对象的属性、行为。这种方式更贴近实际,对于维护大型项目或者复杂逻辑非常有用。
                面向对象有方便、高效的优势,比方说:父亲让儿子削苹果的例子。
                面向对象有三大特征:
                封装、继承、多态
                分开阐述三大特征
               
               
11. 怎么定位源码
        按住Ctrl + 鼠标左键单击(在想查看源码的地方)
       
       
       
       
       
       
       
       





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马