Java的面向对象编程

匿名对象使用场景:

1:当对方法只进行一次调用的时候,可以使用匿名对象。 2:当对象对成员进行多次调用时,不能使用匿名对象。必须给对象起名字。

类中怎么没有定义主函数呢?
注意:主函数的存在,仅为该类是否需要独立运行,如果不需要,主函数是不用定义的。

主函数的解释:保证所在类的独立运行,是程序的入口,被 jvm 调用。

成员变量和局部变量的区别
1:成员变量直接定义在类中。 局部变量定义在方法中,参数上,语句中。
2:成员变量在这个类中有效。 局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。
3:成员变量存在于堆内存中,随着对象的产生而存在,消失而消失。 局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放。
构造函数:用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一 种。

特点:

1:该函数的名称和所在类的名称相同。
2:不需要定义返回值类型。
3:该函数没有具体的返回值。
记住:所有对象创建时,都需要初始化才可以使用。

注意事项:

一个类在定义时,如果没有定义过构造函数,那么该类中会自动生成一个空参数的构 造函数,为了方便该类创建对象,完成初始化。如果在类中自定义了构造函数,那么默认的构造函 数就没有了。

一个类中,可以有多个构造函数,因为它们的函数名称都相同,所以只能通过参数列表来区分。所 以,一个类中如果出现多个构造函数。它们的存在是以重载体现的。

构造代码块和构造函数有什么区别?

构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一个代码块。只要 对象一建立。就会调用这个代码块。

构造函数:是给与之对应的对象进行初始化。它具有针对性。

java.png

  1. 执行顺序:(优先级从高到低。)静态代码块>mian 方法>构造代码块>构造方法。其中静态代码块只执行一次。 构造代码块在每次创建对象是都会执行。
  2. 静态代码块的作用:比如我们在调用 C 语言的动态库时会可把.so 文件放在此处。
  3. 构造代码块的功能:(可以把不同构造方法中相同的共性的东西写在它里面)。例如:比如不论任何机型的 电脑都有开机这个功能,此时我们就可以把这个功能定义 在构造代码块内。 Person p = new Person();
创建一个对象都在内存中做了什么事情?

1:先将硬盘上指定位置的 Person.class 文件加载进内存。
2:执行 main 方法时,在栈内存中开辟了 main 方法的空间(压栈-进栈),然后在 main 方法的 栈区分配了一个变量 p。
3:在堆内存中开辟一个实体空间,分配了一个内存首地址值。new
4:在该实体空间中进行属性的空间分配,并进行了默认初始化。
5:对空间中的属性进行显示初始化。
6:进行实体的构造代码块初始化。
7:调用该实体对应的构造函数,进行构造函数初始化。()
8:将首地址赋值给 p ,p 变量就引用了该实体。(指向了该对象)

封 装(面向对象特征之一):

是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

好处:将变化隔离;便于使用;提高重用性;安全性。
封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。
this:代表对象。就是所在函数所属对象的引用。
this 到底代表什么呢?哪个对象调用了 this 所在的函数,this 就代表哪个对象,就是哪个对象 的引用。

开发时,什么时候使用 this 呢?

在定义功能时,如果该功能内部使用到了调用该功能的对象,这时就用 this 来表示这个对象。 this 还可以用于构造函数间的调用。

调用格式:this(实际参数); this 对象后面跟上 . 调用的是成员属性和成员方法(一般方法); this 对象后面跟上 () 调用的是本类中的对应参数的构造函数。

注意:用 this 调用构造函数,必须定义在构造函数的第一行。因为构造函数是用于初始化的,所 以初始化动作一定要执行。否则编译失败。 static:★★★ 关键字,是一个修饰符,用于修饰成员(成员变量和成员函数)。

特点:

1、static 变量
按照是否静态的对类成员变量进行分类可分两种:一种是被 static 修饰的变量,叫静态变量 或类变量;另一种是没有被 static 修饰的变量,叫实例变量。两者的区别是: 对于静态变量在内存中只有一个拷贝(节省内存),JVM 只为静态分配一次内存,在加载类的 过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但 是这是不推荐的)。 对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多 个拷贝,互不影响(灵活)。

