JAVA核心技术 卷一 ——JAVA类构造器和方法的解析

《Java核心技术:卷Ⅰ》学习记录(第四章) 在Java中,任何对象变量的值都是对存储在另外一个地方的某个对象的引用,类似于C++中的指针。Java中,最简单的类定义形式为field1在一个源文件中,只能有一个公共类,但可以有任意数目的非公共类。在Java中,所有的方法都必须在类的内部定义。注意不要在编写返回可变对象引用的访问器方法。 阅读详情

一、构造器

  1. 构造器与类同名
  2. 每个类可以有一个以上的构造器
  3. 构造器可以有0个、1个或多个参数
  4. 构造器没有返回值
  5. 构造器总是伴随着new操作一起调用

例如有一个Employee类,构造器有0个、1个或多个参数,且构造器没有返回值,以及构造器总是伴随着new操作一起调用。

   public Employee() {
    }
 public Employee(String name) {
        this.name = name;
    }
public Employee(String name, double salary) {
        this.name = name;
        this.salary = salary;
    }
Employee employee = new Employee();

 二、类的方法

类方法有:私有方法、静态方法,公有方法,工厂方法,main方法

1、私有方法:可能与掐灭的实现机制非常紧密,或者需要一个特别的协议以及一个特别的调用次序。用关键字:private来修饰私有方法

私有方法不会被外部的其他类调用,或者将其删除。通俗的讲,私有方法相当于自己情感,别人无法拿去,也无法将其消除。

2、 静态方法:用static修饰的方法。是一种不能向对象实时操作的方法。例如,Math类的ppow方法就是以恶静态方法。表达式::Math.pow(x,a),表示计算幂 x的a次。

先要了解静态域

静态域:将域定义为static,每个类中只有一个这样的域

例如: Employee类添加一个实力域id和一个静态域nextId。

public class Employee {
    private static int nextId = 1;
    private int id;
}

实力域和静态域的区别:如果有1000个Employee类的对象,则有1000个实力域id。但是,只有一个静态域nextId。静态域属于类,不属于任何的独立的对象。

 

静态方法的两种使用情况:

1)、一个方法不需要访问对象状态,其所需参数都是通过显示参数提供。(例如:Math.pow)

2)、一个方法只需要访问类的静态域(例如:Employee.getNextId)

3、工厂方法

工厂方法是静态方法的另外一种常见的用途。类似LocalDate和NumberFormat的类使用静态工厂方法来构造对象。

已经见过的工厂方法:LocalDate.now和LocalDate.of。

NumberFormat类也有类似的构造方法:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
NumberFormat percentFormatter = NumberFormat.getPercentInstance();
double x = 0.1;
System.out.println(currencyFormatter.format(x));//prints $0.10
System.out.println(percentFormatter.format(x));//prints $10%

为什么 NumberFormat类不利用构造器完成这些此操作呢?有两个主要的原因:

  • 无法命名构造器。构造器的名字必须域类名相同。但是,这里希望将得到的货币实例与百分比实例采用不同的名字
  • 当使用构造器时,无法改变所构造的对象类型。而Factory方法将返回一个DecimalFormat类对象,这是NumberFormat的子类。

 4、main方法

main方法也是一个静态方法。

public class ParamTest {
    public static void main(String[] args) {
        //construst objects here
    }
}

main方法不对任何对象进行操作。事实上,在启动程序时还没有任何一个对象。静态的main方法将执行并创建程序所需要的对象。

 

 

三、方法参数

方法中可以有0个、1个或多个参数。

Java中方法参数的使用情况:

1)、一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)

2)、一个方法可以改变的一个对象参数的状态

3)一个方法不能让对象参数引用一个新的对象

例如:有一个Employee类和ParamTest类

package ThreeDay;

import java.time.LocalDate;

public class Employee {
    private static int nextId = 1;

    //instance fields
    private String name;
    private double salary;
    private LocalDate hireDay;

    public Employee(String name, double salary) {
        this.name = name;
        this.salary = salary;
    }

    public void setId() {
        id = nextId;
        nextId++;
    }

    public static int getNextId() {
        return nextId;
    }

    public int getId() {
        return id;
    }

    private int id;

    //constructor
    public Employee(String n, double s, int year, int month, int day)
    {
        name = n;
        salary = s;
        hireDay = LocalDate.of(year,month,day);
    }

    //a method
    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }

    public LocalDate getHireDay() {
        return hireDay;
    }

    public void raiseSalary(double byPercent){
        this.salary = salary * (1+byPercent/100);
    }
}
package ThreeDay;

