• 5.类和对象


    1. 对象
    通常将对象划分成两个部分,静态方法和动态部分
    静态方法,就是不动的部分,这个部分被称为“属性”,任何对象都会就要自身的属性,如一个人,其属性包括高矮,胖瘦等。
    动态部分是这个人具有的行为,如微笑,行走等
    (1) 抽象出对象
    (2) 识别对象的属性(静态属性)
    (3) 识别对象的动态行为
    可以将这些属性和行为封装在一起来描述这个对象
    2. 
    不能将所谓的一个事物描述成一类事物,如一个鸟不能说成鸟类,如果要对一类事物统称,就需要引入类这个概念。
    类是一类事物的统称,如人类,鸟类。类是构造对象所依赖的规范,如一只鸟有一对翅膀,它可以利用翅膀来飞行,而基本上所有的鸟类都具有翅膀和飞行的技能,这样具有相同属性和行为的一类事物就定义类
    3. 面向对象的三个特征
    1. 封装性
      将对象的属性和行为封装在一起,其载体是类类通常对客户隐藏其实现的细节。
    保证了类内部数据结构的完整性,应用该类的用户不能轻易直接操作此数据结构,只能执行类允许公开的数据。这样就避免外部操作内部数据的影响,提高了程序的可维护性
    2. 继承性
    类与类之间同样具有关系,主要利用特定对象之间的特定的共有属性,例如,平行四边形是四边型,正方形和矩形也是四边形,可以把平行四边形看作四边形的延伸,平行四边形复用了四边形的属性和行为,同时添加了平行四边形独有的属性和行为,这里可以将平行四边形看作是从四边形类中继承的。平行四边形称为子类,四边形称为父类,子类的事例都是父类的事例。
    3. 多态性
       每个图型都有自己的特征,抽象类不能实例化对象。在多态的机制中,父类通常定义为抽象类,在抽象类中提供给一个方法的标准,而不给出的具体的实现流程,实际上这个方法也是抽象的,在多态机制中,比抽象类更方便的方式是将抽象类定义为接口,其抽象方法组成的集合就是接口。
    1. 成员变量
    java中对象的属性也称为成员变量
     
    2. 成员方法
     java语言中使用成员方法对应类对象的行为
    权限修饰符 返回值类型 方法名(参数类型 参数名){
    //方法体
    Return 返回值
    }
    3. 权限修饰符
    1. Private
    如果一个类的成员变量或成员方法被修饰为private,则该成员变量只能在本类中被使用,在子类也是不可见的,并且对其他包的类也是不可见的。
    2. Public
    除了在本类中使用这些数据外,还可以在子类和其他包的类中使用。
    3. Protected
    只有本包内的该类的子类能够使用
    访问包位置
     
    类修饰符
     
    Private
    protected
    public
     
     
    本类
    可见
    可见
    可见
     
     
    同包其他类或子类
    不可见
    可见
    可见
     
     
    其他的包类或子类
    不可见
    不可见
    可见
     
     
    Class anyclas{
      Public void doString(){
    ...//方法体
    }
    }
    如果一个类不被public private protected设置类的权限,则这个类预设为包存取范围,其只有一个包中的类可以调用这个类的成员变量或成员方法。上面这个例子中使用默认修饰符,即只有一个包内的其他类和子类可以对该类进行访问,但是doString()方法是被public修饰,但是根据JAVA语言的规定,类的权限设定会约束类成员的权限设定
    4. 局部变量
    成员方法中定义一个变量,那么这个变量被称为局部变量
    局部变量是在方法被执行时创建,在方法执行结束时被销毁。局部变量在使用时必须进行赋值操作或被初始化。
    Public String getName(){
    Int id=0;    //局部变量
    setName(java);
    Return id+this.name;
    }
    5. 局部变量的有效范围
    可以将局部变量的有效范围称为变量的作用域,局部变量的有效范围从该变量的声明开始到该变量的结束为止
    6. this关键字
    有以下例子
    public void setName(String name){ //定义一个setname()方法
       This.name=name;   //将参数值赋予类中的成员变量
    }
    java语言规定中,this关键字来代表本类对象的引用This关键字被隐式地用于引用对象的成员变量和方法,在上述代码中,this.name指的就是BOOK类中的name成员变量,而this,name=name中的第二个是形参name.
    事实上,this引用的就是本类的一个对象,当局部变量或方法参数覆盖了成员变量时,上面这个例子就是添加this关键字明确引用的是类成员还是局部变量或方法参数
    如果省略this关键字直接写成name=name;么只是把参数name赋值给参数变量本身而已,成员变量name的值并没有改变
    Public Book getBook(){
    Return this;  //返回BOOK类的引用
    }
    方法的返回值类型为book类,所以方法体中使用return  this 这种形式将book类的对象进行返回
    4. 类的构造方法
      在类中除了成员方法之外,还存在一种特殊类型的方法,那就是构造方法。构造方法是一个与类名的方法,对象的创建就是通过构造方法完成的。每当实例化一个对象时,类会自动调用构造方法。
    构造方法有以下特点:
    1. 构造方法没有返回值
    2. 构造方法的名称要与本类的名称相同。
    3. 格式为:
             public book(){
           ...//构造方法体
    }
     
    在构造方法中可以为成员变量赋值这样当实例化一个本类对象时,相应的成员变量也将被初始化
    如果类中没有明确定义构造方法,编译器会自动创建一个不带参数的默认的构造方法。
    5.静态变量,常量和方法
    static修饰的变量,常量和方法被称为静态常量,静态变量,静态方法
    静态成员属于类所有,区别于个别对象,可以在本类或其他类使用类名和.符调用静态成员。
    class $5{
        final static double PI=3.1415;//此处如果没有用static修饰,在别的方法里面无法调用
           int id;
          public static void method1() {
           System.out.println("6666");
          }
          public void method2() {
           System.out.println($5.PI);
           System.out.println($5.id);//此处无法调用参数Id,非静态变量
           $5.method1();
          }
    }
    Java语言规定对于静态方法有两点规定:
    1. 在静态方法中不可以使用this关键字。
    2. 在静态方法中不可以直接调用非静态方法
    3. 不能将方法体内部的局部变量定义为static
    4. 如果执行类时,希望先执行类的初始化动作,可以先使用static定义一个静态区域。
     Public class example{
       Static{
    //some
    }
    }
    红色块先执行
    6.类的主方法
    Public class example(){
    Public static void main(String[] args){
    //dosomethings
    }
    }
    1. 主方法是静态的,所以如要在主方法中调用其他方法,则该方法也要是静态的。
    2. 主方法没有返回值 void
    3. 主方法的形参为数组。其中args[0]-args[n]分别代表程序的第一个参数到第n个参数,可以使用args.length获取参数个数
    7. 对象
    Java是一门面向对象的语言,对象由类抽象出来,所有的问题通过对象来处理,对象可以操作类的属性和方法 解决相应的问题。
    1. 对象的创建
    Test      test          =new                Test();
    类名    创建Test类对象    创建对象操作符  构造方法的参数
    test被创建出来后,就是一个对象的引用,这个引用在内存中为对象分配了存储空间
     
     
     
    2.访问对象的属性和行为
    $4 test=new $4();
    test.showArrays(array);
    test.transfer(array, array2);
    System.out.println();
    test.showArrays(array2);
    2. 对象的引用
       类名 对象引用名称
    3. 对象的比较
    String c1=new String("abc");
    String c2=new String("abc");
    String c3=c1;
    System.out.println((c2==c3));//比较对象的地址 false
                 System.out.println((c2.equals(c3)));//true,形式上比较
                  System.out.println((c1==c3));//引用相同所以是true
    4. 对象的销毁
    每个对象都有生命周期,当对象的生命周期结束时,分配给对象的内存地址将会被回收,在其他语言中需要手动回收废弃的对象,但java拥有一套完整的垃圾回收机制
    以下两种情况
    1. 对象的引用超过其作用范围,这个对象将被视为垃圾
    {
         Example e =new Example();
    }
     
     
    2. 将对象赋值为Null
    {
    Example e= new Example();
        e=null;  //此时对象消亡
               }
    虽然垃圾回收机制已经很完善,但只能回收由new操作符创建的对象。如果某些对象不是通过New操作符在内存中获取一块内存区域,这种对象可能不能被垃圾回收机制所识别,所以在java中提供了一个finalize()方法。这种方法是object类,它被声明为protected,用户可以在自己的类中定义这个方法。如果用户在类中定义了finalize()方法,在垃圾回收时会首先调用该方法,在下一次垃圾回收动作发生时,才能真正被对象占用
    有时候垃圾回收机制没有按预期的来执行,java提供了System.gc()方法强制启动垃圾回收器。
                                              作 
    1. 尝试编写一个类,定义一个private变量,并定义两个成员方法,一个成员方法实现为此成员变量赋值,另一个方法获取这个成员变量的值,保证其他的类继承时能获取该成员变量的值。
     
    public class $89 {
    public static void main(String[] args) {
    // TODO 自动生成的方法存根
                  $78 test=new $78();
                  test.test();
    }
     
    }
     
    class test2 {
    private int  a; //只允许本类使用这个变量
        void method(int a) {
         this.a=a;
        }
        public  int method2() {
         return a;
        }
    }
     
    class $78 extends test2{
        public  void test(){
         super.method(78);//super关键字调用父类方法利用method方法修改a的值
         int a=super.method2();//将修改改过的值赋给a
         System.out.println(a);
        }
    }
  • 相关阅读:
    战略就是做出各种选择和不断权衡取舍;战略就是要刻意与众不同
    获取基目录,它由程序集冲突解决程序用来探测程序集
    Entity Framework的原理及使用方式
    NHibernate使用之详细图解
    最重要的不是你认识多少个人,而是你认识多少种人
    强关系利于执行,弱关系利于创新
    判断它是不是你的社群成员,你要看它对你的态度
    粉丝不在于多,在于够残
    没有请不起的人才,只有付不起的诚意
    所有有可能被互联网取代的组织一定会被取代--颠覆式创新研习社
  • 原文地址:https://www.cnblogs.com/cainame/p/10091934.html
Copyright © 2020-2023  润新知