2、静态方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用 this 和 super 关键字,不能直接访问所属类的实例变量和实例方法(就是不带 static 的成员变量和成员 成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这 个需要去理解,想明白其中的道理,不是记忆!!! 因为 static 方法独立于任何实例,因此 static 方法必须被实现,而不能是抽象的 abstract。

3、static 代码块
static 代码块也叫静态代码块,是在类中独立于类成员的 static 语句块,可以有多个,位置 可以随便放,它不在任何的方法体内,JVM 加载类时会执行这些静态的代码块,如果 static 代 码块有多个,JVM 将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

4、static 和 final 一块用表示什么
static final 用来修饰成员变量和成员方法,可简单理解为“全局常量”! 对于变量,表示一旦给值就不可修改,并且通过类名可以访问。 对于方法,表示不可覆盖,并且可以通过类名直接访问。

备注:

1,有些数据是对象特有的数据,是不可以被静态修饰的。因为那样的话,特有数据会变成对象 的共享数据。这样对事物的描述就出了问题。所以,在定义静态时,必须要明确,这个数据是否 是被对象所共享的。
2,静态方法只能访问静态成员,不可以访问非静态成员。
(这句话是针对同一个类环境下的,比如说,一个类有多个成员(属性,方法,字段),静态方法 A,那么可以访问同类名下其他静态成员,你如果访问非静态成员就不行) 因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。
3,静态方法中不能使用 this,super 关键字。 因为 this 代表对象,而静态在时,有可能没有对象,所以 this 无法使用。
4,主函数是静态的。

成员变量和静态变量的区别:

1,成员变量所属于对象。所以也称为实例变量。
静态变量所属于类。所以也称为类变量。
2,成员变量存在于堆内存中。 静态变量存在于方法区中。
3,成员变量随着对象创建而存在。随着对象被回收而消失。
静态变量随着类的加载而存在。随着类的消失而消失。
4,成员变量只能被对象所调用 。
静态变量可以被对象调用,也可以被类名调用。 所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据。

静态代码块:

就是一个有静态关键字标示的一个代码块区域。定义在类中。
作用:可以完成类的初始化。静态代码块随着类的加载而执行,而且只执行一次(new 多个对象 就只执行一次)。如果和主函数在同一类中,优先于主函数执行。

final

根据程序上下文环境,Java 关键字 final 有“这是无法改变的”或者“终态的”含义,它可 以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变、设计或效率。
final 类不能被继承,没有子类,final 类中的方法默认是 final 的。
final 方法不能被子类的方法覆盖,但可以被继承。
final 成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final 不能用于修饰构造方法。

注意: 父类的 private 成员方法是不能被子类方法覆盖的,因此 private 类型的方法默认是 final 类型的。

1、final 类
final 类不能被继承,因此 final 类的成员方法没有机会被覆盖,默认都是 final 的。在设计 类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展, 那么就设计为 final 类。

2、final 方法
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为 final 方法。 使用 final 方法的原因有二: 第一、把方法锁定,防止任何继承类修改它的意义和实现。 第二、高效。编译器在遇到调用 final 方法时候会转入内嵌机制,大大提高执行效率。

3、final 变量(常量)
用 final 修饰的成员变量表示常量,值一旦给定就无法改变! final 修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。 从下面的例子中可以看出,一旦给 final 变量初值后,值就不能再改变了。 另外,final 变量定义的时候,可以先声明,而不给初值,这中变量也称为 final 空白,无论 什么情况,编译器都确保空白 final 在使用之前必须被初始化。但是,final 空白在 final 关键 字 final 的使用上提供了更大的灵活性,为此,一个类中的 final 数据成员就可以实现依对象而 有所不同,却有保持其恒定不变的特征。

4、final 参数
当函数参数为 final 类型时,你可以读取使用该参数,但是无法改变该参数的值。

生成 Java 帮助文档:

命令格式:

javadoc –d 文件夹名 –auther –version *.java 

// 格式


/** 
*类描述
*@author 作者名
*@version 版本号

*/
/**
*方法描述
*@param 参数描述
*@return 返回值描述
*/
Last Updated 10/25/2025, 5:44:13 AM