Java学习笔记(2)第六节--面向对象思想

1.面向对象三大特征:

        封装,继承,多态

2.类和对象。

        类是对一类事物的描述,是抽象的。

        对象是类的具体的实例。

3.类的组成:

        1.属性        2.行为

        属性决定了类里面有什么,行为描述了这个类能做什么。

例子:定义一个学生类,用来模拟学生。

/*

        学生(属性,行为)

                1.属性:

                        姓名,年龄

                2.行为:

                        吃饭,学习,睡觉

*/


对应Java类:

    成员变量(属性)

                String name;    //姓名

                int age;            //年龄

    成员方法(行为)

                public void eat();            //吃饭

                public void sleep();        //睡觉

                public void study();        //学习

TIP:

        1.成员变量是直接定义在类中的,在方法外边。

        2.成员方法不要写static关键字。


代码示例:

public class DemoStudent {

    Stringname;

    int age;

    public  void eat(){

    System.out.println("现在我在吃饭");

    }

    public  void sleep(){

        System.out.println("现在我在睡觉");

    }

    public  void study(){

        System.out.println("现在我在学习");

    }

    public void eat(String food){

        System.out.println("我在吃"+food);

    }

}


4.引用类:

一般来说,类不能直接使用,需要根据类创建一个对象才能使用。

        1.导包:import    包名称.类名称(如果处于同个包下的文件,那么可以省略这个步骤)

        2.创建:

                类名称    对象名 = new    类名称();

                Student stu = new Student();

        3.使用:分两种情况:

                1.使用成员变量:    对象名.成员变量名

                1.使用成员方法:    对象名.成员方法名(参数)

处于同个包

代码示例

public class Student {

public static void main(String[] args) {

DemoStudent student =new DemoStudent();

        student.name="胡歌";

        student.age =18;

        System.out.println("学生姓名:"+student.name+"\n学生年龄:"+student.age);

        student.eat();

        student.eat("青菜");

        student.sleep();

        student.study();

    }

}

运行结果

TIP:

        1.程序执行时调用方法进栈,方法执行完立刻从栈中退出。

        2.一旦main方法结束,main方法也会退出内存,整个程序都没有了

        3.两个对象指向同一个对象空间,对象名只是一个引用,

        4.把方法作为一个参数传递进去,实际上传递进去的就是地址值。



5.方法作为返回值:

        1.要返回类型接收,方法必须是静态的。(加static修饰符)

代码示例:

public class DemoReturnMethod {

    public static void main(String[] args) {

        DemoStudent studenttest =returnStudent();

        System.out.println("学生姓名:"+studenttest.name+"\n学生年龄:"+studenttest.age);

        studenttest.eat();

        studenttest.eat("鸡腿");

        studenttest.sleep();

        studenttest.study();

    }

public static DemoStudentreturnStudent(){

        DemoStudent returnstudent =new DemoStudent();

        returnstudent.name="李逍遥";

        returnstudent.age =20;

        return returnstudent;

    }

}


运行结果



6.局部变量和成员变量的差别

        1.定义的位置不一样

                局部变量:方法的内部

                成员变量:在方法的外部,直接写在类当中

        2.作用范围不一样

                局部变量:只有方法当中可以调用,出了方法就不行

                成员变量:整个类都可以通用

        3.默认值不一样

                局部变量:没有默认值,如果要使用,必须手动赋值

                成员变量:如果没有赋值,会有默认值,跟数组默认值一样。

                (tip:参数在方法调用的时候必然会赋值)

        4.内存位置不一样

                局部变量:位于栈内存

                 成员变量:位于堆内存

        5.生命周期不一样

                局部变量:随着方法进栈而诞生,方法出栈而结束

                成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失                   



7.封装:

        含义:将一些细节信息隐藏起来,对外界不可见。

        类型:1.方法    2.private 

private 代码示例:

Person类

package demoprivate;

public class Person {

    Stringname;

    private int age;

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        if(age>0&&age<150) {

                this.age = age;

        }

        else

        {

                System.out.println("数据不合理!");

        }

}

测试主函数:

package demoprivate;

public class DemoPrivate {

public static void main(String[] args) {

        Person person =new Person();

        person.name ="坂田银时";

        person.setAge(28);

        person.print();

    }

}

运行结果

TIP:

        1.间接访问就是定义一个 Getter 和 Setter 方法

                对于Getter来说,不能有参数,返回值类型和成员变量对应,

                对于Setter来说,不能有返回值,参数类型和成员变量对应。

        2.布尔类型的返回函数,不是Getter,而是isGetter()。


8.this关键字

当方法的局部变量和成员变量重名的时候,会优先“就近原则”,优先使用局部变量

使用    this    来区分。

通过谁调用的方法,谁就是this


9.构造方法

        1.含义:专门用来创建对象的方法。跟new一样

        2.格式:

                public 类名称(参数类型    参数名称){

                        方法体;

                }

        3.注意事项:

                1.构造方法的名称必须和所在类的类名称完全一样,大小写也一样。

                2.构造方法不要写返回值类型,连void都不写。    

                3.构造方法不能return一个具体的返回值。

                4.如果没有编写构造方法,那么编译器会自动默认创建

                5.一旦编写了构造方法,那么将自动重载原本默认的构造方法

                6.重载:方法名称相同,方法参数列表不同。



10.标准类:

标准类也叫Java Bean

        格式:

                1.所有的成员变量都要使用pravite关键字进行私有化修饰

                2.为每一个成员变量编写Setter/Getter方法

                3.编写一个无参数的构造方法

                4.编写一个全参数的构造方法

代码示例:

标准Student类:

package demobiaozhunlei;

public class Student {

    private  Stringname;

    private  int age;

    private  Stringsex;

    public Student(String name, int age, String sex) {

        this.name = name;

        this.age = age;

        this.sex = sex;

    }

        public Student() {

        }

        public StringgetName() {

                return name;

        }

    public void setName(String name) {

            this.name = name;

    }

    public int getAge() {

            return age;

    }

    public void setAge(int age) {

            this.age = age;

    }

    public StringgetSex() {

            return sex;

    }

    public void setSex(String sex) {

            this.sex = sex;

    }

}

测试主函数方法:

package demobiaozhunlei;

public class DemoBiaoZhunLei {

public static void main(String[] args) {

        Student stu1 =new Student();

        stu1.setName("坂田银时");

        stu1.setAge(25);

        stu1.setSex("男");

        System.out.println("我的名字是:"+stu1.getName()+"\n我的年龄是:"+stu1.getAge()+"\n我的性别是:"+stu1.getSex());

        System.out.println("=========================");

        Student stu2 =new Student("炮姐",18,"女");

        System.out.println("我的名字是:"+stu2.getName()+"\n我的年龄是:"+stu2.getAge()+"\n我的性别是:"+stu2.getSex());

        System.out.println("=========================");

        stu2.setAge(25);

        System.out.println("我的名字是:"+stu2.getName()+"\n我的年龄改变为:"+stu2.getAge()+"\n我的性别是:"+stu2.getSex());

    }

}


标准类运行结果

你可能感兴趣的:(Java学习笔记(2)第六节--面向对象思想)