JAVA类和对象访问_Java类和对象

一、类

类是封装对象的属性和行为的载体,在Java语言中对象的属性以成员变量的形式存在,而对象的方法以成员方法的形式存在。

1. 类的构造方法

构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的,构造方法分为有参构造方法和无参构造方法,区别就在于有没有参数。说这么多概念是不是感觉有点麻木,直接看下面的例子吧。

public class Example {

public Example() {                              // 定义无参构造方法

System.out.println("无参构造方法");

}

public Example(String name) {                   // 定义有参构造方法

System.out.println("有参构造方法");

}

}

在定义构造方法时,构造方法没有返回值,且构造方法不需要void关键字进行修饰。“public”是构造方法的修饰符,“Example”是构造方法的名称。

在构造方法中可以为成员变量赋值,这样当实例化一个本类的对象时,相应的成员变量也将被初始化。

2. 类的主方法

主方法其实我们已经见过很多次了,Java编译器通过主方法来执行程序,是类的入口点,语法格式如下:

public static void main(String[] args) {

// ...

}

“static”是指主方法是静态的,若在其中调用其它方法,则该方法也必须是静态的;”void”是指主方法没有返回值;“String[] args”是指主方法的形参为数组,用args[0]~args[n]分别表示程序的第一到第n个参数,可以使用args.length获取参数的个数。

3. 成员变量

对象的属性称为成员变量,也可称为属性。下面以学生类(可比作学生证)举个例子:

public class Student {

private int id;                    // 定义一个int型成员变量,学号

private String name;            // 定义一个String型成员变量, 姓名

public Student() {                // 定义无参构造方法

}

public Student(int id, String name) {    // 定义有参构造方法

this.id = id;

this.name = name;

}

public void setName(String name) {            // 定义一个setName()方法,用于导入学生姓名

this.name = name;                    // 将参数值赋给成员变量

}

public String getName() {        // 定义一个getName()方法,用于获取学生姓

return this.name;

}

public Student getStudent() {        // 返回Student类引用

return this;

}

}

这就是个比较全的例子了,在Java语言中使用class关键字来定义类,Student是类的名称;在Student类中定义了三个成员变量,分别为学号和姓名,可设置初始值也可不设置初始值,若不设置初始值则会有默认值;private关键字用于定义一个私有成员,后面会介绍public、protected和private。接下来的两个构造方法上面已经提到过了,this关键字用于引用对象的成员变量和方法,在后面会有所介绍。一般在这样的类中每一个变量都会有set和get方法,set方法是带参数的方法没有返回值,get方法是有返回值的方法,用于获取。最后还有一个getStudent()方法,它的类型是Student类的,用于返回Student类的引用,用this关键字实现。

4. 成员方法

成员方法对应类的行为,就是上述实例中的getName()和setName()方法,分别为获取学生姓名和设置学生姓名的方法,语法格式如下:

权限修饰符 返回值类型 方法名(参数类型 参数名){

// ...

return 返回值;

}

若无返回值,返回值类型用void关键字表示,如上述setName()方法。若有返回值,返回值类型要与方法返回值类型一致。

5. 局部变量

如果在成员方法中定义一个变量,那么这个变量别称为局部变量。例如在上述Student类中的getName()方法中定义一个局部变量id如下:

public String getName() {

int id = 0;                       // 定义一个局部变量

return id + this.name;

}

局部变量是在方法执行时创建,在方法执行结束时被销毁,使用时必须赋值或初始化。所以局部变量的有效范围从该变量的声明开始到该变量的结束为止。

若一个方法中含有与成员变量同名的局部变量,则方法中对这个变量的访问以局部变量进行访问。例如id,在上述方法中id=0,而不是Student类中的成员变量id的值。

6. 静态变量、常量和方法

由static修饰的变量、常量和方法被称作静态变量、常量和方法。静态成员是属于类所有的,区别于个别对象,可以在本类或其他类中使用类名和“.”运算符调用,这个在之前的篇幅中的例子也出现过,语法格式为: 类名.静态类成员 。

