• SE -- 面对对象


     

    面对对象

    面向过程 强调的是功能行为

    面向对象 将功能封装进对象,强调具备了功能的对象

    面向对象是基于面向过程的。

    特点: 是一种符合人们思考习惯的思想 可以将复杂的事情简单化 将程序员从执行者转换成指挥者

    完成需求时:先要去找具有所需的功能的对象来用,如果该对象不存在 那么就创建一个具有所需功能的对象 这样简化开发并提高复用

    开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情

    设计的过程:其实就是在管理和维护对象之间的关系

    面向对象的特征:封装 继承 多态

     

    类与对象

    类:对现实生活中的事物的描述

    对象:这类事物,实实在在存在的个体

    描述就是class定义的类

    具体对象就是java在堆内存中用new建立实体

    属性:对应类中的成员变量

    行为:对应类中的成员函数

     

    class Car
    {
        //属性 颜色、轮胎数
        String color = "红色";
        int num = 4;
    
        //行为 运行行为
        void run()
        {
            System.out.println(color + "..." +num);
        }
    
    }
    
    class CarDemo
    {
        public static void main(String[] args)
        {
            //通过new操作符 在堆内存中产生实体 类类型变量指向对象
            //产生了对象 数据类型 对象名 = new 类
            Car c = new Car();
            c.run();
        }
    }

     

    成员变量和局部变量

    成员变量

    成员变量定义在类中,在整个类中都可以被访问。

    成员变量随着对象的建立而建立,存在于对象所在的堆内存中

    成员变量有默认初始化值

    局部变量

    局部变量只定义在局部范围内,如:函数中,语句内等。

    局部变量存在于栈内存中

    作用的范围结束,变量空间会自动释放

    局部变量没有默认初始化值

     

    匿名对象

    匿名对象是对象的简化形式

    情况:1、当对对象方法仅进行一次调用的时候;2、匿名对象可以作为实际参数进行传递

     

    //需求 对汽车进行改装 将来的车改为黑色、三个轮胎
    class Car
    {
        //定义汽车轮胎数 、颜色
        int num;
        String color;
        void run()
        {
            System.out.println(color + "..." + num);
        }
    }
    
    class CarDemo
    {
        public static void main(String[] args)
        {
            /*
            Car c1 = new Car();
            show(c1);
            */
            show(new Car());
        }
    
        //
        public static void show(Car c)
        {
            c.num = 3;
            c.color = "black";
            c.run();
        }
    }

     

    封装 Encapsulation 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式

    优势:将变化隔离 便于使用 提高重用性 提高安全性

    原则:1、将不需要对外提供的内容都隐藏起来 2、吧属性都隐藏,提供功能方法对其访问

    private 私有关键字    

    是一个权限修饰符 用于修饰成员(成员变量和成员函数) 被私有化的成员只在本类中有效

    常用:将成员变量私有化,对外提供对应的set get方法对其进行访问,提高对数据访问的安全性

     

    class Person
    {
        private int  age;
        //私有化 需要对外提供方法访问
        public void setAge(int a)
        {
            if(a>=0 && a<=1300)
            {
                age = a;
                speak();
            }
            else
                System.out.println("error age...");
        }
        public int getAge()
        {
            return age;
        }
        void speak()
        {
            System.out.println("age ... " + age);
        }
    }
    
    class PersonDemo
    {
        public static void main(String[] args)
        {
            Person p = new Person();
            p.setAge(20);             //age ... 20
        }
    }

     

     

     

    构造函数

    特点:函数名与类名相同 不用定义返回值类型 不可以写return语句

    作用:对对象进行初始化

     

    class Person
    {
        //构造函数
        Person()
        {
            System.out.println("person run....");
        }
    }
    
    class PersonDemo
    {
        public static void main(String[] args)
        {
            Person p = new Person();          //person run....
        }
    }

     

    构造函数是在对象一建立就运行 给对象初始化 而一般方法是对象调用才运行 给对象添加对象的功能

    class Person
    {
        private String name;
        private int age;
        //构造函数
        Person()
        {
            System.out.println("A:name : " + name + "...age : " + age);
            cry();
        }
        Person(String n)
        {
            name = n;
            System.out.println("B:name : " + name + "...age :  " + age);
            cry();
        }
        Person(String n, int a)
        {
            name = n;
            age = a;
            System.out.println("C:name : " + name + "...age : " + age);
            cry();
        }
        public void cry()
        {
            System.out.println("cry...");
        }
        
    }
    
    class PersonDemo
    {
        public static void main(String[] args)
        {
            Person p1 = new Person();          //A:name : null...age : 0   cry...
            Person p2 = new Person("wu");      //B:name : wu...age :  0    cry...
            Person p3 = new Person("wu",2);     //C:name : wu...age : 2    cry...
        }
    }

    注意:1、默认构造函数的特点 2、多个构造函数是以重载的形式存在的

     

    1、有默认构造函数

    2、自定义的构造函数会替代原有默认构造函数

    构造代码块 

    {

    作用:给对象进行初始化 对象一建立就运行 而且优先于构造函数执行

    区别:构造代码块 是给所有对象进行统一初始化 而构造函数是给对应的对象进行初始化

    }

    对象

    this 关键字

    this代表其所在函数所属对象的引用

    当在函数内需要用到调用该函数的对象时,就用this

     

    class Person
    {
        private String name;
        private int age;
        //构造函数 局部有name 就在局部中找name this关键字使用 this.name代表对象中的name
        Person(String name)
        {
            this.name = name;
        }
        public void speak()
        {
            System.out.println("name..." + name + "...age..." + age);
        }
    }
    
    class PersonDemo
    {
        public static void main(String[] args)
        {
            Person p = new Person("wu");
            p.speak();                  //name...null...age...0
        }
    }

     

    class Person
    {
        private int age;
        Person(int age)
        {
            this.age = age;
        }
        //需求 : 比较两个人是否是同龄人
        //结果 boolean 
        //参数 Person p
        public boolean compare(Person p)
        {
            //定义类中功能时 该函数内部要用到调用该函数的对象时 这时用this来表示这个对象
            return this.age == p.age;
        }
    }
    
    class PersonDemo
    {
        public static void main(String[] args)
        {
            Person p1 = new Person(20);
            Person p2 = new Person(25);
            System.out.println(p1.compare(p2));       //false
        }
    }

    构造函数之间调用

    this语句只能定义在函数的第一行 构造函数之间的调用只能用this()

    static(静态)关键字 方法区/共享区/数据区

    1、用于修饰成员(成员变量和成员函数)

    2、被修饰后的成员具备的特点:随着类的加载而加载; 优先于对象存在 被所有对象所共享;可以直接被类名调用 类名.静态成员

    3、注意:静态方法只能访问静态成员 静态方法中不可以写this super关键字(静态优先于对象存在 不可存在) 主函数是静态的

    main 函数 作为程序的入口被jvm调用

    public 该函数的访问权限最大

    static  静态 随着类的加载而已存在

    void 主函数没有具体的返回值

    main 函数名 被JVM识别

    String[] args 函数的参数 参数类型是一个数组 该数组中的元素是字符串 字符串类型的数组

     

    public class MainDemo 
    {
        public static void main(String[] args) 
        {
            String[] arr = {"aa", "bb","cc","dd"};
            MainTest.main(arr);                                  //aa  bb  cc  dd
        } 
    }
    
    class MainTest
    {
        public static void main(String[] args)
        {
            for(int x=0; x<args.length; x++)
            {
                System.out.println(args[x]);
            }
        }
    }

    什么时候使用静态 : 静态修饰成员变量/成员函数

    什么时候定义静态变量(类变量):当对象中的出现共享数据,该数据被静态所修饰;对象中的特有数据定义成非静态在堆内存中

    什么时候定义静态函数:当功能内没有访问到非静态数据/对象的特有数据,该功能可以定义成静态。

    静态的应用--工具类

    帮助文档的制作--javadoc javadoc -d 目录 -author -version java文件名 public修饰

    注意:一个类中会有一个默认的空参数的构造函数,其权限类型和类的权限类型一致

    静态代码块 static {静态代码块执行语句;} 注意:随着类的加载而执行,只执行一次并优先于主函数。用于给类进行初始化

    class staticCode
    {
        static
        {
            System.out.println("a");
        }
    }
    
    class  staticCodeDemo
    {
        static 
        {
            System.out.println("b");
        }
        public static void main(String[] args) 
        {
            System.out.println("Hello World!");
        }
        static 
        {
            System.out.println("c");
        }
    }
    /*---------- java ----------
    b
    c
    Hello World!
    */
    class staticCode
    {
        static
        {
            System.out.println("a");
        }
    }
    
    class  staticCodeDemo
    {
        static 
        {
            System.out.println("b");
        }
        public static void main(String[] args) 
        {
            new staticCode();
            new staticCode();
            System.out.println("d");
        }
        static 
        {
            System.out.println("c");
        }
    }
    /*---------- java ----------
    b
    c
    a
    d
    */
    class staticCode
    {
        static
        {
            System.out.println("a");
        }
        public static void show()
        {
            System.out.println("e");
        }
    }
    
    class  staticCodeDemo
    {
        static 
        {
            System.out.println("b");
        }
        public static void main(String[] args) 
        {
            staticCode.show();
            System.out.println("d");
        }
        static 
        {
            System.out.println("c");
        }
    }
    /*---------- java ----------
    b
    c
    a
    e
    d
    */

    对象初始化过程

    对象调用成员过程

    设计模式

    单例设计模式

     一个类在内存只存在一个对象

    拼命敲
  • 相关阅读:
    php and web service with wsdl
    QT creator出现 no executable specified时解决办法
    ECShop 2.x 3.0代码执行漏洞分析
    关于QtCharts中的映射器与模型的使用
    QT 异步函数转为同步函数的方法
    Win7+Qt5.6.0(64位)+msvc2015编译器 环境配置
    SMTP用户枚举原理简介及相关工具
    Android系统广播机制存在漏洞,恶意软件可绕过安全机制跟踪用户
    Qt 维护工具MaintenanceTool.exe 使用
    漏洞预警 | ECShop全系列版本远程代码执行高危漏洞
  • 原文地址:https://www.cnblogs.com/wuyuwuyueping/p/9048960.html
Copyright © 2020-2023  润新知