您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

Java|剖析类内的五类成员:属性、方法、构造器、代码块、内部类

时间:2022-04-08 13:21:27  来源:  作者:小智雅汇

JAVA的哲学是一切皆类,全部代码都写在类内。Java是纯面向对象的编程语言,类是其基石。

Java类有五类成员:

class Person{
    // ① 属性,或成员变量
    String name;
    boolean isMarried;
    // ③ 构造器
    public Person(){}
    public Person(String n, boolean im){// 构造器重载
        name = n;
        isMarried = im;
    }
    // ② 方法,或函数
    public void walk(){
        System.out .println("人走路?");
    }
    public String display(){
        return "名字是:"+name+",Married: "+isMarried ;
    }
    // ④ 代码块
    {
        name = "HanMeiMei";
        isMarried = true;
    }
    // ⑤ 内部类
    class pet{
        String name;
        float weight;
    }
}

1 类的成员之属性(数据)

类封装数据和操作这些数据的函数(方法,通常是操作封装的数据)。

1.1 数据按存储类型可以分为:

1.1.1 基本数据类型 (如int 、Boolean;

1.1.2 引用数据类型。

1.2 数据按作用域可以分为:

1.2.1 在方法体外,类内声明的变量称为成员变量(属性)。

1.2.1.1 实例变量(不以static修饰,与具体对象相关,有差异化);

1.2.1.2 类变量(以static修饰,与类全部对象相关);

1.2.2 在方法体内部声明的变量称为局部变量。

1.2.2.1 形参(方法、构造器定义的变量);

1.2.2.2 方法局部变量(在方法内定义);

1.2.2.3 代码块局部变量(在代码块定义);

2 类的成员之方法

方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数或过程。

将功能封装为方法的目是,可以实现代码重用简化,Java 里的方法不能独立存在,所有必须定义类里。

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

All parameters are passed to methods using pass-by-value. For a parameter of a primitive type, the actual value is passed; for a parameter of a reference type, the reference for the object is passed.

形参是基本数据类型时,将实参基本数据类型变量的“数据值”传递给形参;

形参是引用数据类型时,将实参引用数据类型变量的“地址值”传递给形参;

A method cannot modify a parameter of a primitive type (that is, numbers or boolean values).

A method can change the state of an object parameter.

A method cannot make an object parameter refer to a new object.

类属性作为该类各个对象之间共享的变量。在设计类时,分析哪些属性不因对象的不同而改变,将这些属性设置为类属性。相应的方法设置为类方法。

如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用。

在同一个类中,允许存在一个以上的同名方法,只要它们参数个数或参数类型不同(与返回值类型无关)。

方法也可以递归调用(一个方法体内调用它自己)。

3 类的成员之构造器

数据的初始化很重要,成员变量同样如此。面向对象的语法机制能够确定对象创建即初始化创建时自动调用一个初始化成员变量的方法,这个方法称为构造器,为确定不同的初始化方法来构建不同的对象,构造器也可以重载。

构造器的特征:

① 名称与类名相同;

② 不声明返回值类型,不能有return 语句;

③ 不能被 static 、final、synchronized、abstract 、native修饰。

根据参数不同,构造器可以分为如下两类:

隐式无参构造器(系统默认提供);

显式定义一个或多个构造器(无参、有参)。

Java语言中,每个类都至少有一个构造器,也可以重载多个,默认构造器的修饰符与所属类的修饰符一致。

一旦显式定义了构造器,则系统不再提供默认构造器。

类方法都隐式包含一个表示其对象的关键字this,this可以调用本类的其它方法、构造器和引用数据成员。

在继承体系中,子类可以使用关键字super调用父类的构造函数。

4 类的成员之代码块

对类内数据成员的初始化,除了使用构造器,还可以使用代码块。

(有点类似于C++的初始化列表,先于构造函数执行。)

类的static数据成员的初始化使用静态代码块(用static修饰),由此,代码块分为两类:

4.1 静态代码块:用static 修饰的代码块。

static代码块通常用于初始化static的属性

class Person {
    public static int total;
    static {
        total = 100;//为total赋初值
    }
    …… //其它属性或方法声明
}

4.1.1 可以有输出语句。

4.1.2 可以对类的属性、类的声明进行初始化操作。

4.1.3 不可以对非静态的属性初始化。即不可以调用非静态的属性和方法。

4.1.4 若有多个静态的代码块,那么按照从上到下的顺序依次执行。

4.1.5 静态代码块的执行要先于非静态代码块。

4.1.6 静态代码块随着类的加载而加载,且只执行一次。

4.2 非静态代码块:没有static修饰的代码块。

1 可以有输出语句。

2 可以对类的属性、类的声明进行初始化操作。

3 除了调用非静态的结构外,还可以调用静态的变量或方法。

4 若有多个非静态的代码块,那么按照从上到下的顺序依次执行。

5 每次创建对象的时候,都会执行一次。且先于构造器执行。

程序中成员变量赋值的执行顺序:

① 声明成员变量的默认初始化;

② 显式初始化、多个初始化块依次被执行(同级别下按先后顺序执行);

③ 构造器再对成员进行初始化操作;

④ 通过”对象.属性”或”对象.方法”的方式。

5 类的成员之内部类

当一个事物的内部,还有一部分需要完整结构进行描述,而这部分的完整结构又只为外部事物提供服务,那么整个内部的完整结构最好使用内部类 。

An inner class is a class that is defined inside another class. Why would you want to do that? There are three reasons:

① Inner class methods can access the data from the scope in which they are defined—including the data that would otherwise be private.

② Inner classes can be hidden from other classes in the same package.

③ Anonymous inner classes are handy when you want to define callbacks without writing a lot of code.

在Java 中,允许一个类的定义位于另一个类的内部。前者称为内部类(Inner class) ,后者称为外部类(out class)。

Inner class 一般用在定义它的类或语句块之内,外部引用它时必须给出完整的名称。

Inner class的名字不能与包含它的外部类类名相同。

内部类可以区分为:

① 成员内部类(static成员内部类和非static成员内部类);

② 局部内部类(不用修饰符);

③ 匿名内部类。

成员内部类作为类的成员的角色:

和外部类不同 ,Inner class还可以声明为private 或protected;

可以调用外部类的结构;

Inner class可以声明为 static 的,但此时就不能再使用外层类的非 static的成员变量。

成员内部类作为类的角色:

可以在内部定义属性 、方法 、构造器等结构;

可以声明为abstract类 ,因此可以被其它的内部类继承;

可以声明为 final;

编译以后生成 OuterClass$InnerClass.class字节码文件 (也适用于局部内类)。

public class MAIn {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.test();
    }
}
// Demonstrate an inner class.
class Outer {
    int outer_x = 100;
    void test() {
        Inner inner = new Inner();
        inner.display();
    }
    // this is an inner class
    class Inner {
        void display() {
            System.out.println("display: outer_x = " + outer_x);
        }
    }
}

