欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java基础——对象和类

程序员文章站 2022-03-31 11:13:47
将包含main方法的类称为主类。 变量的作用域是指变量可以在程序中引用的范围。 实例变量和静态变量的作用域是整个类,无论变量是在哪里声明的。 局部变量的声明和使用都在一个方法的内部。 一个类的实例变量和静态变量称为类变量或数据域。在方法内部定义的变量成为局部变量。 局部变量的作用域从声明变量的地方开 ......

  将包含main方法的类称为主类。


   变量的作用域是指变量可以在程序中引用的范围。

  实例变量和静态变量的作用域是整个类,无论变量是在哪里声明的。

  局部变量的声明和使用都在一个方法的内部。

  一个类的实例变量和静态变量称为类变量或数据域。在方法内部定义的变量成为局部变量。

  局部变量的作用域从声明变量的地方开始,直到包含该变量的块结束为止。局部变量都必须在使用之前进行声明和赋值。(Java没有给局部变量赋默认值)

  无论在何处声明,类变量的作用域都是整个类。类的变量和方法可以在类中以任意顺序出现。但当一个数据域是基于对另一个数据域的引用来进行初始化时则不是这样。在这种情况下,必须首先声明另一个数据域。

  类变量只能声明一次,但是在同一个方法内不同的非嵌套块中,可以多次声明相同的变量名。

  可以在一个方法的不同块里声明同名的局部变量,但是,不能在嵌套块中或同一个块中两次声明同一个局部变量。

  如果一个局部变量和一个类变量具有相同的名字,那么局部变量优先,而同名的类变量将被隐藏。


   可以把两个类放在同一个文件中,但是文件中只能有一个类是公共(public)类。此外,公共类必须与文件同名。源代码中的每个类编译成.class文件。


   构造方法在使用new操作符创建对象的时候调用,它是一种特殊的方法,有以下三个特殊性: 

  (1)构造方法必须具备和所在类相同的名字。

  (2)构造方法没有返回值类型,甚至连void也没有。

  (3)构造方法是在创建一个对象使用new操作符时调用的。构造方法的作用是初始化对象。

  构造方法具有和定义它的类完全相同的名字。和所有其他方法一样,构造方法也可以重载,这样更易于用不同的初始数据值来构造对象。


  通常一个类会提供一个没有参数的构造方法。这样的构造方法称为无参构造方法。


  一个类可以不定义构造方法。在这种情况下,类中隐含定义一个方法体为空的无参构造方法。这个方法称为默认构造方法,当且仅当类中没有明确定义任何构造方法时才会自动提供它。


  对象是通过对象引用变量来访问的,该变量包含对对象的引。

  本质上来说,一个类是一个程序员定义的类型。类是一种引用类型,这意味着该类类型的变量都可以引用该类的一个实例。

  从表面上看,对象引用变量中似乎存放了一个对象,但事实上,它只是包含了对该对象的引用。严格地讲,对象引用变量和对象时不同的,但是大多数情况下这种差异是可以忽略的。

  Java中,数组被看做是对象。数组使用new操作符创建的。一个数组变量实际上是一个包含数组引用的变量。


   通常,我们创建一个对象,然后将它赋值给一个变量,之后就可以使用这个变量来引用对象。有时候,一个对象在创建之后并不需要引用。在这种情况下,可以创建一个对象,而并不将它明确地赋值给一个变量。这种方式创建的对象称为匿名对象。


  如果一个引用类型的数据域没有引用任何对象,那么这个数据域就有一个特殊的Java值null。null同true和false一样都是一个直接量。true和false是boolean类型直接量,而null是引用类型直接量。

  引用类型数据域的默认值是null,数值类型数据域默认值是0,boolean类型数据域的默认值是false,而char类型数据域的默认值是'\u0000'。但是Java没有给方法中的局部变量赋默认值。


  每个变量都代表一个存储值的内存位置。声明一个变量时,就是在告诉编译器这个变量可以存放什么类型的值。对基本类型变量来说,对应内存所存储的值是基本类型值。对引用类型变量来说,对应内存所存储的值是一个引用,是对象的存储地址。

  将一个变量赋值给另一个变量时,另一个变量就被赋予同样的值。对基本类型变量而言,就是将一个变量的实际值赋给另一个变量。对引用类型变量而言,就是将一个变量的引用赋给另一个变量。


  Java运行系统会检测垃圾并自动回收它所占用的空间,这个过程称为垃圾回收。

  如果你认为不再需要某个对象时,可以显示地将该对象的引用变量赋null值。如果该对象没有被任何引用变量所引用,Java虚拟机将自动回收它所占的空间。


  静态变量被类中的所有对象所共享。静态方法不能访问类中的实例成员。

  实例变量是绑定到类的某个特定实例的,它是不能被同一个类的不同对象所共享的。如果想让一个类的所有实例共享数据,就要使用静态变量,也称为类变量。

  静态变量将变量值存储在一个公共的内存地址。因为它是公共的地址,所以如果某一个对象修改了静态变量的值,那么同一个类的所有对象都会受到影响。

  Java支持静态方法和静态变量,无须创建类的实例就可以调用静态方法。

  要声明一个静态变量或定义一个静态方法,就要在这个变量或方法的声明中加上修饰符static。

  类中的常量是被该类的所有对象所共享的。因此,常量应该声明为final static。


  实例方法和实例数据都是属于实例的,所以它们在实例创建之后才能使用。它们是通过引用变量来访问的。静态方法和静态数据可以通过引用变量或它们的类名来调用。

  静态变量和方法可以在不创建对象的情况下访问。

  使用“类名.方法名”的方式调用静态方法,使用“类名.静态变量”的方式访问静态变量。这会提高可读性,因为可以很容易地识别出类中的静态方法和数据。


  实例方法可以调用实例方法和静态方法,以及访问实例数据域或者静态数据域。

  静态方法可以调用静态方法以及访问静态数据域。

  然而,静态方法不能调用实例方法或者访问实例数据域,因为静态方法和静态数据域不属于某个特定的对象。

  在Math类中没有一个方法是依赖于一个特定实例的,例如:random、pow、sin和cos。因此,这些方法都是静态方法。main方法也是静态方法,可以从类中直接调用。


   可见性修饰符可以用于确定一个类以及它的成员的可见性。

  可以在类、方法和数据域前使用public修饰符,表示它们可以被任何其他的类访问。如果没有使用可见性修饰符,那么则默认类、方法和数据域是可以被同一个包中的任何一个类访问的。这称作包私有或包内访问。

  private修饰符限定方法和数据域只能在它自己的类中被访问。

  如果一个类没有被定义为共有类,那么它只能在同一个包内被访问。

  可见性修饰符指明类中的数据域和方法是否能在该类之外被访问。在该类之内,对数据域和方法的访问是没有任何限制的。

  修饰符private只能应用在类的成员上。修饰符public可以应用在类或类的成员上。在局部变量上使用修饰符public和private都会导致编译错误。

  大多数情况下,构造方法应该是共有的。但是,如果想防止用户创建类的实例,就该使用私有构造方法。


   数据域封装:将数据设为私有保护数据,并且使类易于维护。


  给方法传递一个对象,是将对象的引用传递给方法。

  Java只有一种参数传递模式:值传递。

  当传递基本数据类型参数时,传递的是实参的值。传递引用类型的参数时,传递的是对象的引用。


  数据既可以存储基本类型值,也可以存储对象。

  对象的数组实际上是引用变量的数组。

  当使用new操作符创建对象数组后,这个数组中的每个元素都是默认值为null的引用变量。


  可以定义不可变类来产生不可变对象。不可变对象的内容不能被改变。

  如果一个类是不可变的,那么它的所有数据域必须都是私有的,而且没有对任何一个数据域提供set方法。一个类的所有数据都是私有的且没有修改器方法并不意味着它一定是不可变类。

  要使一个类成为不可变的,它必须满足下面的要求:

  (1)所有数据域都是私有的。

  (2)没有修改器方法。

  (3)没有一个返回指向可变数据域的引用的访问器方法。 


  关键字this引用对象自身。它也可以在构造方法内部用于调用同一个类的其他构造方法去。

  关键字this是指向调用对象本身的引用名。可以用this关键字引用对象的实例成员。

  this关键字可以用于引用类的隐藏数据域。例如,在数据域的set方法中,经常将数据域名用作参数名。在这种情况下,这个数据域在set方法中被隐藏。为了给它设置新值,需要在方法中引用隐藏的数据域名。隐藏的静态变量可以简单通过“类名.静态变量”的方式引用。隐藏的实例变量就需要使用关键字this来引用。

  关键字this可以用于调用同一个类的另一个构造方法。

  Java要求在构造方法中,语句this(参数列表)应在任何其他可执行语句之前出现。

  如果一个类有多个构造方法,最好尽可能使用this(参数列表)实现他们。通常,无参数或者参数少的构造方法可以用this(参数列表)调用参数多的构造方法。这样做通常可以简化代码,使类易于阅读和维护。