Java对象与类—对象与类
1.类
类(class)是构造对象的模板,具体点说类就是对具有相同性质,相同行为的一群对象的抽象说明。由类构造(construst)对象的过程称为创建类的实例(instance)。
2.对象
对象是类的实例,也就是说对象是由类构造出来的。比如说人类就是一个类,而具体的一个人就是对象。
总的来说,类是对象的模板,对象是类的具体实例。
面向对象程序设计(OOP)是当经主流的程序实际范型,而Java是完全面向对象的,必须熟悉OOP才能够编写Java程序。
要想使用OOP,一定要清楚对象的三个主要特性:
①、对象的行为(behavior)——可以对对象施加哪些操作,或可以对对象施加哪些方法?
②、对象的状态(state)——当施加那些方法时,对象如何响应?
③、对象标识(identity)——如何辨别具有相同行为与状态的不同对象?
同一个类的所有对象实例,由于支持相同的行为而具有家族相似性。对象的行为是用可调用的方法定义的。
3.类之间的关系
在类之间,最常见的关系有:
①、依赖("uses-a")——是一种最明显,最常见的关系。如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。
②、聚合("has-a")——是一种具体且易于理解的关系。聚合关系意味这类A的对象包含类B的对象。
③、继承("is-a")——是一种用于表示特殊与一般关系的。一般而言,如果类A扩展类B,类A不但包含从类B继承的方法,还会拥有一些额外的功能。
4.自定义类
在Java中,最简单的类定义形式如下(以Employee类为例):
package jackWe;
public class Employee {
private String name;
private int age;
private String sex;
public Employee() {
super();
// TODO Auto-generated constructor stub
}
public Employee(String name, int age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public void getOneHeight() {
System.out.println(this.name + "的身高为:" + (int)(Math.random() * 200) + "cm");
}
}
①、解析Employee类
通过上述代码可以发现,这个类包含两个构造器和多个方法,这个类的所有方法都被标记为public。关键字public意味着任何类的任何方法都可以调用这些方法。当然,类中还有三个实例域用来存放将要操作的数据:name,age,sex;关键字private确保只有Employee类自身的方法才能够访问到这些实例域,而其它类的方法不能够读写这些域。
②、从构造器开始
先看看Employee的两个构造器:
public Employee() {
super();
// TODO Auto-generated constructor stub
}
public Employee(String name, int age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
已经看到,构造器与类同名。前者没有参数,并且是被默认存在的,意思就是就算不手动创建,也自己存在;而带参的就是根据自己的实用情况所创建的构造器。
在构造Employee类的对象时,构造器被运行,以便将实例域初始化为所希望的状态。例如:
package jackWe;
public class EmployeeTest {
public static void main(String[] args) {
Employee employee = new Employee("JackWe", 18, "男");//创建Employee类的实例
employee.getOneHeight();//调用Employee类中的getOneHeight方法
}
}
Employee employee = new Employee("JackWe", 18, "男"); 将会把实例域设置为
name = "JackWe";
age = 18;
sex = "男";
构造器与其它方法有一个重要不同。构造器总是伴随着new操作符的执行被调用,而不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的。
总结一下:
a、构造器与类同名;
b、每个类可以有一个以上的构造器;
c、构造器可以有0个、1个或1个以上的参数;
d、构造器没有返回值;
e、构造器总是伴随着new操作符一起调用。
③、封装的优点
最后,在仔细的看一下非常简单的getName方法、getAge方法和getSex方法。这些都是典型的访问器方法。由于它们只返回实例域值,因此又被称为域访问器。
将name,age和sex域标记为publlic,以此来取代独立的访问器方法会不会更容易些呢?估计很多人在刚刚接触的时候都有这种疑问。
可以分析一下,关键在与name是一个只读域,一旦在构造器中设置完毕,就没有任何一个方法可以对它进行修改,这样来确保name域不会受到外界的干扰。如果name域是public的,破坏这个值域的捣乱者就有可能出没在任何地方。
在有些时候,往往需要获得或设置实例域的值。因此,应该提供下面三项内容:
a、一个私有的数据域;
b、一个公有的域访问器方法;
c、一个公有的域更改器方法。
这样做要比提供一个简单的公有数据域简单些,但却有着下列明显的好处:
1)、可以改变内部实现,除了该类的方法之外,不会影响其它代码。
2)、更改器方法可以执行错误检查,然而直接对域进行赋值将不会进行这些处理。
Java对象与类—对象与类的更多相关文章
- 规则引擎集成接口(九)Java类对象
Java类对象 右键点击“对象库” —“添加java类对象”,如下图: 弹出窗体,在文本框中输入类的全名“com.flagleader.test.Test”,选择该类型后确定,如下: 显示如下,勾选上 ...
- java类 对象 和构造方法
github地址:https://github.com/lily1010/java_learn/tree/master/dog java中对象和类 java中万物皆对象,比如说动物,里面有猫,狗,鱼等 ...
- JAVA入门第二季 第一章 类和对象
面向对象编程 Object Oriented Programming OOP 第一.什么是类和对象 在具体说明类和对象之前,先说说别的. 眼睛在人类身体上最为有用的器官.如果一个没有了眼睛,这个人与世 ...
- Java基础之一组有用的类——Observable和Observer对象(Horrific)
控制台程序. Obserable类提供了一个有趣的机制,可以把类对象中发生的改变通知给许多其他类对象. 对于可以观察的对象来说,类定义中需要使用java.util.Observable类.只需要简单地 ...
- java 获取实体类对象属性值的方法
在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...
- ResultSet转成java类对象
在做web开发时遇到一个事情: 需要从mysql数据表中查询数据并遍历查询结果 这样最简单的方式是:查询到结果根据表中字段列表的顺序来一个个获取字段,但这样需要记住字段的顺序,操作起来不是那么方便.因 ...
- android NDK 实用学习(三)- java端类对象的构造及使用
1,读此文章前我假设你已经读过: android NDK 实用学习-获取java端类及其类变量 android NDK 实用学习-java端对象成员赋值和获取对象成员值 2,java端类对象的构造: ...
- java定义类 对象,引用,指针
java是根据面向对象编程,因此有类和对象的概念,类分为普通类与抽象类. 一.定义类 类由N个 构造器 成员变量 方法组成,可以不定义,也可以根据语法定义N个. [修饰符] class 类名{ 构 ...
- Java反射 - 1(得到类对象的几种方法,调用方法,得到包下的所有类)
通过反射获得对象的方法 准备工作: 有一个User类如下 package o1; /** * Created by yesiming on 16-11-19. */ public class User ...
- JAVA之等号、传类对象参数与c++的区别
在JAVA中用等号对类对象进行赋值,实际上操作的是对象的地址. eg: package MyText; class ClassA { int value; public void seta(int v ...
随机推荐
- python爬虫学习01--电子书爬取
python爬虫学习01--电子书爬取 1.获取网页信息 import requests #导入requests库 ''' 获取网页信息 ''' if __name__ == '__main__': ...
- Unity3D Demo项目开发记录
前言 经过一段时间的学习与实际开发,unity3D也勉强算是强行入门了,正所谓好记性不如烂笔头,更何况本人并非专业从事unity3D开发,会一点C#但也并不熟悉,为了避免后期遗忘,因此特意整理了一个D ...
- TCP 和 UDP,哪个更胜一筹
作为 TCP/IP 中两个最具有代表性的传输层协议,TCP 和 UDP 经常被拿出来相互比较.这些协议具体有什么区别,又是什么作用呢? 在 IT 圈混迹多年的小伙伴们,对 TCP 和 UDP 肯定再熟 ...
- 题解 洛谷 P5163 【WD与地图】
首先将操作倒序,把删边转化为加边.先考虑若边是无向边,条件为连通,要怎么处理. 可以用并查集来维护连通性,对每个连通块维护一颗权值线段树,连通块的合并用线段树合并来实现,线段树同时也支持了修改点权. ...
- 题解 洛谷 P3825 【[NOI2017]游戏】
从题面中四元组\((i,h_i,j,h_j)\)限制选择车子型号,不难想到这题要用\(2-SAT\)解决. 考虑转化为\(2-SAT\)模型,发现除地图\(x\)外,其他地图都只有两种车子型号可以参加 ...
- jq转盘抽奖
之前项目的时候要写一个抽奖,自己写了以后就记录一下. 先是html <div class="turntable_zhan"> <img class="y ...
- jenkins集群(二)(master --> slave) -- allure自动化测试报告部署
一.前提 1.环境 1)已经部署好了jenkins环境,包括jenkins的“全局工具配置”也配好了. 2.master与slave的简单的概念 1)master:jenkins部署所在的机器 2)s ...
- jmeter接口测试 -- 设置跨线程组的全局变量
一.操作步骤 1.先提取被设置的变量 2.再用 [线程组] - [后置处理] - [BeanShell PostProcessor]来设置跨线程的全局变量:${__setProperty(新变量名,$ ...
- 附025.kubeadm部署Kubernetes更新证书
一 查看证书 1.1 查看过期时间-方式一 1 [root@master01 ~]# tree /etc/kubernetes/pki/ 2 [root@master01 ~]# for tls in ...
- 前端学习(十四):CSS布局
进击のpython ***** 前端学习--CSS布局 每个模块的相关央视就算是进本上都完成了,但是,这些模块想放在不同的位置 横着放,竖着放,斜着放... ... 想怎么放怎么放 那就用到了今天要说 ...