Java基础--面向对象(封装、构造函数、构造代码块、this关键字)

面向对象

面向对象的特点:

  1. 面向对象是相对面向过程而言;
  2. 面向对象和面向过程都是一种思想;
  3. 面向过程强调的是功能行为;
  4. 面向对象:将功能封装进对象,强调具备了功能的对象;
  5. 面向对象是基于面向过程的;

面向对象的三个特征:

  1. 封装;
  2. 继承;
  3. 多态;
    实际开发中就是找对象使用,没有对象就创建对象;找对象,建立对象,使用对象,维护对象的关系;

类和对象的关系:

  1. 类:就是对现实事物的描述;
  2. 对象:就是这类事物,实实在在存在的个体,创建对象就是创建这个类所描述的事物的实体;

类中的成员变量和局部变量:

  1. 成员变量:定义在类中的成员位置上,作用于整个类中,在堆内存中,因为对象的存在而存在;
  2. 局部变量:定义在局部,作用于函数中或者语句中,存在于栈内存中,使用完即被释放;
    创建的类中可以写主函数(此时创建的类可独立运行),但一般创建的类中不用写主函数,因为一个程序会有很多类组成,但仅需一个主函数即可;

创建对象:

  1. 要想使用某个类中的方法,需先创建这个类的对象,通过对象调用相应的方法(静态方法可直接通过:类名.方法名 即可调用),创建对象的格式:
    类名 变量名=new 类名();
    例:String string=new String();

创建匿名对象:

  1. 匿名对象是对象的简化形式;
  2. 匿名对象的两种使用情况:
    • 当对象方法仅进行一次调用的时候;
      创建匿名对象无需声明引用类型及方法名,直接new对象即可;
      例:String string=new String();
      String.length();
      以上两句可直接简化为:new String().length();
      注:当一个对象被多次调用,则必须给对象起名;
    • 匿名对象可以作为实际参数进行传递;
      例:创建一个集合往集合中添加一个字符串;
      ArrayList list=new ArrayList();
      list.add(new String(new char[]{‘a’,’b’,’c’}));//该语句中对象作为参数传递;

面向对象:封装(Encapsulation)

  1. 封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式;
  2. 封装的好处:将变量隔离;
    便于使用;
    提供重用性;
    提高安全性;
  3. 封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问;
      一般类中的每个属性都对应2个访问方式:get()、set(),有几个属性就对应几对访问方式,之所以对外提供访问方式就是因为类中的属性private时对外提供对应的方法对其进行访问,可以在访问方式中加入逻辑判断等语句,对访问数据进行操作,提高代码的安全性和健壮性。

private关键字

  1. private :私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)。
  2. 私有只在本类中有效。
  3. 将age私有化以后,类以外即使建立了对象也不能直接访问。
    但是人应该有年龄,就需要在Person类中提供对应访问age的方式。
  4. 注意:私有仅仅是封装的一种表现形式。
  5. 之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句。
  6. 对访问的数据进行操作。提高代码健壮性。

示例代码:

class Person
{
    private int age;
    public void setAge(int a)
    {
        if(a>0 && a<130)
        {
            age = a;
            speak();
        }
        else
            System.out.println("feifa age");
    }
    public int getAge()
    {
        return age;
    }
    private void speak()
    {
        System.out.println("age="+age);
    }
}
class PersonDemo
{
    public static void  main(String[] args)
    {
        Person p = new Person();
        //p.age = -20;//成员私有后在类外面即使创建对象也不能访问;
        p.setAge(-40);
        //p.speak();
    }
}

构造函数:

  1. 特点:
    • 函数名与类名相同;
    • 不用定义返回值类型;
    • 不可以写return语句;
    • 多个构造函数是以重载的形式存在的;
  2. 作用:给对象进行初始化,对象一建立就会调用与之对应的构造函数;
  3. 与一般函数的区别:
    • 写法不同,运行不同,作用不同:构造函数对象一建立就运行,给对象初始化,而一般函数对象调用才执行;给对象添加功能,一个对象建立构造函数只运行一次,而一般方法可被调用多次。
    • 当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数,当在类中自定义了构造函数后,默认的构造函数就没有了,系统默认添加的构造函数为:
        类名( ){ };

注:构造函数被私有化后,将不能建立与之对应的类的对象,此时一般该类内部会自己建立一个对象,并对外提供获取对象的静态方法;


构造代码块:

  1. 作用:给对象进行初始化,对象一建立就运行,而且优先于构造函数执行;
  2. 与构造函数的区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化;
  3. 特点:构造代码块中定义的是不同对象共性的初始化内容,在类中的创建格式如下:
    //构造代码块无函数名;
    {
      语句;
    }

this关键字

  1. this代表本类的对象,代表它所在函数所属对象的引用,简单说哪个对象在调用this所在的函数,this就代表哪个对象;
  2. this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这是用this来表示这个对象,即:但凡本类功能内部使用到本类对象,都用this表示;
  3. 构造函数间调用只能用this语句,形如:this(name),即:this语句用于构造函数之间进行互相调用;
  4. this语句只能定义在构造函数的第一行,因为初始化要先执行;
  5. 综上:this关键字的两个作用:
    • 用于区分同名变量(成员变量与局部变量)的情况;
    • 用于构造函数之间的调用;

注:this(……)语句是不能用于一般函数中的,只能用于构造函数间;
一般函数是不能直接调用构造函数的;

/*
this语句 :用于构造函数之间进行互相调用。

this语句只能定义在构造函数的第一行。因为初始化要先执行。
*/

class Person
{
    private String name;
    private int age;    
    {   
        System.out.println("code run");
    }   
    Person()
    {
        //this("hah");
        System.out.println("person run");
    }
    Person(String name)
    {
        //this();
        this.name =name;
    }
    Person(String name,int age)
    {
        //this(name);
        //this.name = name;
        this.age = age;     
    }
}

你可能感兴趣的:(java基础)