黑马程序员——Java练习笔记——面向对象

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
1.类与对象
1-1.对象:是具体的事物,我们叫做object,instance实例,以后我们说某个类的对象,某个类的实例,是一样的意思。
1-2.类:是对对象的抽象,我们叫做class,是对现实生活中事物的描述。
1-3.类和对象的关系:特殊到一般,具体到抽象。
类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
类是用于描述同一类型的对象的一个抽象的概念,类中定义了这一类 对象所应具有的静态和动态属性。
对象时JAVA程序的核心,在JAVA程序中“万物皆对象”。
JDK中提供了很多类供编程人员使用,编程人员也可定义自己的类。
1-4.成员变量和局部变量
1-4-1.局部变量
定义在方法内或者语句块内 从属于方法或者语句块
使用之前,必须手动初始化。
1-4-2.成员变量
定义在类里面、方法外面。从属于对象
如果没有手动初始化成员变量,系统会自动初始化
1-5.匿名对象
匿名对象是对象的简化形式。
匿名对象两种使用情况:①当对对象方法仅进行一次调用时;②匿名对象可以作为实际参数进行传递。
代码示例:

class Car
{
    String color  = "red";
    int num = 4;

    public static void run()
    {
        System.out.println("大奔run!");
    }
}
class Demo1 
{
    public static void main(String[] args) 
    {
        //对对象方法仅进行一次调用时
        new Car().run();
        //作为实际参数传递
        show(new Car());
    }
    public static void show(Car c)
    {
        c.num =3;
        c.color="green";
        System.out.println("大奔show!");
        System.out.println(c.num+"----"+c.color);
    }
}

结果:
黑马程序员——Java练习笔记——面向对象_第1张图片

2.封装
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:①将变化隔离。②便于使用。③提高复用性。④提高安全性
封装原则:
①将不需要对外提供的内容都隐藏起来。
②把属性都隐藏,提供公共方法对其访问。
示例代码:

class Demo2 
{
    public static void main(String[] args) 
    {
        Person  p = new Person();
        p.setAge(30);
        p.speak();
        //赋值不合法,set方法赋值不成功
        p.setAge(-10);
    }
}
class Person
{
    //:private:私有,权限修饰符。
    private int age;

    //通过提供set,get公共方法对其访问
    public void setAge(int age)
    {
        if (age>0 && age<130)
        {
            this.age = age;
        }
        else
            System.out.println("数据不合法,赋值不成功");
    }
    public int getAge()
    {
        return age;
    }
    public void speak()
    {
        System.out.println("age:"+age);
    }
}

结果:
黑马程序员——Java练习笔记——面向对象_第2张图片
注意:
①私有仅仅是封装的一种体现而已。
②private关键字:是一个权限修饰符,用于修饰成员(成员变量和成员函数),被私有化的成员只在本类中有效。
常用场景之一:将成员变量私有化,对外提供对应的set、get方法对其进行访问,提高对数据访问的安全性。
3.构造函数
3-1.特点:
①函数名与类名相同。
②不用定义返回值类型。
③没有具体的返回值。
3-2.作用:
给对象进行初始化。
3-3.注意:
①一般函数和构造函数什么区别呢?
构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化。
一般函数:对象创建后,需要函数功能时才调用。

构造函数:对象创建时,会调用并且只调用一次。
一般函数:对象创建后,可以被调用多次。

②创建对象都必须要通过构造函数初始化。
一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数。
如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了。

③多个构造函数是以重载的形式存在的。
示例代码:

class Demo3 
{
    public static void main(String[] args) 
    {
        Person p1 = new Person();
        p1.speak();
        Person p2 = new Person("lisi");
        p2.speak();
        Person p3 = new Person("lisi",88);
        p3.speak();
    }
}
class Person
{
    private String name;
    private int age;
    Person()
    {
        System.out.println("啥也没有");
    }
    Person(String name)
    {
        this.name=name;
    }
    Person(String name,int age)
    {
        this.name = name;
        this.age = age;
    }
    public void speak()
    {
        System.out.println(name+"---"+age);
    }
}

结果:
黑马程序员——Java练习笔记——面向对象_第3张图片
4.this关键字
this关键字:隐式参数,用于区分成员和局部变量的同名情况。
在普通方法中,this总是指向调用该方法的对象。
在构造方法中,this总是指向正要初始化的对象。
this不能用于static方法中,可以用来调用其他的构造方法。
this代表它所在函数所属对象的引用,哪个对象在调用this所在的函数,this就代表哪个对象。

this关键字的应用。
在定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this表示这个对象,但凡本类功能内部使用到了本类对象,都用this表示。

this关键字在构造函数间调用:
this();用于构造函数间的调用。
通过this调用构造方法,必须位于第一句。
5.static关键字
static关键字:用于修饰成员(成员变量和成员函数)。
被修饰后的成员具备以下特点:
①随着类的加载而加载。
②优先于对象存在。
③被所有对象所共享。
④可以直接被类名调用。
示例代码:

class Demo4 
{
    public static void main(String[] args) 
    {
        Person p = new Person();
        System.out.println(p.country);
        System.out.println(Person.country);
    }
}
class Person
{
    //成员变量,实例变量
    String name;
    //静态变量,类变量
    //所有对象共享的属性用static修饰
    static String country ="CN";


}

结果:
黑马程序员——Java练习笔记——面向对象_第4张图片

成员变量和静态变量的区别?
①两个变量的生命周期不同
成员变量随着对象的创建而存在,随着对象被回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。
②调用方式不同
成员变量只能被对象调用。
静态变量可以被对象调用,还可以被类名调用。
③别名不同
成员变量也称为实例变量。
静态变量也称为类变量。
④数据存储位置不同
成员变量存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

使用注意:
静态方法只能访问静态成员,如果访问非静态成员,就会报错!
原因:静态方法和变量存在的时候,对象还不存在,非静态变量也不存在,肯定无法访问。

你可能感兴趣的:(java练习笔记)