• 面向对象1---封装


    第一章、概述

    1、封装的形式

          1.1)类:封装的是对象的属性和行为

          1.2)方法:封装的是具体的业务逻辑实现

          1.3)访问控制修饰符:封装的是访问的权限

    第二章、类

    第一节、类的基本介绍

    1、      概述

    1.1组成:类定义了一种抽象数据类型,而类不但定义了抽象数据类型的组成(成员变量),同时还定义了对该类型可以实施的操作(方法)。

    1.2好处

    首先:定义了Emp类以后,提升了代码的模块化以及代码的重用性

    其次:实现数据和方法(对该类数据的操作)的统一,也就是说,可以将打印信息的方法也放在Emp中定义,这样方法中的变量和类中的变量实现了统一,可直接对成员变量进行操作;

    最后:将功能模块化,方便管理;

    1.3概念理解

    类是一种引用数据类型。类为对象的模板,简单的说就是分类。

    2、      使用

    2.1定义一个类

    2.1.1定义类的成员变量

    (一)作用:“成员变量”用于描述一类对象共同的数据结构

    (二)语法:修饰符  数据类型   变量名 = 变量值;

    注意:修饰符可以不写;

    (三)调用

    对象引用.变量名;

    2.1.2定义类的方法

    (一)作用:用于描述对象的形为,封装对象的功能;

    (二)语法

    1. 返回值类型 方法名称(参数列表) {
    2. 方法体………
    3.     }

    (三)使用---调用

    其他类中通过:对象引用.方法名(有参数就传参数);

    本类中:方法名(有参数就传参数)

    第二节:对象

    1、 对象的概述

    2、 对象的使用

    2.1、声明对象

    类名   引用;

    引用概念:为了能够对实例化的对象进行访问控制,需一个特殊的变量,即引用。

    引用工作原理:引用类型变量可以存储该类对象的地址信息,通常称为“指向该类的对象”,当一个引用类型变量指向该类的对象,就可以通过这个变量对对象实施访问。

    引用类型:除8种基本类型之外,用类、接口、数组等声明的变量都称为引用类型变量,简称“引用”。

    2.2创建对象(此创建对象的过程也通常称为实例化)

    可以使用new关键字来创建对象。new运算的语法为: new 类名();

    定义好类之后,可以创建该类的对象;对象创建之后,其成员变量在加载类的时候就可以按照默认的方式初始化;对象成员变量的默认初始化值规则如下图 - 5所示:

    2.3赋值对象

    (一)new 类名();

    (二)相同类型的引用类型变量之间相互赋值

    注意的是:引用类型变量之间的赋值不会创建新的对象,但有可能会使两个以上的引用指向同一个对象;简单的理解就是一个人有两个名字;每个引用操作的对象数据,都是同一个数据;

    1. Emp e1 = new Emp();
    2. Emp e2 = e1;  //将e1的值(对象的地址信息)赋给e2,e2和e1指向相同的对象。

    (三)对其赋值为null。null的含义为“空”,表示还没有指向任何对象

    注意:使用的时候必须将该引用指向一个对象,不然会报空指针异常

    1. Emp emp = null;   //引用emp中的值为null,没有指向任何对象;
    2. emp = new Emp();  //引用emp指向了一个Emp对象;

    1. JFrame frame = null;

    2. 2.frame.setSize(200,300);

    第三节、方法

    一、概述

    方法的种类:普通方法和构造方法;

    普通方法的使用:方法的重载和重写

    二、方法的重载

    1、意义

    (1)可以降低用户的负担,用户使用不同方式去付款时不需要去找对应的窗口,只需要到同一个收款窗口就可以了

    (2)减少了用户使用时的错误

    (3)代码更加优雅一些。

    2.代码运行相关

    (1)编译器在编译时会根据方法的签名自动绑定方法

    3.代码定义注意

    (1)发生在同一个类中,方法名称相同,参数列表不同

    三、构造方法

    1.作用

    对于业务:为了在创建对象的时候,就要为对应的属性设置固定值,所以需要构造方法;

    对于代码:用于实现对对象成员变量的初始化:放在创建的对象的new后面;可以理解为:“new”创建了对象,而构造方法对该对象进行了初始化

    2.定义

    (一)规则

    1. 构造方法的名称必须与类名相同。
    2. 构造方法没有返回值,没有返回值类型

    (二)代码格式

    1. 【访问修饰符】类名(参数列表可以没有) {
    2.      //构造方法体
    3. }

    3、使用

    A、创建构造方法

    任何一个类都必须含有构造方法,假如源程序中没有定义,则编译器在编译时将为其添加一个无参的空构造方法(此方法称之为“默认的构造方法”)。;但是如果自定义了构造方法,则不会创建默认的构造方法;

    B、用于new后面,对对象的初始化

    用于实现对对象成员变量的初始化:放在创建的对象的new后面;可以理解为:“new”创建了对象,而构造方法对该对象进行了初始化

    c:构造方法的调用

    使用了this关键字,在构造方法中可以通过this关键字来调用另外的一个重载的构造方法。this(row,row)调用了第一段声明Cell(int row, int col)构造方法。

    4、特性

    A:构造方法的重载

    很多时候,为了使用的方便,可以对一个类定义多个构造方法,这些构造方法都有相同的名称(类名),只是方法的参数不同,称之为构造方法的重载

    B:构造方法是可以被private修饰的,作用:其他程序无法创建该类的对象。

    C:父子类中:

    (1)在创建子类对象时,父类的构造方法会先执行,为什么?

    因为子类中所有构造方法的第一行有默认的隐式super();语句。

    (2)子类中的构造方法为什么会有一句隐式的super()呢?

    原因:子类会继承父类中的内容,所以子类在初始化时,必须先到父类中去执行父类的初始化动作。这样,才可以使用父类中的内容。

    当父类中没有空参数构造方法时,子类的构造方法必须有显示的super语句,指定要访问的父类有参数构造方法。

    5、构造方法和一般方法的区别

    5.1定义格式

    5.2创建方式

    构造方法:如果程序员没有写,系统会默认创建一个无参构造方法;如果写了,就不会默认创建;

    方法:程序员自己创建

    5.3作用

    构造方法:创建对象的时候,为对象初始化;

    方法:需要用该方法算法的时候,由对象调用

    三、方法的重写

    1.方法的重写(Override):重新写、覆盖

    1)发生在父子类中,方法名称相同,参数列表相同,方法体不同

    2)重写方法被调用时,看对象的类型

    2.4重写与重载的区别:---------面试题

    1)重写(Override): 1.1)发生在父子类中,方法名称相同,参数列表相同,方法体不同 1.2)遵循"运行期绑定",看对象的类型来调用方法 2)重载(Overload): 2.1)发生在一个类中,方法名称相同,参数列表不同,方法体不同 2.2)遵循"编译期绑定",看引用的类型来绑定方法

    第四节、变量

    成员变量与局部变量的差别如下:

    区别一:定义的位置不同

    定义在类中的变量是成员变量

    定义在方法中或者{}语句里面的变量是局部变量

    区别二:在内存中的位置不同

    成员变量存储在对内存的对象中

    局部变量存储在栈内存的方法中

    区别三:声明周期不同

    成员变量随着对象的出现而出现在堆中,随着对象的消失而从堆中消失

    局部变量随着方法的运行而出现在栈中,随着方法的弹栈而消失

    区别四:初始化不同

    成员变量因为在堆内存中,所有默认的初始化值

    局部变量没有默认的初始化值,必须手动的给其赋值才可以使用。

    第三章、类的种类

    第一节、内部类

    一、概述

    l  什么是内部类

    将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类。其他类也称为外部类。

    l  什么时候使用内部类

    在描述事物时,若一个事物内部还包含其他可能包含的事物,比如在描述汽车时,汽车中还包含这发动机,这时发动机就可以使用内部类来描述。

    class 汽车 { //外部类

        class 发动机 { //内部类

    }

    }

    l  内部类的分类

    内部类分为成员内部类与局部内部类。

    我们定义内部类时,就是一个正常定义类的过程,同样包含各种修饰符、继承与实现关系等。在内部类中可以直接访问外部类的所有成员。

    二、    成员内部类

    成员内部类,定义在外部类中的成员位置。与类中的成员变量相似,可通过外部类对象进行访问

    l  定义格式

    class 外部类 {

        修饰符 class 内部类 {

            //其他代码

    }

    }

    l  访问方式

    外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

     

    l  成员内部类代码演示

    定义类

    class Body {//外部类,身体

        private boolean life= true; //生命状态

         public class Heart { //内部类,心脏

      public void jump() {

             System.out.println("心脏噗通噗通的跳")

                System.out.println("生命状态" + life); //访问外部类成员变量

    }

    }

    }

    访问内部类

    public static void main(String[] args) {

        //创建内部类对象

        Body.Heart bh = new Body().new Heart();

        //调用内部类中的方法

        bh.jump();

    }

    二、    局部内部类

    局部内部类,定义在外部类方法中的局部位置。与访问方法中的局部变量相似,可通过调用方法进行访问

    l  定义格式

    class 外部类 {

        修饰符 返回值类型 方法名(参数) {

    class 内部类 {

    //其他代码

    }

    }

    }

    l  访问方式

    在外部类方法中,创建内部类对象,进行访问

    l  局部内部类代码演示

    定义类

    class Party {//外部类,聚会

        public void puffBall(){// 吹气球方法

            class Ball {// 内部类,气球

                  public void puff(){

         System.out.println("气球膨胀了");

    }

    }

    //创建内部类对象,调用puff方法

    new Ball().puff();

    }

    }

    访问内部类

    public static void main(String[] args) {

        //创建外部类对象

        Party p = new Party();

        //调用外部类中的puffBall方法

        p.puffBall();

    }

     

    三、    内部类的实际使用——匿名内部类

    1、匿名内部类概念

    内部类是为了应对更为复杂的类间关系。查看源代码中会涉及到,而在日常业务中很难遇到,这里不做赘述。

    最常用到的内部类就是匿名内部类,它是局部内部类的一种。

    定义的匿名内部类有两个含义:

    n  临时定义某一指定类型的子类

    n  定义后即刻创建刚刚定义的这个子类的对象

    2、定义匿名内部类的作用与格式

    作用:匿名内部类是创建某个类型子类对象的快捷方式。

    格式:

    new 父类或接口(){

        //进行方法重写

    };

    l  代码演示

    //已经存在的父类:

    public abstract class Person{

        public abstract void eat();

    }

    //定义并创建该父类的子类对象,并用多态的方式赋值给父类引用变量

    Person  p = new Person(){

        public void eat() {

            System.out.println(“我吃了”);

    }

    };

    //调用eat方法

    p.eat();

    使用匿名对象的方式,将定义子类与创建子类对象两个步骤由一个格式一次完成,。虽然是两个步骤,但是两个步骤是连在一起完成的。

    匿名内部类如果不定义变量引用,则也是匿名对象。代码如下:

    new Person(){

        public void eat() {

            System.out.println(“我吃了”);

    }

    }.eat();

    第四章、修饰符

    一、应用


    1.       类:
    2.        权限修饰符:默认的、public
    3.        状态修饰符:final
    4.        抽象修饰符:abstract
    5.       
    6.        用的最多的就是:public
    7.      
    8.       成员变量:
    9.        权限修饰符:private、默认的、protected、public
    10. 10.        状态修饰符:static、final
    11. 11.       
    12. 12.        用的最多的就是:private
    13. 13.       
    14. 14.       构造方法:
    15. 15.        权限修饰符:private、默认的、protected、public
    16. 16.       
    17. 17.        用的最多的就是:public
    18. 18.       
    19. 19.       成员方法:
    20. 20.        权限修饰符:private、默认的、protected、public
    21. 21.        状态修饰符:static、final
    22. 22.        抽象修饰符:abstract
    23. 23.       
    24. 24.        用的最多的就是:public

    1.       除此以外的组合规则:
    2.        成员变量:public static final
    3.        成员方法:public static
    4.            public final
    5.            public abstract

    二、种类

    限修饰符:private、默认的、protected、public

    状态修饰符:static、final

    抽象修饰符:abstract

    1public:公开的,任何类

    2protected:受保护的,本类、子类、同包类

    3默认的:什么也不写,本类、同包类

    4private:私有的,本类

    5.static:静态的

    (1)为什么需要静态

    1)静态变量:

    1.1)由static修饰

    1.2)特性:属于类的,存储在方法区中,只有一份;某一个对象修改,其他对象的数据也变化;

    1.3)如何用:常常通过类名点来访问;

    1.4)何时用:所有对象所共享的资源(图片、音频、视频等)

    2)静态方法:

    2.1)由static修饰

    2.2)属于类的,存储在方法区中,只有一份

    2.3)常常通过类名点来访问

    2.4)静态方法没有隐式this传递的,

    静态方法中不能直接访问实例成员

    2.5)何时用:方法的操作仅与参数相关而与对象无关

    3)静态块:

    3.1)由static修饰

    3.2)属于类的,在类被加载时自动执行,因为类中被加载一次,所以静态块也只执行一次

    3.3)何时用:加载/初始化静态资源(图片、音频、视频等)

     4)注意事项

    4.1)静态内容是优先于对象存在,只能访问静态,不能使用this/super。静态修饰的内容存于静态区

    4.2)同一个类中,静态成员只能访问静态成员(属性或者方法)

    4.3)main方法为静态方法仅仅为程序执行入口,它不属于任何一个对象,可以定义在任意类中。

    6.final:最终的、不可改变的------单独应用的机率小

    1)修饰变量:只能赋值一次;

    引用类型的变量:值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改;

    成员类型变量:需要在创建对象前赋值,否则报错。(当没有显式赋值时,多个构造方法的均需要为其赋值。)

    2)修饰方法:方法不能被重写

    3)修饰类:类不能被继承

    7.static final:常量,应用率高

    1)必须声明同时初始化

    2)通过类名点来访问,不能被改变

    3)建议:常量名所有字母都大写,多个单词用_分隔

    4)编译器在编译时直接将常量替换为具体的值,效率高

    8、参考链接

    https://blog.csdn.net/l1585931143/article/details/52894234

    第五章、代码块

    a)   局部代码块

    局部代码块是定义在方法或语句中

    特点:

    l  以”{}”划定的代码区域,此时只需要关注作用域的不同即可

    l  方法和类都是以代码块的方式划定边界的

    class Demo{

        public static void main(String[] args) {

            {

                     int x = 1;

                     System.out.println("普通代码块" + x);

            }

            int x = 99;

            System.out.println("代码块之外" + x);

        }

    }

    结果:

    普通代码块1

    代码块之外99

    b)   构造代码块

    构造代码块是定义在类中成员位置的代码块

    特点:

    l  优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作

    l  每创建一个对象均会执行一次构造代码块。

    public class Person {

        private String name;

        private int age;

       

         //构造代码块

        {

            System.out.println("构造代码块执行了");

        }

        Person(){

            System.out.println("Person无参数的构造函数执行");

        }

        Person(int age){

            this.age = age;

            System.out.println("Person(age)参数的构造函数执行");

        }

    }

    class PersonDemo{

        public static void main(String[] args) {

            Person p = new Person();

            Person p1 = new Person(23);

        }

    }

    c)   静态代码块

    静态代码块是定义在成员位置,使用static修饰的代码块。

    特点:

    l  它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。

    l  该类不管创建多少对象,静态代码块只执行一次。

    l  可用于给静态变量赋值,用来给类进行初始化。

    public class Person {

        private String name;

        private int age;

         //静态代码块

        static{

            System.out.println("静态代码块执行了");

        }

    }

    向成为千里马奋斗,为伯乐打call;
  • 相关阅读:
    自制 移动端 纯原生 Slider滑动插件
    CSS3动画几个平时没注意的属性
    移动开发屏幕适配分析
    CSS3伸缩盒Flexible Box
    grep命令做永久别名 显示颜色
    centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~/.bash_profile 2015-4-10 第十三节课
    centos shell基础 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 nohup & 后台运行 cut,sort,wc ,uniq ,tee ,tr ,split, paste cat> 2.txt <<EOF 通配符 glob模式 发邮件命令mail 2015-4-8 第十二节课
    wget 命令大全
    centos 阶段复习 2015-4-6 dd命令 hosts.allow和hosts.deny 啊铭的myssh脚本 清空history命令历史 /dev/zero 零发生器 /dev/null 黑洞 /dev/random 生成随机数 第十一节课
    Linux下LDAP统一认证解决方案
  • 原文地址:https://www.cnblogs.com/mhy666/p/9347305.html
Copyright © 2020-2023  润新知