public class StaticTest {

final static double PI = 3.1415926;        // 在类中定义静态常量

static int id;                        // 在类中定义静态变量

public static void demo01() {

System.out.println("test");

}

public static void main(String[] args) {

System.out.println(StaticTest.PI);        // 调用静态常量

System.out.println(StaticTest.id);        // 调用静态变量

StaticTest.demo01();                    // 调用静态方法

}

}

权限修饰符

Java中的权限修饰符主要包括private、public和protected,这些修饰符控制着对类和类的成员变量以及成员方法的访问。区别见下表:

访问位置privateprotectedpublic

本类

可见

可见

可见

同包其他类或子类

不可见

可见

可见

其他包的类或子类

不可见

不可见

可见

若一个类的访问权限为不可见,这个类将隐藏其内的所有数据,以免用户直接访问它。当声明类时不使用public、protected或private修饰符设置类的权限,则这个类预设为包存取范围,即只有同一个包中的类可以调用这个类的成员变量或成员方法。

8. this关键字

在Java中,this关键字被隐式地用于引用对象的成员变量和方法,如前面“成员变量”中的例子:

public void setName(String name) {            // 定义一个setName()方法,用于导入学生姓名

this.name = name;                    // 将参数值赋给成员变量

}

setName()方法中,this.name指定的就是Student类中name变量,而“this.name=name”语句中第二个name则指定的是形参name。实质上,setName()方法实现的功能就是将形参name的值赋予成员变量name。

this除了可以调用成员变量或成员方法之外,还可以作为方法的返回值。如前面“成员变量”中的例子:

public Student getStudent() {        // 返回Student类引用

return this;

}

在getStudent()方法中,方法的返回值为Student类,所以方法体中使用return this这种形式将Student类的对象进行返回。

二、对象

Java是面向对象的程序设计语言,对象是由类抽象出来的,所有的问题都是通过对象来处理,对象可以操作类的基本属性和方法解决相应的问题。

1. 对象的创建

在Java中可以使用new操作符调用构造方法创建对象,语法格式如下:

Test test = new Test();

Test test = new Test("a");

test对象被创建出来时,test对象就是一个对象的引用,这个引用在内存中为对象分配了存储空间,可以在构造方法中初始化成员变量,当创建对象时,自动调用构造方法。

在Java中对象和实例事实上可以通用,下面看一个创建对象的实例。

