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。
JAVA类和对象访问_Java类和对象相关推荐
- java类与对象作用_Java类与对象
●类和对象的关系: 一:类是对同一类事物(对象)的抽象,对象实际存在的该类的各种实体. 二:面向对编程的核心:找合适的对象来做合适的事. 三:Java中找到对象: 1):sun自己定义好的类,必须知道 ...
- java 对象 方法_java——类、对象、方法
一.类 1.Java语言把一组对象中相同属性和方法抽象到一个Java源文件就形成了类. 一个java文件可以有多个类,但是每一个类都会生成一个class字节码文件. 如果class 前加public ...
- java类和对象程序_Java类与对象程序设计基础
Java类与对象程序设计基础 一.实验目的: 通过编制一个独立应用程序,使得学生掌握Java的系统所提供类的引用方法:通过编制一个完整的应用程序,使得学生对Java的应用程序的基本构成和基本算法熟练掌 ...
- java 类里面对象共享_Java并发编程 - 对象的共享
编写正确的并发程序,关键问题在于:在访问共享的可变状态时需要进行正确的管理.同步代码块和同步方法可以确保以原子的方式执行操作,同步还有另一个重要的方面:内存可见性. 可见性 为了确保多个线程之间对内存 ...
- java类与对象实验_JAVA类与对象实验报告
<JAVA类与对象实验报告>由会员分享,可在线阅读,更多相关<JAVA类与对象实验报告(6页珍藏版)>请在人人文库网上搜索. 1.面向对象程序设计实验报告实验三.类与对象(1) ...
- java对类对象初始化_Java类和对象初始化
Java类和对象初始化Tag内容描述: 1.解析 Java 类和对象的初始化过程 由一个单态模式引出的问题谈起 北京高伟达西南分软 Java EE 软件工程师 三年 Java EE 项目经验 行业方向 ...
- java类的成员组成_Java类的组成:类的三个组成部分
Java类的组成:类的三个组成部分 (2011-11-17 21:51:53) 标签: j2me 一.数据成员:数据成员是类的属性,声明该类的对象所具备的属性.声明数据成员往往需要声明以下几项:(1) ...
- java类验证和装载顺序_Java类的加载机制和双亲委派模型
Java类的加载机制和双亲委派模型 1类的加载机制 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading).验证(Verification).准备(Prepar ...
- java中static的用法_Java类中static的用法
关于Java中static的使用有以下四种情况: 1.静态成员变量 被static修饰的成员变量,叫静态成员变量或类变量:没有被static修饰的变量,叫实例变量. 两者的区别是: 静态 ...
最新文章
- 图解|打工人看腾讯这道多线程面试题
- MySQL · 捉虫动态 · show binary logs 灵异事件
- python 压缩文件 调用7z_Python:如何从Python压缩的7z文件中读取一行?
- BZOJ-3505-数三角形-CQOI2014
- fedora 35 安装各种桌面环境命令整理
- acwing221 龙哥的问题
- 中国大学慕课python答案第七章_中国大学慕课mooc用Python玩转数据章节答案
- pytorch-分类任务训练loss不变
- Android App Architecture使用详解
- java案例代码9-冒泡算法:
- Latex中PDF文档目录乱码解决方案
- 计算机怎么转换英语版本,电脑英文字母大小写怎么转换
- android 日历动画的实现
- 虚拟机找不到网卡解决方法
- Fzu 2206 函数求解【规律】
- 射频电路板设计常见的问题分析和解决办法
- stm32 + ESP8266 wifi获取网络时间和天气 stm32天气预报
- MVN打包报错:在类路径或引导类路径中找不到程序包 java.lang
- EasyUi 快速入门
- mysql的自身防御不包括_2020高校邦《MySQL数据库基础》作业题库2020智慧树《大学物理 Ⅰ》判断题答案...
热门文章
- jquery 延迟加载代码_延迟加载是一种代码气味
- spring 启动进度_在Web浏览器中显示Spring应用程序启动的进度
- javaee编程题_在JavaEE中使用CDI的简单面向方面的编程(AOP)
- gradle docker_带有Gradle的Docker容器分为4个步骤
- 如何在黄瓜中进行后端测试
- glassfish发布应用_WildFly 8与GlassFish 4 –选择哪个应用服务器
- 适用于Java EE / Jakarta EE开发人员的Micronaut
- 提示:通过URL激活并发送参数
- apache camel_令人印象深刻的第一个Apache Camel版本
- 书评– Kubernetes Up&Running,作者:Kelsey Hightower