public class ParamTest {
    public static void main(String[] args) {
        /*
        Test1:Methods can't modify numeric parameters
         */
        System.out.println("Testing tripleValue");
        double percent = 10;
        System.out.println("Before: percent="+percent);
        tripleValue(percent);
        System.out.println("After:percent="+percent);

        /*
        Test2: Methods can change the state of object parameters
        */
        System.out.println("\nTesting tripleSalary:");
        Employee harry = new Employee("Harry",50000);
        System.out.println("Before: salary="+harry.getSalary());
        tripleSalary(harry);
        System.out.println("After:salary="+harry.getSalary());

        /*
        Test 3: Methods can't attach new objects to object parameters
        */
        System.out.println("\nTesting swap:");
        Employee a = new Employee("Alice",70000);
        Employee b = new Employee("Bob",60000);
        System.out.println("Before: a="+a.getName());
        System.out.println("Before: b="+b.getName());
        swap(a,b);
        System.out.println("After:a="+a.getName());
        System.out.println("After:b="+b.getName());
    }

    public static void tripleValue(double x)//doesn't work
    {
        x = 3*x;
    }

    public static void tripleSalary(Employee x)//works
    {
        x.raiseSalary(200);
        System.out.println("End of methos: salary="+x.getSalary());
    }

    public static void swap(Employee x, Employee y)
    {
        Employee temp = x;
        x = y;
        y = temp;
        System.out.println("End of method: x="+x.getName());
        System.out.println("End of method: y="+y.getName());
    }
}

 

《Java核心技术:卷Ⅰ》学习记录(第五章) 在类的继承层次结构中,位于上层的类更具有一般性,可能更加抽象。从某种角度看,祖先类更有一般性,人们只将它作为派生其他类的基类,而不是用来构造任何特定实例,此时可以引入抽象类。使用abstract关键字。包含一个或多个抽象方法的类本身必须被声明为抽象类。除去抽象方法外,抽象类还可以包含字段和具体方法。即使不含抽象方法,也可以将类声明为抽象类。抽象类不能实例化。 阅读详情

相关推荐

《Java 核心技术卷1 基础知识》第 4 章 对象与类

面向对象程序设计(object-oriented programming, OOP)面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。传统的结构化程序设计通过设计一系列的过程(即算法)来求解问题。一旦确定了这些过程,就要开始考虑存储数据的适当方式。这就是 Pascal 语言的设计者 Niklaus Wirth 将其著作命名为《算法 + 数据结构 = 程序》的原因。在 Wirth 的这个书名中,算法是第一位的,数据结构是第二位的,这就明确地表述了程序员的工作方式。

码农UP2U 936

Java学习day020 方法参数

使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识。 day020 方法参数 了解一些在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语。 按值调用(call by value)表示方法接收的是调用者提供的值。而按引用调用(call by reference)表示方法接收的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值...

Zzehao的博客 241

java核心技术 卷一 第十版 中文版勘误(更新ing)

本文主要是阅读java核心技术 卷一 第十版时发现的错误,整理下来。本人小白,如果整理有误,还望指出。如果有的错误没有指出,还望补充。谢谢! 第34页最下方 警告部分 换行符的Unicode值为\u000a,把\u00A0修改为\u000a ...

QIUNP的博客 2530

Java随堂笔记

构造器 构造器与类同名 每个类可以有一个以上的构造器 构造器可以有0个、1个或多个参数 构造器没有返回值 构造器总是伴随着new操作一起使用 不要在构造器中定义与实例域重名的局部变量,其只能在构造器内部进行访问 访问器方法 只返回实例域的值,又称域访问器,一旦在构造器中设置完毕,就没有任何一个方法对他进行修改。 例如以下代码: // 访问器 public String getName() { return name; } public double getSalary() { retur

IQ_Kuo的博客 232

python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(二)

之前的博客已经写了python爬取豆瓣读书top250的相关信息,接下来继续看如何清洗数据。 如果有没看懂的或是不了解上一部分说的是什么内容的,请看https://blog.youkuaiyun.com/qq_45804925/article/details/112848887 现在开始具体内容的复习: 1. 豆瓣读书top250信息预处理 #数据清洗 import pandas as pd import re import time # 先读取数据文件 data = pd.read_csv('E:/Class/商.

qq_45804925的博客 4440

描述符链表(Descriptor Chain)是什么?

描述符链表是硬件加速数据传输的核心数据结构,通过链式描述符(包含地址、长度、控制标志等)实现DMA自动批量处理,显著降低CPU负载。其工作原理为:CPU初始化链表后,硬件按序处理每个描述符,完成自动跳转与中断通知。在网卡收包、NVMe存储等场景中应用广泛,优势包括批处理、低延迟和灵活调度。需注意内存对齐、缓存一致性等实现细节,优化手段包括预分配描述符池、环形缓冲区等。该技术是网络/存储领域提升吞吐量的关键方案。

