zoukankan      html  css  js  c++  java
  • 第五节 类和对象

    面向对象怎么理解?

    1.1 面向对象是相对面向过程而言

    1.2 面向对象和面向过程都是一种思想

    1.3 面向过程:不去想做什么样子的盒子,随机取工具制作,强调的是功能行为

    1.4 面向对象:先想好做一个什么样的盒子,再去找对应的工具去做,将功能封装进对象,强调具备了功能的对象

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

    特点:

    三个特征:

    封装:(对外部不可见)对内部起到一个保护的作用;

    继承:(扩展类的功能);

    多态:(方法的重载、对象的多态性);

    我们在开发过程中,就是在找对象进行使用,没有对象就new一个对象。

    找对象:建立对象,使用对象,维护对象的关系

    封装:

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

    2)好处:将变化隔离;便于使用;提供重用性;提高安全性

    3)封装元素:将不需要对外提供的内容都隐藏起来;把属性都隐藏,提供公共方法对其访问。注意:私有仅仅是封装的一种表现形式。 致所有对外提供访问方式,就因为可以在访问方式中加入逻辑判断语句,对访问的数据进行操作,提高代码的健壮性。

    3、类和对象的关系

    类:对现实生活中事物的描述。描述对象用java的里的形式就用类的方式呈现,通过类来描述对象的行为和状态。
    对象:就是这类事物中,真是存在的个体。它是类的实例,它有状态和行为。通过new操作符所产生的实体。
    例如:一个人是一个对象,他有名字、性别、年龄、身份证、吃饭等属性和状态。

    例如:
    public class Person(){ //类
    String name; //个体 有状态和行为属性,是
    通过new操作符所产生的实体。
    个体
    char sex;
    int age;
    String idcard;
    public void eat(){
    }
    }


    4、类中包含的变量

    局部变量:

    局部变量作用于函数(方法)中,或者是语句中。
    在方法、构造方法或者语句块中定义的变量被称为局部变量。
    变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

    成员变量:

    成员变量作用于整个类中。
    成员变量是定义在类中,方法体之外的变量。
    这种变量在创建对象的时候实例化。
    成员变量可以被类中方法、构造方法和特定类的语句块访问。
    例子:
     1 package demo;
     2 
     3 public class VariableDemo {
     4     String name = "成员变量";
     5 
     6     public static void main(String[] args) {
     7         new VariableDemo().show();
     8     }
     9 
    10     public void show() {
    11         String name = "局部变量";
    12         System.out.println(name);
    13     }
    14 }


    5、匿名对象(没有名字的对象)

    new Person();
    当对对象的方法只调用一次时,可以用匿名对象来完成,这样比较简化。
    如果对一个对象进行多个成员调用,必须给这个对象起个名字。
    可以将匿名对象作为世纪参数进行传递。

    6、private

    权限修饰符,表示私有的;用于修饰类中的成员(成员变量,成员函数)。私有的表示只能在本类中有效。
    将属性私有化以后,类以外即使建立了对象也不能直接访问,但是如果我们要访问里面的属性值,就需要在对象中提供对应的访问属性的方式。

    当创建一个类并声明类的成员变量时,为了保护类不被外部直接访问,你就应该使用private修饰符来对类中的属性进行封装(添加get和set方法),这样外部类就无法直接访问此类的对象,只能通过类的get和set方法来访问对象的属性。

    7、构造方法

    1、格式:

         访问修饰符  类名称(){

    执行语句

    }

    2、注意点:

    (1):构造方法名称必须与类名一致;

    (2):构造方法没有返回值;

    3、构造方法主要是为类中的属性初始化;

    4、每个类在实例化之后都会调用构造方法,如果没有构造方法,程序在编译的时候回创建

       一个无参的什么都不做的构造方法;

    5、构造方法也可以重载。

    8.1 函数名与类名相同
    8.2 不用定义返回值类型
    8.3 不可以写ruturn
    8.4 对象一建立就会调用与之对应的构造函数
    8.5 如果这个类当中没有构造函数,那么系统会给该类加入一个空的构造函数。
    8.6 当类中定义了构造函数后,默认的构造函数就没有了。

    使用构造器时需要记住:

    1.构造函数必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名)

    2.每个类可以有一个以上的构造函数

    3.构造函数可以有0个、1个或1个以上的参数

    4.构造函数没有返回值

    5.构造函数总是伴随着new操作一起调用

    示例:

    示例:

    A.java

    Java代码  
    1. public class A{  
    2.    public A(){  
    3.       System.out.println("调用了无参的构造函数");  
    4.    }  
    5.    public A(String mess){  
    6.       System.out.println("调用了有参的构造函数 "+  
    7.          "参数内容为:"+mess);  
    8.    }  
    9. }  

     Test.java

    Java代码  
    1. public class Test{  
    2.    public static void main(String [] args){  
    3.        A a_1=new A();//调用无参的构造函数  
    4.        A a_2=new A("Hello");//调用有参的构造函数  
    5.    }  
    6. }  

     输出结果:

       调用了无参的构造函数

       调用了有参的构造函数

       参数内容为:Hello

     

    作用:

    给对象初始化

    注意:

    默认构造函数的特点。
    多个构造函数是以重载的方式存在的。

    构造函数和一般函数的不同

    构造函数是在对应一建立就运行,给对象初始化。
    一般函数是对象调用才知性,给对象添加功能。
    一个对象的建立,构造函数只运行一次,而一般方法可以被对像调用多次。

    什么时候定义构造函数呢?

    在分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。 

    9、构造代码块

     作用:给对象进行初始化。
     对象一建立就运行,而且优先于构造函数之行。
     和构造函数的区别:构造代码块是给所有对象进行统一初始化。而构造函数是给对应的对象进行初始化。

    10、关键字

    this

    this 看上去是用于区分局部变量和成员变量同名的情况。
    特点:this代表的是本类的对象;代表所在函数所属对象的引用-->哪个对象在调用this所在函数,this就代表哪个对象。

    this的应用:

    当定义类中功能时,该函数内部要用到调用该函数的对象时,这时我们来表示这个对应。我们在本类功能内部中使用本类对象,我们用this。

    this语句在构造函数间调用

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

    Static

    静态的,是一个修饰符,是修饰成员(成员变量,成员函数)的。静态所修饰的内容,被对像所共享。
    当成员被静态修饰后,我们就多了一个调用方式。直接使用类名.静态成员。
    
        我们在直接使用类名.属性或者方法的时候,必须是static静态的。因为只有先有这个属性或者方法我们才能被使用。

    特点:

    随着类的加载而加载;生命周期很长。
    优先于对像存在;静态是先存在的,对象是后存在的。
    被所有对象所共享;
    可以直接被类名所调用;

    注意事项:

    1)、静态方法只能访问静态成员。非静态方法既可以访问静态也可以访问非静态。
    (2)、静态方法中,不可以定义this、super关键字,因为静态优先于对像存在,所以静态方法中不可以出现this。
    好处:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份;可以直接被类名调用。
    不好:生命周期过长;访问出现局限性。



  • 相关阅读:
    解决VsCode中Go插件依赖安装失败问题
    C# httpclient获取cookies实现模拟web登录
    C#中调用HttpWebRequest类中Get/Post请求无故失效的诡异问题
    VisualSVN 5.1.7破译License Key
    AutoResetEvent类的使用
    26种设计模式之单例模式
    WPF的一些感悟
    vim 常用指令
    myeclipse 的.jsp文件中的<option>无法使用
    flume部署问题解决
  • 原文地址:https://www.cnblogs.com/xiaoshuaidiboke/p/7143614.html
Copyright © 2011-2022 走看看