zoukankan      html  css  js  c++  java
  • 面对对象编程(封装)

    封装:将数据封装到类的内部,将算法封装到方法中。(★★★★★)

    1. 访问控制 (封装)

    1)封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问,通常有两种访问方式:set 设置,get 获取。

    2)封装结果:存在但是不可见。

    3)public:任何位置可见,可以修饰:类、成员属性、成员方法、内部类、跨包访问类(需要使用import语句导入),成员属性 == 成员变量。

    4)protected:当前包中可见,子类中可见。可以修饰:成员属性、成员方法、内部类(只能在类体中使用,不能修饰类)。

    5)默认的:当前包内部可见,就是没有任何修饰词,可以修饰:类、成员属性、成员方法、内部类,但在实际项目中很少使用。默认类(包内类)的访问范围:当前包内部可见,不能在其他包中访问类,访问受限!main方法若定在默认类中JVM将找不到,无法执行,因此必定在public类中。

    6)private:仅仅在类内部可见。可以修饰:成员属性、成员方法、内部类(只能在类体中使用,不能修饰类)。私有的方法不能继承,也不能重写。

    2. 构造器

    用于创建对象并初始化对象属性的方法,叫“构造方法”,也叫“构造器”;构造器在类中定义。

    1)构造器的名称必须与类名同名,包括大小写。

    2)构造器没有返回值,但也不能写void,也不能写return。

    3)构造器的参数:一般是初始化对象的前提条件。

    4)用new调用!且对象一建立,构造器就运行且仅运行一次。一般方法可被调用多次。

    5)类一定有构造器!这是真的,不需要质疑!

    6)如果类没有声明(定义)任何的构造器,Java编译器会自动插入默认构造器!

    7)默认构造是无参数,方法体是空的构造器,且默认构造器的访问权限随着所属类的访问权限变化而变化。如,若类被public修饰,则默认构造器也带public修饰符。

    8)默认构造器是看不到的,一旦自己写上构造器则默认构造器就没有了,自己写的叫自定义构造器,即便自己写的是空参数的构造器,也是自定义构造器,而不是默认构造器。

    9)如果类声明了构造器,Java编译器将不再提供默认构造器。若没手动写出无参构造器,但却调用了无参构造器,将会报错!

     1 public class Cat{
     2     
     3     String name;
     4     int health;
     5     int love;
     6     String strain;
     7     
     8     /*
     9     public Cat(){
    10         System.out.println("构造方法");
    11         health = 100;
    12         love = 0;
    13     }
    14     */
    15     
    16     public Cat(){ //无参数构造方法
    17         
    18     }
    19 
    20     public Cat(String _name,int _health,int _love,String _strain){
    21         //有参数构造方法
    22         name = _name;
    23         health = _health;
    24         love = _love;
    25         strain = _strain;
    26     }
    27     
    28     public void showInfo(){
    29         System.out.print("我的名字叫"+name);
    30         System.out.print(",健康值"+health);
    31         System.out.print(",亲密度"+love);
    32         System.out.println(",我是一只"+strain);
    33     }
    34 }

    实例化对象

    1 import java.util.Scanner;
    2 public class Test01{
    3     public static void main(String[] args){
    4 
    5         Cat cat = new Cat();//调用了javac自动添加的默认构造方法
    6         
    7     }
    8 }

    注意事项:在企业开发过程中,如果开发者提供了有参构造方法,一定要习惯性的提供无参构造。

    3.this关键字

    1)this():调用本类的其他构造器,按照参数调用构造器,必须在构造器中使用,必须在第一行使用,this() 与super() 互斥,不能同时存在;

    2)this.是访问当前对象,本类对象的引用,在能区别实例变量和局部变量时,this可省略,否则一定不能省!

    3)this:在运行期间,哪个对象在调用this所在的方法,this就代表哪个对象,隐含绑定到当前“这个对象”。

    4. static关键字

    static 关键字表示静态,可以修改变量,也可以修饰方法,静态的,只能在类内部使用,可以修饰:属性,方法,内部类。在类加载期间初始化,存在方法区中。

    1)静态成员随着类的加载而加载,加载于方法区中,且优先于对象存在。
    2)静态修饰的成员:属于类级别的成员,是全体类实例(所有对象)所共享。
    3)静态属性:只有一份(而实例变量是每个对象有一份),全体实例共享,类似于全局变量。
    4)使用类名访问静态变量,以及类名直接调用方法,不需要创建对象。
    5)静态方法只能访问静态成员(静态属性和静态方法),非静态方法既可访问静态,也可访问非静态。
    6)静态方法中没有隐含参数this,因此不能访问当前对象资源。也不能定义this和super关键字,因为静态优于对象先存在。
    7)非静态方法省略的是this,静态方法省略的是类名(在同一类中),即直接使用属性和方法。
    8)静态方法一般用于与当前对象无关工具方法,工厂方法。如:Math.sqrt() Arrays.sort()
    9)静态代码块:随着类的加载而执行(用到类的内容才叫加载,只有引用是不加载的),且只执行一次,且优先于主函数,用于给类初始化。
    10)代码块(构造代码块):给所有对象进行统一初始化,且优先于构造器执行;而构造器是给对应的对象进行初始化。

    问题?
    [1]实例方法可以访问静态成员。
    [2]静态方法不能访问非静态成员。

    为什么?

    类加载机制
    例:Car car = new Car(…);
    当实例化一个对象时,jvm首先把Car.class加载到方法区
    [1]读取Car.class 根据声明的成员变量计算申请内存需要的字节数
    [2]读取Car.class 中的静态成员,给静态变量分配空间并初始化。
    new Car 申请内存得到一个car对象,此时才有对象的空间。showInfo才可以通过car对象调用。

  • 相关阅读:
    [工具-002]把png图片转换成ico图标
    软件攻城狮究级装B指南
    [翔哥高手无敌之路]0-002.如何提取apk中的信息?
    [Python基础]003.语法(2)
    [COCOS2DX-LUA]0-001.利用ClippingNode实现放大镜功能
    [书籍分享]0-005.淘宝技术这十年
    [翔哥高手无敌之路]0-001.项目有多余资源?那就删除吧!
    [Python基础]002.语法(1)
    [Objective-C] 001_Hello Objective-C
    DB2 pureXML 动态编程组合拳:iBatis+BeanUtils+JiBX
  • 原文地址:https://www.cnblogs.com/abcdjava/p/10742301.html
Copyright © 2011-2022 走看看