Java 从抽象到类

一、从抽象到类

    1、类:抽象的关键是抓住事物的两个方面:属性和功能。抽象的目的是从具体的实例中抽取共有属性和功能形成一种数据类型。
        
        类声明: class Vehicle{ ...类体... }
        class Hicle 是类声明,Vehicle是类名。类名首字母尽量大写,当类名有几个单词复合而成时,每个首字都要母大写。
        类体由两部分构成:一部分是变量的声明,用来刻画属性,另一部分是方法的定义,用来刻画功能。变量声明的部分称为
        域变量或者成员变量。成员变量的有效范围:在整个类内有效,跟在类体内书写的先后位置无关。
        方法的定义包括两部分:方法声明和方法体。方法体内的变量,跟书写的先后位置有关。
            如果局部变量的名字和成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效。
        如果想在该方法中使用被隐藏的成员变量,必须使用关键字this。
        对成员变量的操作只能在方法中,即在声明成员变量的同时可以赋值,也可以在方法中赋值,但不可以再类体中有单独的赋值语句。

二、构造方法与对象的创建
    
    1、类是面向对象语言中最重要的一种数据类型,那么就可以用它来声明变量。在面向对象的语言中,用类声明的变量称为对象。
    和基本数据类型不同,在类声明对象之后,还必须要创建对象,为声明的对象分配内存。构造方法和对象的创建密切相关。

    2、构造方法:
        构造方法是一种特殊方法,它的名字必须和它所在的类得名字完全相同,而且没有类型(连void都没有)。允许一个类中编写若干个
    构造方法,但必须保证他们的参数不同,即参数的个数不同,或者参数的类型不同。
        注意:如果类中没有编写构造方法,系统会默认该类只有一个构造方法,该默认的构造方法是无参数的并且方法体是空的。
              如果类里定义了一个或者多个构造方法,那么Java不提供默认的构造方法。

    3、创建对象:
        第一步 对象的声明: 
            一般格式:  类的名字  对象的名字; 如: Person per;
        第二步 为声明的对象分配内存
            使用new 运算符和类的构造方法为声明的对象分配变量,即创建对象。如果类中没有构造方法,系统会调用默认
              的构造方法。例如: per = new Person();

    4、使用对象: 通过使用运算符".",对象可以实现对自己变量的访问和方法的调用。

    5、对象的引用和实体:类声明的变量称为对象,分配给对象的变量称为对象的实体(实例)。
        避免使用空对象,没有实体的对象称为空对象,空对象不能引用,即不能让空对象去调用方法产生行为。
        垃圾收集,一个类声明的两个对象如果有相同的引用,那么二者就有完全相同的实体,java有"垃圾收集"机制,这种机制周期地检测
         某个实体不再被任何对象所拥有(引用),如果发现这样的实体,就会释放实体占有的内存。
    
三、参数传值

    1、可变参数 是指在声明方法时不给出参数列表中从某项直到最后一项参数的名字和个数,但这些参数的类型必须相同。可变参数使用"..."表示若干参数,

    例如 public void f(int ...x); 参数代表可以通过下标运算来表示参数列表中的具体参数,即x[0]...x[m]分别 表示x的第1个至第m个参数。 


