zoukankan      html  css  js  c++  java
  • java入门学习(二)

    一.类和对象

      1.开篇瞎BB

      物以类聚。

      世间万物皆对象,对象是能接触到的实体。类是一组有相同属性和方法的对象的集合,或者说它们的特征提取,类是一种抽象的概念。类由属性和方法组成,属性是它的各种静态的特征,方法是它能干啥。《易》有云,“物以类聚,人以群分”。

      打个比喻,有一群人都在追一个很可爱的姑娘。这群人可以抽象出一个类,他们有相同的属性,比如都喜欢这姑娘,都是男孩子。他们有一些相同的方法,什么送花儿呀,请吃饭呀,请看电影呀,陪姑娘聊天呀。所以呀,他们是一个类。而单独的一个人就是一个对象,这个对象一定具有这个类里的属性,也一定可以干这个类中的方法【人家干不干是另一说啊】,当然,也可以干其他各种各样不包含在类里的事。所以呀,姑娘选人不是看类的方法和属性,反正都是一样的,人看的是你此外还能干啥,也看的是你现有方法中,你咋个顺序干呢~【吐槽而已,认真你就输了】

      类和对象毕竟只是一种静态的描述和表示,而程序是会运作起来的世界。人生有那么多种可能,而你却只能选择一条路。

      2.定义类

      //类名要求首字母大写

      public class 类名

      {

        //属性(成员变量)

        类型 类型名;

        ...

        //方法

        方法;

        ...

      }

      3.创建对象

        类名 对象名=new 类名();

      4.使用对象

        对象名.属性

        对象名.方法()

        //float变量赋值需要加f,否则默认浮点数为double,如 float x; x = 0.5f;

      5.成员变量和局部变量

        成员变量是类中定义的,局部变量是类的方法中定义的。

        作用域不同,局部变量只在方法内可用。

        初始值得区别【成员变量自动赋初始值,局部变量需初始化】

      6.构造方法

        用于创建对象和初始化对象的值。其名称与类名同名,无返回值。

        使用:new + 构造方法

        【之前所用的创建对象相当于java自动创建了一个无参的构造方法,直接使用该无参的构造方法,若代码段中有构造方法,无论是有参还是无参,java都不会自动创建啦】

        定义:

        public 构造方法名()  //有参无参均可

        {

        //初始化

        }

      7.static

        直接在下述的定义前面加上static即定义为静态了。

        a.静态变量

          该类所有对象共享,属于整个类所有。可直接用类名访问,也可用对象名访问。【类名.属性】

          第一次使用时就有了该变量,后面再创建该类的对象还是只有第一个的。

        b.静态方法

          静态方法可以直接调用静态变量,但不可直接调用非静态变量,若要调用非静态变量,可以创建类然后调用。

          静态方法可以直接掉用静态方法,但不可直接调用非静态方法,若要调用非静态方法,可以创建类然后调用。

          普通方法可以直接调用静态和非静态的变量。

          【小结:非静态均可直接调用,静态只能直接调用静态。谁让他们都是些高冷的小傲娇!其他人就不理他们!】

        c.静态初始化块

          初始化块可以直接在类中通过大括号添加,创建类时就直接依次执行这些初始化块了。

          静态初始化只在第一次创建该类对象时执行,只执行一次,且只能初始化静态变量。【傲娇小天团~】

    类的三大特性:封装、继承、多态

    二.封装:

      1.定义和实现

        定义:要求只通过类的方法对该类进行各种操作,把类的各种属性隐藏起来。就是“封装”的字面意思。

        实现:将属性修改为private,用getter/setter方法进行属性的修改。【eclipse可自动生成,Source菜单】

           一般getter方法名取为get+属性名首字母大写。

             一般setter方法名取为set+属性名首字母大写。

      2.包:

        定义:用于管理java文件,解决类的同名问题。

            package 包名;    //使用,包名间使用.隔开,全小写,用于区分层次,类似于文件路径

                       //系统中的类也常用该命名方式:java.(功能).(类)

        使用:

            import 包名;    //.*通配符,包括该目录下的所有

      3.访问修饰符

      本类 同包 子类 其他
    private o      
    默认 o o    
    protected o o o  
    public o o o o

      4.this关键字

        表示当前对象

        使用:  this.属性

             this.方法

      5.内部类

        定义在一个类里面的类。

        使用:

        Outter o = new Outter();  

        Inner i = o.new Inner();  //内部类名 对象名 = 外部对象名.new 内部类名()

        a.成员内部类

          定义:内部类做为外部类的一个成员存在。

          内部类访问外部类时需要用this关键字。如: Outter.this.h  //外部类名.this.属性

        b.静态内部类

          定义:对内部类加上static修饰符。

          对外部类的非静态成员的访问:new 外部类().成员

          外部类静态成员的访问:  类名.成员【同名】

                       成员【不同名】

          创建时不需创建外部类,可直接创建内部类。

        c.方法内部类

          定义:定义在外部类的方法中,只能在该方法中使用。故不能使用访问修饰符和static修饰符。

    三.继承

      1.基本定义

        字面意思,一个类(子类)继承了另一个类(父类)的属性和方法。【private修饰的属性和方法不可继承】【eclipse创建子类可直接选择继承父类,superclass】

            class 子类 extends 父类

      2.方法的重写

        子类重写父类中有的方法。要求返回值、方法名、参数个数和类型均相同。使用时则优先使用子类的方法。

        可以修改访问修饰符,重写的访问修饰符不能比原访问修饰严格。

      3.final关键字

        修饰类。该类不允许被继承

        修饰方法。该方法不允许被重写(覆盖).

        修饰属性、变量。变为常量。要求在定义时或构造方法中初始化,保证有且仅有一次的初始化。

      4.super关键字

        子类中使用,代表父类对象。

        用法:  super.属性    super.方法

        子类构造必须调用父类构造方法,系统隐式调用父类的无参构造方法,显式书写必须写在子类构造方法的第一行。

      5.Object类

        该类是所有类的父类,根。

        常用方法:

        a.toString()

          该方法直接调用返回对象的哈希code码,即地址。常重写该方法表示对象的属性。【eclipse可自动生成,Source菜单】

        b.equals()

          字面意思,比较是否相同。而现实中我们所谓的相同有两种。一种是世界上独一无二的同一个,比如你就是独一无二的,你的名字、身份证号反正都是指的你,都是相同的。一种是属性相同,比如说你们俩的校服一样。Object类中的equals方法比较的是第一种相同,即对象的使用是否指向同一块内存地址。常通过重写比较第二种相同。【eclipse可自动生成,Source菜单】该方法包含一个参数为对象的引用;返回类型为bool。此外,equals()重写中用到的getClass()方法得到类对象。区分类对象和类的对象,前者表示你有哪些种类的属性,后者表示该属性你具体值是多少。

    四.多态

      1.

      关于引用,私以为,引用就是给你起个名字或者说拿个啥东西指代你,比如说你的小名啊、身份证号啊、外号啊,这都是引用,都是指你。但是引用不是你本身,只是指你而已,可以直接使用。类似指针。d

      关于多态,就是对象的多种状态,有两种多态。一种是引用多态,一种是方法多态。

      引用多态,是说父类的引用可以指向本类和子类的多态,但子类不能指向父类。说白了,你爸能给你起名字,你不能给你爸起名字。

            父类名 引用名 = new 父类名或子类名();

      方法多态,是说通过上面的引用多态创建了对象,如果是本类对象,调用的方法就是本类的方法;如果是子类的对象,调用的方法就是重写或者继承的方法;如果是子类对象独有的方法,那就不能使用。说白了,你爸给你起了名字,但你还是你自己,这个引用是你爸通过自己能干啥知道的你能干啥【因为继承】,但你很可能有些事儿有些本事你爸不造吧~那他就当然没法叫你干这种事儿了喽~

      2.类型转换

       对象间的类型转换类似一般的属性间的类型转换,父类为上,子类为下,向上可自动转换,向下强制转换,同级不可转换。用instanceof关键字判断该引用是否可以转换为该类型。

          引用名  instanceof  类型名;//返回bool值,true为可以转换,false为不可转换

      3.抽象类

       约束所需的方法,不要求具体实现。需加上abstract关键字,可修饰类和方法。包含抽象方法的一定是抽象类,抽象类中可以有普通方法。

       通过子类的继承,方法的重写,实现具体的方法。

       其中abstract必须在最前面,eclipse可自动添加。

      4.接口

       感觉就是一种需求,用于继承和实现,所以必须是public。类似于类,定义不用class,用interface。其中属性一定是常量,方法一定是抽象方法,即全局常量和公共抽象方法。一个类可以实现多个接口,用implements,定义时写在继承的后面。用接口的引用直接new一个接口,使用匿名内部类可直接实现该接口的方法,并通过引用调用。接口名取名前一般加上I表示是接口(interface)

  • 相关阅读:
    洛谷P5173 传球(暴力)
    uoj#402. 【CTSC2018】混合果汁(主席树+二分)
    uoj#401. 【CTSC2018】青蕈领主(分治FFT)
    uoj#400. 【CTSC2018】暴力写挂(边分治)
    uoj#399. 【CTSC2018】假面(概率期望)
    P4769 [NOI2018]冒泡排序(dp)
    洛谷P3688/uoj#291. [ZJOI2017]树状数组
    uoj#290. 【ZJOI2017】仙人掌(数数+仙人掌+树形dp)
    Git环境部署
    mysql修改密码
  • 原文地址:https://www.cnblogs.com/sinfonia/p/5114217.html
Copyright © 2011-2022 走看看