public class CreateObject {

public CreateObject() {        // 构造方法

System.out.println("test");

}

public static void main(String[] args) {

new CreateObject();        // 创建对象

在上述实例的主方法中使用new操作符创建对象,在创建对象的同时,自动调用构造方法中的代码。

2. 访问对象的属性和行为

当用户使用new操作符创建一个对象后,可以使用“对象.类成员”来获取对象的属性和行为。话不多说,直接上代码。

int i = 2018;        // 成员变量

public void call() {    // 成员方法

for(i=0; i<3; i++) {

System.out.print(i + " ");

if(i == 2 ) {

System.out.println();        // 换行

}

}

}

public ObjectTest() {        // 构造方法

}

public static void main(String[] args) {

ObjectTest o1 = new ObjectTest();        // 创建一个对象

ObjectTest o2 = new ObjectTest();        // 创建另一个对象

o2.i = 60;        // 给第二个类成员变量赋值

System.out.println("第一个实例对象调用变量i的结果为:"+ o1.i);

o1.call();

System.out.println("第二个实例对象调用变量i的结果为:"+ o2.i);

o2.call();

}

}

这里我们可以看到,虽然使用两个对象调用同一个成员变量,结果却不相同,因为在打印这个成员变量的值之前将该值重新赋值为60,但在赋值时使用的是第二个对象o2调用的成员变量,所以在第一个对象o1调用成员变量打印该值时仍然是成员变量的初始值。所以两个对象的产生是相互独立的。

如果希望成员变量不被其中任何一个对象改变,可以使用static关键字,也即改第三行代码为 static int i = 2018; ,运行结果如下:

这里由于第19行代码“o2.i=60;”改变了静态成员变量的值,所以使对象o1调用成员变量的值也变为了60;当“o1.i”执行完后,再次调用call()方法,使i的值又重新赋值为0,循环打印,最后i为3,退出循环,所以对象o2调用成员变量的值变成了3。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扩展方法 枚举值_扩展枚举功能的两种方法

扩展方法 枚举值前言 在上一篇文章中&#xff0c;我解释了如何以及为什么在Java代码中使用enums而不是switch/case控制结构。 在这里&#xff0c;我将展示如何扩展现有enums功能。 介绍 Java enum是一种编译器魔术。 在字节码中&#xff0c;任何enum都表示为扩展抽象类java.la…

正则表达式中关于字符集的问题

/[abc]/&#xff0c;匹配1或者多个方括号中的任意字符&#xff0c;方括号中的字符是“或者”的关系&#xff0c;等价于 /(a|b|c)/ /(abc)/&#xff0c;匹配1个或者多个 abc&#xff0c;abc 是一个整体&#xff0c;如下图所示&#xff1a; /[0-9|_|-]/&#xff0c;匹配由数字…

spring 构造函数注入_Spring依赖注入–字段vs设置器vs构造函数注入

spring 构造函数注入欢迎使用Spring Dependency Injection –字段&#xff0c;设置器&#xff0c;构造函数注入教程。 了解场注入 &#xff0c; 二传手注入和构造函数注入之间的区别。 借助代码示例&#xff0c;我们将看到使用每个示例的好处以及为什么选择一个而不是另一个。 …

java 快速io_Java编程在ICPC快速IO实现源码

本文将介绍Java在ICPC快速IO实现方法&#xff0c;下面看看具体代码。不处理EOF&#xff1a;import java.io.OutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.Arrays;import java.util.Random;import java.io…

adf开发_如何在ADF中将参数传递给ActionListener

adf开发在某些情况下&#xff0c;需要将值传递给ADF Button的ActionListener。 可以由actionListeners调用的方法只有一个ActionEvent类型的参数。 因此&#xff0c;我将解释如何将参数传递给该bean方法&#xff0c;但是它在方法签名中仅包含一个参数ActionEvent。 我在页面…

JavaScript/JS的学习

文章目录JavaScript 简介JavaScript 发展史ECMAScript基本语法与 HTML 结合方式数据类型类型转换非 number 转成 number非 boolean 转成 boolean特殊语法变量运算符双等号&#xff08;&#xff09;全等号&#xff08;&#xff09;流程控制语句switch...casewhilefor 循环对象Fu…

java soap协议头_自己调用webservice方法总结(带请求头SoapHeader)

调用webservice总结&#xff1a;1.加入第三方的jar包 Ksoap2-android-XXX2.访问响应的webservice的网站&#xff0c;查看响应的信息&#xff0c;得到nameSpace&#xff0c;methodName&#xff0c;url&#xff0c;soapAction3.如果request信息还有带有SoapHander的。那么就要封装…

注册界面演示代码(前端开发)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册</title><style>* {margin: 0px;padding: 0px;/*这样的设置会阻止元素大小的改变&#xff0c;因为设置内边距时元素大小会发生改变*/b…

apache ignite_使用Apache Ignite瘦客户端– Apache Ignite内部博客

apache ignite从2.4.0版本开始&#xff0c;Apache Ignite引入了一种连接到Ignite群集的新方法&#xff0c;该方法允许与Ignite群集进行通信而无需启动Ignite客户端节点。 从历史上看&#xff0c;Apache Ignite提供了客户端和服务器节点两个概念。 点燃旨在用作轻量级模式的客户…

java 网络编程 方式_JAVA网络编程

概念BIO 阻塞io&#xff0c;1.4之前NIO no-blocking io 非阻塞io&#xff0c;jdk1.4AIO 异步io&#xff0c;jdk1.7浏览器输入网址&#xff0c;敲下回车之后发生了什么&#xff1f;1.URL解析2.DNS解析概念&#xff1a;Domain Name System&#xff0c;域名系统&#xff0c;本质…

如何设置背景图(前端开发)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>模糊化背景图</title><style>body {background-image: url("image/bjt03.jpg");background-repeat: no-repeat;background-atta…

java字符串底层实现_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...

Java基础之字符串操作——String字符串什么是字符串&#xff1f;如果直接按照字面意思来理解就是多个字符连接起来组合成的字符序列。为了更好的理解以上的理论&#xff0c;我们先来解释下字符序列&#xff0c;字符序列&#xff1a;把多个字符按照一定的顺序排列起来&#xff1…

查看oracle会话和进程_带有Oracle Digital Assistant和Fn Project的会话式UI。 第三部分,迁移到云...

查看oracle会话和进程在这篇文章中&#xff0c;我将继续在Oracle Digital Assistant和Oracle Digital Assistant之上为FlexDeploy实现对话式UI的故事。 Fn项目 。 今天&#xff0c;我将围绕聊天机器人工作的无服务器API迁移到云中&#xff0c;因此整个解决方案都在云中工作&am…

浏览器用户脚本管理器(Tampermonkey)

文章目录脚本管理器的好处是什么&#xff1f;用户脚本管理器有哪些&#xff1f;如何使用&#xff1f;安装脚本示例常用脚本脚本管理器的好处是什么&#xff1f; 用户脚本管理器将在您的用户脚本管理方面提供更多的便利。 它提供了诸如便捷脚本安装、自动更新检查、标签中的脚本…

服务器$java_top路径_ERP实施项目-MD120_FIN000_即时打印_V1.0

中国移动项目即时打印开发在此将web的即时打印开发成通用程序。1、首先通过创建rtf模板制定报表的输出格式&#xff1b;2、将需要输出的数据插入客户化表cux_fnd_xml_pool中&#xff1b;3、通过EBS功能调用CuxFndXmlpViewer.jsp。此jsp程序会根据传入的参数判断调用哪个rtf模板…

通讯网关 api网关_API网关正在经历身份危机

通讯网关 api网关这些年来&#xff0c;API网关正在经历一些身份危机 。 它们是否是集中的共享资源&#xff0c;从而促进了API对外部实体的公开和治理&#xff1f; 它们是集群入口哨兵&#xff0c;可以严格控制哪些用户流量进入或离开集群吗&#xff1f; 还是他们根据自己拥有…

百度搜索引擎使用技巧

1.在指定的网站搜索内容 在搜索框输入&#xff1a;site:youku.com 蛋炒饭&#xff0c;则只会返回优酷网站上关于蛋炒饭的内容 2.屏蔽指定的网站 例如&#xff0c;搜索“内存溢出”&#xff0c;但是不希望看到 csdn 网站相关的内容&#xff0c;你可以在搜索框输入&#xff1a;内…

docker 容器监控_以简便的方式监控Docker容器中的ADF应用程序

docker 容器监控在这篇简短的文章中&#xff0c;我将展示一种简单的方法来确保在Docker容器中运行的ADF应用程序在内存利用率方面是健康的Java应用程序。 我将使用标准工具JConsole&#xff0c;它是计算机上JDK安装的一部分。 如果存在问题&#xff08;例如&#xff0c;内存泄漏…

phpexcel 日期 时分秒_thinkPHP+PHPExcel实现读取文件日期的方法含时分秒

Vendor(PHPExcel.PHPExcel.IOFactory);$inputFileName Public/demo/demo.xls;$objReader new PHPExcel_Reader_Excel5();$objPHPExcel $objReader->load($inputFileName);$sheet $objPHPExcel->getSheet(0);$highestRow $sheet->getHighestRow(); // 取得总行数$…