四、实例成员与类成员
    
    1、类体中包含成员变量的声明和方法的定义,成员变量又可细分为实例变量和类变量,在声明成员变量时,用static 修饰的称作类变量,否则称为实例变量,
    (类变量也称为static 变量,静态变量) class Dog{ float x ;// 实例变量    static int y; //类变量 }
    
    2、实例变量和类变量的区别:
         (1)、不同对象的实例变量不同,一个类通过使用new可以创建不同的对象,分配给不同对象的实例变量占有不同的内存空间。
         (2)、所有对象共享类变量,使用new创建不同的对象时,分配给这些对象的类变量占有相同的一处内存。
         (3)、通过类名直接访问类变量,Java程序执行时,类的字节码文件被加载到内存中,如果该类还没有创建对象,那么类中的实例变量不会被分配内存,
              但是类中的类变量被加载到内存中时,就分配了相应的内存空间。如果该类创建对象,不同对象的实例变量互不相同,即分配不同的内存空间,但
              类变量就不再重新分配内存,所有的对象共享类变量,即所有的对象的类变量是相同的一处内存空间,类变量的内存空间直到程序退出运行才会释放
              所占有的内存。
    3、实例方法和类方法的定义:
        类中的方法也分为实例方法和类方法。方法声明时,方法类型前面不加关键字static修饰的是实例方法,加static修饰的是类方法(静态方法)

    4、实例方法和类方法的区别:
        (1)、对象调用实例方法
        当对象调用实例方法时,该方法中出现的实例变量就是分配给该对象的实例变量;该方法中出现的类变量也是分配给该对象的变量,只不过这个变量和所有
        的其他对象共享。
        (2)、类名调用类方法
        类方法不仅可以被类创建的任何对象调用,也可以直接通过类名调用,和实例方法不同的是,类方法不可以操作实例变量,这是因为在类创建对象之前,实例变量
        成员还没有分配内存。
        

    综上:类名只能调用类变量和类方法,类名new 出来的对象才可以调用实例变量和实例方法。

五、方法重载和this关键字
    1、方法的重载的意思是:一个类中可以有很多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同或者参数的类型的不同。
    
    2、this关键字
        this是java的一个关键字,表示某个对象,this可以出现在实例方法和构造方法中,但是不能出现在类方法中。
        实例方法可以操作类的成员变量,当实例成员变量在实例方法中出现是,默认的格式:this.成员变量
        当static 成员变量出现在实例方法中时,格式是:类名.成员变量
        当一个对象调用方法时,方法中的实例成员变量是指分配给该对象的实例成员变量,而static 变量则与其他对象共享,因此
        通常情况下,可以省略实例成员名字前面的"this.",以及static变量前面的"类名.",但是,当实例成员变量的名字和局部变量
        的名字相同时,成员变量前面的"this."或者"类名."就不可以省略。
        注意:this不能出现在类方法中,这是因为,类方法可以通过类名直接调用,这时,可能还没有任何对象诞生。
    3、构造方法和方法重载的比较:
        构造方法和他所在的类名必须完全相同,所以说,构造方法也是方法重载的一种。

六、包和import语句
    1、包
        包是Java 语言中有效地管理类的一个机制,包名的目的是有效的区分名字相同的类,不同java源文件中两个类名字相同时,它们可以通过隶属不同的包来相互区分。

        包语句:通过关键字package 声明包语句。package 语句的一般格式: package 包名。 例如:package sunrise ;   package sun.com.cn;
            如果一个类有包名,那么就不能在任意位置存放它,否则虚拟机无法加载这样的类。
            程序如果使用了包语句例如: package tom.jiafei; 那么存储文件的目录结构必须包含如下结构: ...\tom\jiafei ; 如  c:\1000\tom\jiafei
            并且要将源文件编译得到的类的字节码文件保存到目录c:\1000\tom\jiafei中(源文件可以任意存放)。
        
        运行有包名的主类:如果主类的包名是tom.jiafei,那么主类的字节码一定存放在...\tom\jiafei目录中,运行时必须到tom\jiafei的上层(即tom的父目录)中去运行主类。
            假设tom\jiafei的上一次目录是1000,那么必须如下格式来运行,C:1000\java tom.jiafei.主类名

    2、import 语句
        一个类可能需要另一个类声明的对象作为自己的成员或者方法中的局部变量,如果这两个类在同一个包中,当然没问题;如果一个类想要使用的那个类和他不在一个包中,
        要使用import语句完成使命。

        为了能使用java提供给我们的类,可以使用import 引入包中类。比如:
        java.lang     包含所有的基本语言类
        javax.swing   包含抽象窗口工具集中的图形、文本、窗口GUI类
        java.io          包含所有的输入输出类
        java.util     包含实用类
        java.sql      包含操作数据库的类
        java.nex      包含所有实现网络功能的类
        java.applnet  包含所有实现java applet的类 

        用户程序可以使用tim.jiafei包中的类,如: import tom.jiafei.*;   

七、访问权限
    1、访问限制修饰符有private、protected、public,都是java关键字,用来修饰成员变量或方法。    
    2、用关键字private修饰的成员变量和方法称为私有变量和私有方法。
        对于私有成员变量或方法,只有在本类中创建该类的对象时,这个对象才能访问自己的私有成员变量和类中的私有方法,即private修饰的变量只能在类中用,不能再对象中使用。
    3、共有变量和共有方法
         public修饰的成员变量和方法称为共有变量和共有方法。对象可以访问public变量和public方法。
    4、受保护的变量和方法
        用protected修饰,在任何一个类A中用类B创建了一个对象之后,如果类A和类B在同一个包中,那么类B创建的对象可以访问自己protected修饰的变量和方法。
        class Tom{   protected  float weight; protected float fun(float a,float b){ return a+b; }  }
        class Jerry {  void g(){  Tom cat = new Tom();  cat.weight = 23f;  float sum = cat.fun(3,4);    //后面这两行,若Tom和Jerry在一个包中,才合法  } }

    5、友好变量和友好方法
        不用private、public、protected 修饰的成员变量和方法称为友好变量和友好方法。
        友好变量和有好方法跟protected修饰的变量规则一致。
    6、public类与友好类
        
        类声明时,如果在关键字class前面加上public关键字,就称这样的类是public类。可以在任何另外一个类中,使用public 类创建对象。
        如果一个类不加public修饰,这样的类称为友好类,在另外一个类中使用友好类创建对象时,要保证他们在一个包内。
        注意:不能用protected 和private 修饰类;访问权限修饰符按访问权限从高到底:public、protected、友好的、private。

发布了91 篇原创文章 · 获赞 160 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/weixin_40204595/article/details/90270698