疯狂JAVA讲义学习——基础代码练习——类&对象——构造器&成员变量---局部变量&方法—— 隐藏和封装

类是某一批对象的抽象,可以把类理解成某种概念;对象才是一个具体存在的实体。

 

Java语言是面向对象的程序设计语言,类和对象是面向对象的核心。Java语言提供了对创建类和创建对象简单的语法支持。

 

Java语言里定义类的简单语法如下:

 

 

修饰符可以是public、final、abstract,或者完全省略这三个修饰符。

 

类名只要是一个合法的标识符即可,建议Java类名必须是由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。

 

对一个类定义而言,可以包含三种最常见的成员:构造器、成员变量和方法。

 

static修饰的成员不能访问没有static修饰的成员。

 

成员变量用于定义该类或该类的实例所包含的状态数据;

 

方法则用于定义该类或该类的实例的行为特征或者功能实现。

 

构造器用于构造该类的实例,Java语言通过new关键字来调用构造器,从而返回该类的实例。

 

构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。

 

因此,Java语言提供了一个功能:如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器。一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器。

 

 

=========================================================

 

 

 

==========================================================

 

 

 

定义成员变量的语法格式如下:

 

 

 

 

➢ 修饰符:修饰符可以省略,也可以是public、protected、private、static、final,其中public、protected、private三个最多只能出现其中之一,

 

                 也可以与static、final组合起来修饰成员变量。

 

➢ 类型:类型可以是Java语言允许的任何数据类型,包括基本类型和现在介绍的引用类型。

 

➢ 成员变量名:成员变量名只要是一个合法的标识符即可,建议成员变量名应该由一个或多个有意义的单词连缀而成,

 

                         第一个单词首字母小写,后面每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。

 

➢ 默认值:定义成员变量还可以指定一个可选的默认值。

 

 

 

======================================================

 

 

=======================================================

 

 

定义方法的语法格式如下:

 

 

 

 

 

➢ 修饰符:修饰符可以省略,也可以是public、protected、private、static、final、abstract,其中public、protected、private三个最多只能出现其中之一;

 

                  abstract和final最多只能出现其中之一,它们可以与static组合起来修饰方法。

 

 

➢ 方法返回值类型:返回值类型可以是Java语言允许的任何数据类型,包括基本类型和引用类型;

 

                                如果声明了方法返回值类型,则方法体内必须有一个有效的return语句,该语句返回一个变量或一个表达式,这个变量或者表达式的类型必须与此处声明的类型匹

 

                                配。除此之外,如果一个方法没有返回值,则必须使用void来声明没有返回值。

 

 

➢ 方法名:方法名的命名规则与成员变量的命名规则基本相同,但由于方法用于描述该类或该类的实例的行为特征或功能实现,因此通常建议方法名以英文动词开头。

 

 

➢ 形参列表:形参列表用于定义该方法可以接受的参数,形参列表由零组到多组“参数类型 形参名”组合而成,多组参数之间以英文逗号(,)隔开,

 

                      形参类型和形参名之间以英文空格隔开。一旦在定义方法时指定了形参列表,则调用该方法时必须传入对应的参数值——谁调用方法,谁负责为形参赋值。

 

 

 

=========================================================

 

 

==========================================================

 

 

Static 是一个特殊的关键字,它可用于修饰方法、成员变量等成员。

 

Static 修饰的成员表明它属于这个类本身,而不属于该类的单个实例,因为通常把Static 修饰的成员变量和方法也称为类变量、类方法。

 

不使用Static 修饰的普通方法、成员变量则属于该类的单个实例,而不属于该类。因为通常把不使用Static 修饰的成员变量和方法也称为实例变量和示例方法。

 

 

由于Static 直译为静态的意思,因此也把Static 修饰的成员变量和方法称为静态变量和静态方法;把不使用Static 修饰的成员变量和方法称之为非静态变量和非静态方法。

 

 

PS:静态成员不能访问非静态成员。

 

 

 

 

 

=========================================================

 

 

==========================================================

 

定义构造器的语法格式如下:

 

 

 

 

➢ 修饰符:修饰符可以省略,也可以是public、protected、private其中之一。

 

➢ 构造器名:构造器名必须和类名相同。

 

➢ 形参列表:和定义方法形参列表的格式完全相同

 

创建对象的根本途径是构造器,通过new关键字来调用某个类的构造器即可创建这个类的实例。

 

 

 

========================================================================

 

 

========================================================================

 

 

 

 

 有这样一行代码:Person p=new Person();  这行代码创建了一个Person实例,也被称为Person对象,这个Person对象被赋给p变量。

 

在这行代码中实际产生了两个东西:一个是p变量,一个是Person对象。

 

 =============================================================

 

 ==============================================================

 

 

 

 

Java提供了一个this关键字,this关键字总是指向调用该方法的对象

 

根据this出现位置的不同,this作为对象的默认引用有两种情形:

 

                ➢ 构造器中引用该构造器正在初始化的对象。

 

                ➢ 在方法中引用调用该方法的对象。

 