guigenyi的专栏 774

【Java中的构造器(构造方法)_基本语法_详细解读】

基本特征:修饰符 方法名(形参列表){ 方法体; }首先,让我们来看下面的一段代码 那么此时,我们就有了一种需求前面我们在创建人类的对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值,如果现在我要求,在创建人类的对象时,就直接指定这个对象的年龄和姓名,该怎么做?这时就可以使用构造方法。 输出结果:可以看出来,构造方法被调用了两次我们将上述Person类中的构造的方法,单独拉出来分析 分析结果:既然构造方法与普通的方法如此类似,那它是否拥有类似的性质呢?重载比如:我们可以再给Person类定义一个构造

学习愚公的博客 4973

VideoPose3D | 环境搭建

文章目录环境要求下载PyTorch基本步骤验证安装问题修复数据集设置Human3.6MCPN detections配置wget命令安装CPN评估环境测试问题测试报错 无法识别参数3 3 3 3卡在最后评估 主要参考:GitHub / facebookresearch / VideoPose3D 环境要求 Dependencies Make sure you have the followin...

D0 8655

Java中的构造器

构造器是一种特殊的方法,它与类同名,没有返回类型(甚至不写void),用于初始化对象。构造器在对象创建时由Java虚拟机(JVM)自动调用,确保对象的初始状态。构造器是Java中用于创建和初始化对象的重要方法。通过构造器,可以确保对象在创建时有一个有效的初始状态。理解构造器的工作原理、类型及其重载用法,有助于编写更灵活、可维护的代码。在实际开发中,合理使用构造器,能够提升代码的清晰度和可读性。

muxiuyulin871的博客 4866

AI开发助手介绍

AI开发助手介绍随着NLP方向发展越来越成熟,AI写代码领域出现了几个非常好的模型,今天笔者给大家推荐几个AI Coding 助手AI Coding助手是以IDEA插件或vim插件形式提供服务,在编辑器中写代码时,可以实时预测下一行要输入的代码,提升开发效率。Github Copilot首先要介绍的是Github Copilot,Copilot是个AI Coding助手,它从注释和代码中提取上下文,给出单行和整个函数的代码建议,Copilot由Open AI 的CodeX模型提供支持,它是一个由OpenAI

bobo_simpler的博客 5765

散户渡劫指南:从炼气期到化神期的量化之路

经常有人问我普通人怎么学习量化交易,我就在想怎么学了量化就不是普通人了吗,可能他的意思是类比修仙,量化素人如何修炼进阶,今天就将量化学习每个阶段均对标修仙境界的核心能力与心法要诀一一介绍,助你从“交易凡人”蜕变为“量化金仙”。

木头大左的博客 1338

Java(五)——Java构造器

构造器的引入 构造器的作用 构造器的组成 构造器相关语法规则 类的属性赋值的顺序 JavaBean类(扩展知识) UML类图 this关键字 package关键字 import关键字

MrDaKai的博客 6669

选择的 Python 解释器无效,请尝试更改解释器以启用 IntelliSense、Lint 分析和调试等功能。请查看输出,详细了解解释器无效的原因。

摘要:在VS Code中配置Anaconda Python解释器时若出现"解释器无效"错误,可通过修改用户设置解决。具体步骤:1) 按Ctrl+Shift+P打开命令面板;2) 搜索并打开用户设置JSON文件;3) 添加conda路径配置项,示例格式为"python.condaPath": "D:\\Anaconda\\setup\\Scripts\\conda.exe";4) 同时启用环境激活选项"python.terminal.act

猿小白的博客 844

《java核心技术 卷一》笔记

《Java核心技术 卷1》笔记 文章目录《Java核心技术 卷1》笔记API文档1.java . lang . string 1.02.java.lang.StringBuilder 5.03.java.util.Scanner 5.04.java.Iang.System 1.05.java.io.Console 66.java.io.PrintWriter 1.17. java.nio.file...

weixin_43549148的博客 1931

海康Visionmaster-全局脚本:VM 加载方案后自动执行 的方法,如何让VM在方案加载后自动执行流程?

海康Visionmaster-全局脚本:VM 加载方案后自动执行 的方法,如何让VM在方案加载后自动执行流程?

视觉人机器视觉的博客 2036

[系统安全] 十六.PE文件逆向基础知识(PE解析和PE编辑工具)

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~ 作者前面介绍了三个漏洞,包括Chrome浏览器保留密码渗透解析、通过Chrome浏

杨秀璋的专栏 1万+

Java核心技术卷一 -第五章:super关键字