The nesting is a relationship between classes, not objects. A LinkedList object does not have subobjects of type Iterator or Link.

There are two benefits about inner class: name control and access control.

However, the Java inner classes have an additional feature that makes them richer and more useful than nested classes in C++. An object that comes from an inner class has an implicit reference to the outer class object that instantiated it. Through this pointer, it gains access to the total state of the outer object.

匿名内部类不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

在Java 类中 ,可用 static 修饰属性 、方法 、代码块 、内部类。



Tags:   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
这类基金需警惕!热衷高换手,斩获收益的基金不足两成
高换手率或将加大亏损风险。2023年,市场热点行业、主题轮动加速,不少公募基金为了能跟上热点、提升收益,而频繁操作调仓换股。基金换手率,反映的是基金经理的股票交易频率,以及在...【详细内容】
2024-04-15  Search:   点击:(4)  评论:(0)  加入收藏
聊聊Rust里面的数据类型
嘿,朋友们!今天我们来聊聊Rust里面的数据类型。你知道吗?Rust的数据类型可是很重要的哦,它们帮助我们定义变量和函数可以处理什么样的数据。基本数据类型首先,让我们来看看Rust提...【详细内容】
2024-04-11  Search:   点击:(7)  评论:(0)  加入收藏
美联储降息或再延期 大类资产配置逻辑生变
4月10日,北京时间周三晚间美国3月份CPI公布为3.5%,较2月份3.2%有所上升,也高于预期值3.4%。美联储降息或再度延期,受此影响,美元强劲,美债大涨,而美股下跌,大宗商品分化,短期对全球市...【详细内容】
2024-04-11  Search:   点击:(7)  评论:(0)  加入收藏
走进光纤世界:揭秘光纤接口的四大类型
光纤技术作为现代通信的基石,已经广泛应用于各种数据传输场景中。它以高速率、长传输距离、抗干扰性强、低衰减以及带宽占用小等优点,成为了数据通信领域中的重要物理层连接方...【详细内容】
2024-04-10  Search:   点击:(7)  评论:(0)  加入收藏
AI程序员上岗 垂类大模型应用迎来井喷期
能自动写代码的“AI员工”、逐渐告别不够好用的智能客服,无需费时费力开发的工业AI控制器……随着人工智能大模型能力开始深入多个行业,IT、工业生产、金融、服务...【详细内容】
2024-04-07  Search:   点击:(5)  评论:(0)  加入收藏
公募业绩全部出炉 四类基金减亏 这类产品赚近2400亿
随着基金年报的完整披露,2023年公募基金的整体业绩情况也浮出水面。数据显示,2023年,债券型基金作为传统避风港资产的角色,以其稳定的收益特性成为市场亮点,产品总利润超过了货币...【详细内容】
2024-04-07  Search:   点击:(10)  评论:(0)  加入收藏
北京法院公布一批信用卡诈骗案,这类型案件占比超七成,如何预防?
界面新闻记者 | 张灵霄近期,信用卡诈骗呈多发高发态势。3月29日,北京高院向社会通报五年来北京法院审理信用卡诈骗案件的有关情况。数据显示,2019年至2023年,北京法院审结一审信...【详细内容】
2024-04-02  Search:   点击:(14)  评论:(0)  加入收藏
哥伦比亚大学华人开发「人脸机器人」,照镜子自主模仿人类表情超逼真
【新智元导读】OpenAI 机器人理解力虽强,却无法进行非语言交流。最近,哥伦比亚大学华人团队打造了全新的机器人 Emo,不仅可以提前预测和模拟人类表情,还可以进行眼神交流。此前,...【详细内容】
2024-04-01  Search:   点击:(25)  评论:(0)  加入收藏
马斯克称AI造福人类概率远大于毁灭人类
在最近的一次讲话中,特斯拉和SpaceX首席执行官埃隆·马斯克在超级人工智能对人类的潜在影响方面的立场似乎发生了令人惊讶的转变。周四,零重力公司(Zero Gravity)的CEO彼...【详细内容】
2024-03-29  Search:   点击:(22)  评论:(0)  加入收藏
ETF是什么?怎么分类?如何挑选?
ETF,全称Exchange Traded Fund,中文全称为“交易型开放式指数基金”,又称“交易所交易基金”,是一种在交易所上市交易的、基金份额可变的开放式基金。ETF属于开放式基金的一种特...【详细内容】
2024-03-25  Search:   点击:(21)  评论:(0)  加入收藏
▌简易百科推荐
Java 8 内存管理原理解析及内存故障排查实践
本文介绍Java8虚拟机的内存区域划分、内存垃圾回收工作原理解析、虚拟机内存分配配置,以及各垃圾收集器优缺点及场景应用、实践内存故障场景排查诊断,方便读者面临内存故障时...【详细内容】
2024-03-20  vivo互联网技术    Tags:Java 8   点击:(18)  评论:(0)  加入收藏
如何编写高性能的Java代码
作者 | 波哥审校 | 重楼在当今软件开发领域,编写高性能的Java代码是至关重要的。Java作为一种流行的编程语言,拥有强大的生态系统和丰富的工具链,但是要写出性能优异的Java代码...【详细内容】
2024-03-20    51CTO  Tags:Java代码   点击:(25)  评论:(0)  加入收藏
在Java应用程序中释放峰值性能:配置文件引导优化(PGO)概述
译者 | 李睿审校 | 重楼在Java开发领域,优化应用程序的性能是开发人员的持续追求。配置文件引导优化(Profile-Guided Optimization,PGO)是一种功能强大的技术,能够显著地提高Ja...【详细内容】
2024-03-18    51CTO  Tags:Java   点击:(29)  评论:(0)  加入收藏
Java生产环境下性能监控与调优详解
堆是 JVM 内存中最大的一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中。堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和 Survivor 区,...【详细内容】
2024-02-04  大雷家吃饭    Tags:Java   点击:(60)  评论:(0)  加入收藏
在项目中如何避免和解决Java内存泄漏问题
在Java中,内存泄漏通常指的是程序中存在一些不再使用的对象或数据结构仍然保持对内存的引用,从而导致这些对象无法被垃圾回收器回收,最终导致内存占用不断增加,进而影响程序的性...【详细内容】
2024-02-01  编程技术汇  今日头条  Tags:Java   点击:(77)  评论:(0)  加入收藏
Java中的缓存技术及其使用场景
Java中的缓存技术是一种优化手段,用于提高应用程序的性能和响应速度。缓存技术通过将计算结果或者经常访问的数据存储在快速访问的存储介质中,以便下次需要时可以更快地获取。...【详细内容】
2024-01-30  编程技术汇    Tags:Java   点击:(77)  评论:(0)  加入收藏
JDK17 与 JDK11 特性差异浅谈
从 JDK11 到 JDK17 ,Java 的发展经历了一系列重要的里程碑。其中最重要的是 JDK17 的发布,这是一个长期支持(LTS)版本,它将获得长期的更新和支持,有助于保持程序的稳定性和可靠性...【详细内容】
2024-01-26  政采云技术  51CTO  Tags:JDK17   点击:(96)  评论:(0)  加入收藏
Java并发编程高阶技术
随着计算机硬件的发展,多核处理器的普及和内存容量的增加,利用多线程实现异步并发成为提升程序性能的重要途径。在Java中,多线程的使用能够更好地发挥硬件资源,提高程序的响应...【详细内容】
2024-01-19  大雷家吃饭    Tags:Java   点击:(111)  评论:(0)  加入收藏
这篇文章彻底让你了解Java与RPA
前段时间更新系统的时候,发现多了一个名为Power Automate的应用,打开了解后发现是一个自动化应用,根据其描述,可以自动执行所有日常任务,说的还是比较夸张,简单用了下,对于office、...【详细内容】
2024-01-17  Java技术指北  微信公众号  Tags:Java   点击:(104)  评论:(0)  加入收藏
Java 在 2023 年仍然流行的 25 个原因
译者 | 刘汪洋审校 | 重楼学习 Java 的过程中,我意识到在 90 年代末 OOP 正值鼎盛时期,Java 作为能够真正实现这些概念的语言显得尤为突出(尽管我此前学过 C++,但相比 Java 影响...【详细内容】
2024-01-10  刘汪洋  51CTO  Tags:Java   点击:(82)  评论:(0)  加入收藏
站内最新
站内热门
站内头条