this关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或实例变量。

 

 

 

 ====================================================================

 

 ====================================================================

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

================================================================

 

 

=================================================================

 

 

 

方法详解

 

 

 

Java语言里,方法不能独立存在,方法必须属于类或对象。一旦将一个方法定义在某个类的类体内,如果这个方法使用了static修饰,则这个方法属于这个类,否则这个方法属于这个类的实例。

 

 

Java里方法的参数传递方式只有一种:值传递。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响。

 

 

从JDK 1.5之后,Java允许定义形参个数可变的参数,从而允许为方法指定数量不确定的形参。如果在定义方法时,在最后一个形参的类型后增加三点(...),则表明该形参可以接受多个参数值,多个参数值被当成数组传入。

 

 

注意:个数可变的形参只能处于形参列表的最后。一个方法中最多只能包含一个个数可变的形参。个数可变的形参本质就是一个数组类型的形参,因此调用包含个数可变形参的方法时,该个数可变的形参既可以传入多个参数,也可以传入一个数组。

 

 

一个方法体内调用它自身,被称为方法递归。只要一个方法的方法体实现中再次调用了方法本身,就是递归方法。递归一定要向已知方向递归。

 

 

如果同一个类中包含了两个或两个以上方法的方法名相同,但形参列表不同,则被称为方法重载。方法重载的要求就是两同一不同:同一个类中方法名相同,参数列表不同。至于方法的其他部分,如方法返回值类型、修饰符等,与方法重载没有任何关系。

 

 

 

 ========================================================

 

  ========================================================

 

 

 

成员变量和局部变量

 

 成员变量指的是在类里定义的变量,也就是前面所介绍的field;局部变量指的是在方法里定义的变量。变量名称建议第一个单词首字母小写,后面每个单词首字母大写。

 

 

 

 

 

成员变量无须显式初始化,只要为一个类定义了类变量或实例变量,系统就会在这个类的准备阶段或创建该类的实例时进行默认初始化。

 

 

局部变量除形参之外,都必须显式初始化。也就是说,必须先给方法局部变量和代码块局部变量指定初始值,否则不可以访问它们。

 

 

当系统加载类或创建该类的实例时,系统自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值。

 

 

 

 

 

 

局部变量定义后,必须经过显式初始化后才能使用,系统不会为局部变量执行初始化。

 

这意味着定义局部变量后,系统并未为这个变量分配内存空间,直到等到程序为这个变量赋初始值时,系统才会为局部变量分配内存,并将初始值保存到这块内存中。

 

与成员变量不同,局部变量不属于任何类或实例,因此它总是保存在其所在方法的栈内存中。

 

如果局部变量是基本类型的变量,则直接把这个变量的值保存在该变量对应的内存中;

 

如果局部变量是一个引用类型的变量,则这个变量里存放的是地址,通过该地址引用到该变量实际引用的对象或数组。

 

栈内存中的变量无须系统垃圾回收,往往随方法或代码块的运行结束而结束。

 

 

 

 

===============================================================================

 

 

===============================================================================

 

 

 

 

深入构造器

 


构造器最大的用处就是在创建对象时执行初始化。

 

同一个类里具有多个构造器,多个构造器的形参列表不同,即被称为构造器重载。

 

使用this调用另一个重载的构造器只能在构造器中使用,而且必须作为构造器执行体的第一条语句。

 

使用this调用重载的构造器时,系统会根据this后括号里的实参来调用形参列表与之对应的构造器。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 =====================================================================

 

 =====================================================================

 

 

 

 

隐藏和封装

 

 

封装实际上有两个方面的含义:把该隐藏的隐藏起来,把该暴露的暴露出来。这两个方面都需要通过使用Java提供的访问控制符来实现。

 

 

Java提供了3个访问控制符:private、protected和public,分别代表了3个访问控制级别,另外还有一个不加任何访问控制符的访问控制级别,提供了4个访问控制级别。

 

Java的访问控制级别由小到大如图5.14所示:

 

 

 

 

 

 

 

 

 

关于访问控制符的使用,存在如下几条基本原则。

 

➢ 类里的绝大部分成员变量都应该使用private修饰,只有一些static修饰的、类似全局变量的成员变量,才可能考虑使用public修饰。

 

    除此之外,有些方法只用于辅助实现该类的其他方法,这些方法被称为工具方法,工具方法也应该使用private修饰。

 

 

➢ 如果某个类主要用做其他类的父类,该类里包含的大部分方法可能仅希望被其子类重写,而不想被外界直接调用,则应该使用protected修饰这些方法。

 

 

➢ 希望暴露出来给其他类自由调用的方法应该使用public修饰。因此,类的构造器通过使用public修饰,从而允许在其他地方创建该类的实例。

 

     因为外部类通常都希望被其他类自由使用,所以大部分外部类都使用public修饰。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   小白龙白龙马  阅读(108)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-03-15 jmeter——参数化——正则表达式
2020-03-15 jmeter——参数化——CSV Data Set Config(csv文件以及txt文件)
点击右上角即可分享
微信分享提示