系列文章目录 Java核心技术卷一 -第一章:java“白皮书”的关键术语 Java核心技术卷一 -第三章:数据类型 Java核心技术卷一 -第三章:变量与常量 Java核心技术卷一 -第三章:运算符 Java核心技术卷一 -第三章:字符串 Java核心技术卷一 -第三章:输入与输出 Java核心技术卷一 -第三章:数组 Java核心技术卷一 -第四章:类之间的关系-依赖 Java核心技术卷一 -第四章:预定义类-LocalDate类小应用 Java核心技术卷一 -第四章:构造器 Java核心技术卷一 -第

weixin_54185681的博客 460

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

《JAVA核心技术卷·I》——第四章4——使用用户自定义类1——字段、构造器、参数显隐、封装、深拷贝——《对象与类》

🔥本篇概览:详细讲解了用户自定义类时的方方面面。🌈⭕🔥

做一个善良的人,做好自己的事,如果愿意,再发一份光。 766

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

《Java 核心技术 卷1》 笔记 第四章:类与对象(3) 构造器全局私有方法

构造器全局私有方法 特征: 1. 构造器名与类名相同 2. 每个类都有构造器 3. 可以有多个构造器 4. 构造器可以没有返回值 5 .构造器的参数可以是任意个 4.3.5 显式参数和隐式参数 显示参数: 显而易见的,局部变量。 隐式参数:全局变量,不在方法中,与局部变量名不重复时,通常可以省略this,以下情况不能省略: 4.3.6 封装 1. 私有的全局变量 2. 公有的访问(getter)方法,不一定有,如果外界不需要这个值,或者赋值过程对数据进行了转换,可能不需要。 3

yu_duan_hun的博客 505

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java核心技术卷一:对象和类

类之间的关系 依赖(“uses-a”):依赖意味着耦合,应该尽量减少依赖 聚合(“has-a”) 继承(“is-a”) 使用预定义类 Date类:表示时间点的Date类 LocalDate类:表示大家都熟悉的日历表示法 静态域与静态方法 在下面两种情况下使用静态方法: 一个方法不需要访问对象状态,其所需参数都是通过显示参数提供 一个方法只需要访问类的静态域 方法参数 **按值调用:**表...

MaiDouYT的博客 261

《Java核心技术卷一》读书笔记

类是构造对象的模板、蓝图。由类构造对象的过程称为类的实例。对象的数据叫做实例域,操作数据的过程叫做方法对于每个特定的类实例(对象)都要一组特定的实例域值这些值得集合就是这个对象的当前状态实现封装的关键在于绝对不能让类中的方法直接访问其他类的实例域通过创建一个类来建立另一个类的过程称为继承。

kukudeYSB的博客 539

Java基础一(Java核心技术卷I)

基本数据类型、对象与类

G_yongchang的博客 824

Java核心技术卷一 -第四章:构造器

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、构造器重点:警告:总结 前言 本人为java初学者,文章内容仅为个人学习总结分享,其中包含了大量Java核心技术卷一里面的文章内容以及一些网站文章内容,由于参考文章过多,在此并不一一列出,如有侵权,请联系删除。 一、构造器 重点: 构造器与类同名。 每个类可以有一个以上

weixin_54185681的博客 397

《JAVA核心技术卷》第四章 对象与类

《JAVA核心技术卷》第四章 对象与类 4.1 面向对象程序设计概述4.1.1 类4.1.2 对象4.1.3 识别类 4.1 面向对象程序设计概述 4.1.1 类 类是构造对象的模板或蓝图。由类构造对象的过程称为创建类的实例。 封装:封装将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。实现封装的关键在于绝对不能让类中的方法直接地访问其他类地实例域。程序仅通过对象的方法与对象数据进行交互。 4.1.2 对象 要想使用OOP,一定要清楚对象的三个主要特性: 对象的行为 对象的状态 对象标识

qq_45580956的博客 740

Java 核心技术卷 I 学习记录五

下面是由继承Employee类来定义Manager类的格式,关键字extends表示继承。添加方法和域关键字extends表明正在构造的新类派生于一个已存在的类。已存在的类称为超类(superclass)、基类(base class)或父类(parent class);新类称为子类(subclass)、派生类(derived class)或孩子类(child class)。尽管Employee类是一个超类,但并不是因为它优于子类或者拥有比子类更多的功能。实际上恰恰相反,子类比超类拥有的功能更加丰富。

2401_87797168的博客 1043

Java 核心技术卷一 随笔

java 核心技术卷一

Jett_Leo的博客 817
上一篇: Java的LocalDate类的简单使用
下一篇: centos7 nginx安装和ssl配置
NowTime1
博客等级 码龄9年 2粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值