DAY5/6总结:面向对象

来源:互联网 发布:淘宝讲师爱上黄昏 编辑:程序博客网 时间:2024/06/03 03:45

this关键字:

package thisdemo;/* * this关键字: *  * this看上去,是用于区分局部变量和成员变量同名情况 * this到底代表的是什么呢? *  *  * this就代表本类的对象,到底代表哪一个呢? * this代表它所在函数所属对象的引用 * 简单说,叫做,哪个对象在调用this所在的函数,this就代表哪个对象 *  * this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,用this来表示这个对象 *          但凡是本类功能内部使用了本类对象,都用this表示 * */public class Person {
package thisdemo;public class PersonDemo {    public static void main(String[] args)     {        Person p1=new Person(20);        Person p2=new Person(28);        boolean b=p1.compare(p2);        System.out.print(b);        //Person p=new Person("lisi");        //Person p1=new Person("zhangsan");        //p.speak();//speak这个方法此时属于p这个对象,所以打印的是p里的name,age        //p1.speak();//speak这个方法此时属于p1这个对象,所以打印的是p1里的name,age        //    }}
package thisdemo;/*this语句:用于构造函数之间进行互相调用只能定义在构造函数的第一行*/public class Person1 {    private String name;    private int age;    Person1()    {    }    Person1(String name)    {        this();        this.name=name;    }
package thisdemo;public class PersonDemo1{    public static void main(String [] args)     {        Person1 p=new Person1("lisi",30);    }}

static关键字:

package staticdemo;/* * 静态static: *用法:是一个修饰符,用于修饰成员(成员变量和成员函数) *当成员被静态修饰后,就多了一种调用方式, *除了可以被对象调用外,还可以直接被类名调用。类名.静态成员 *  *  * static特点: *  1.随着类的加载而加载,随着类的消失而消失。说明生命周期最长 *  2.优先于对象存在。静态是先存在的,对象后存在 *  3.被所有对象共享 *  4.可以直接类名调用 *   *  * 实例变量和类变量的区别: *  1.存放位置: *      类变量随着类的加载而存在于方法区中;实例变量随着对象的建立而存在于堆内存中 *  2.生命周期 *      类变量生命周期最长,随着类的消失而消失;实例变量生命周期随着对象的消失而消失 *  3.主函数是静态的 *   *  静态使用注意事项: *  1.静态方法只能访问静态成员(包括变量和方法) *  2.非静态方法既可以访问静态,也可以访问非静态 *  3.静态方法中不可以定义this/super关键字 *   *   *  有利弊: *  利:对对象的共享数据进行单独空间的存储,节省 *     可以直接被类名调用 *  弊:生命周期过长 *     访问出现局限性,只能访问静态 * */class Person//Person类一加载到内存中,country就在内存中开辟了空间{    String name;//成员变量,实例变量,随着对象存在而存在    static String country="CN";//静态成员变量,类变量,随着类的存在而存在    public void show()     {        System.out.print("name="+name+","+country);    }}
package staticdemo;public class StaticDemo {    public static void main(String [] args)     {        Person p=new Person();        p.name="lisi";        p.show();        System.out.println(Person.country);        System.out.println(p.country);    }}/* 什么时候使用静态:静态修饰的内容有成员变量和成员函数 * 什么时候定义静态变量呢? * 当对象中出现共享数据(不是共享属性)时,对象中的特有数据要定义成非静态存在于堆内存中 *  *  * 什么时候定义静态函数呢? * 当功能内部没有访问到非静态数据(对象的特有数据) *  *  * */
package staticdemo;/*主函数:是一个特殊的函数,可以被jvm调用,作为程序的入口 *定义: * public:代表该函数的访问权限是最大的 * static:代表着主函数随着类的加载就已经存在 * void:对主函数没有具体的返回值 * main:不是关键字,但是是特殊的单词可以被jvm识别 * String[] arr:主函数的参数,参数类型是一个数组,数组中的元素是字符串,存储字符串类型的元素的数组 *  * 主函数是固定格式的:jvm识别 *  * jvm在调用主函数时,传入的是new String[0]; * */class MainDemo {    public static void main(String[] args)//new String[]    {        System.out.print(args.length);    }    public static void main(int x)     {    }}

构造函数:

package gouzaohanshu;/*对象一建立就会调用与之对应的构造函数 * 构造函数的作用:可以用于给对象进行初始化 * 对象调用与之对应的构造函数 *  * 构造函数的小细节: * 当一个类中没有定义构造函数时,那么系统将会默认给类加入一个空参数的构造函数 * 在类中自定义了构造函数后,默认的构造函数就消失 *  * 构造函数和一般函数在写法上不同,在运行上也有不同,构造函数是在对象一建立就运行 * 而一般方法是对象调用才执行,是给对象添加对象具备的功能 * 一个对象建立,构造函数只运行一次 * 而一般方法可以被该对象调用多次 *  * 什么时候定义构造函数:当分析事物时,该事物存在就具备一些特性或者行为 *  * */ class Person{                private String name;    private int age;    private String sex;    Person()//不定义构造函数时,系统会自动加一个,方便该类进行初始化,否则对象无法建立    {        System.out.println("name="+name+",age="+age);        //cry();    }    Person(String n)    {        name=n;        System.out.println("A:name="+name+",age="+age);        //cry();    }    public void setName(String n)     {        name=n;    }    public String getName()     {        return name;    }    Person(String n,int a)//人这类事物,所产生的对象在初始化时可能不一样    {        name=n;          //初始化方式可能不一样,所以定义不同的构造函数        age=a;        System.out.println("name="+name+",age="+age);        //cry();    }    public void cry()     {        System.out.println("cry........");    }}
package gouzaohanshu;public class PersonDemo {    public static void main(String[] args)     {    Person p1=new Person();//对象调用与之对应的构造函数,    p1.cry();//一般方法可以被调用多次    p1.cry();    Person p2=new Person("lisi");//一个类能产生n多对象,对象都可以对应    p2.setName("libusi");    p2.setName("haishilisi");//可以被调用多次    System.out.println(p2.getName());    //Person p2=new Person("libusi");//改的不是lisi的名字,是别人的,所以不能这样改名    //Person p3=new Person("wangwu",10);//不一样的初始化方式    // 把p2 p3注释掉,还有空参数构造函数也注释掉,编译失败,因为找空参数的构造函数初始化,可是Person类中没有    }}

初始化:

package initialize;   //对象的初始化过程    public class Person    {        private String name="haha";        private int age;        private static String country="country";        Person(String name,int age)        {            this.name=name;            this.age=age;        }        {            System.out.print(name+".."+age);        }        public void setName(String name)         {             this.name=name;        }        public void speak()         {            System.out.print(this.name+".."+this.age);        }        public static void showCountry()         {            System.out.print("country="+country);        }    }
package initialize;public class PersonDemo {    public static void main(String[] args)     {        Person p=new Person("zhangsan",20);        p.setName("lisi");        /*对象建立后,属性初始化,首先默认初始化null0,然后显示初始化,然后构造代码块初始化,然后构造函数初始化         * Person p=new Person();         * 该句话都做了什么?         * 1.因为new用到了Person.class文件,所以会先找到Person.class文件并加载到内存中         * 2.执行该类的static代码块(如果有的话)给Person.class类进行初始化         * 3.在堆内存中开辟空间,分配内存地址         * 4.在堆内存中建立对象的特有属性并进行默认初始化         * 5.对属性进行显示初始化         * 6.对属性进行构造代码块初始化         * 7.对对象进行对应的构造函数初始化         * 8.将内存地址赋给栈内存中的P变量         *          *          *          * */    }}
原创粉丝点击