当前课程知识点:Java程序设计 > 第二章 类与对象 > 2.2-2-数据成员 > 2.2-2-数据成员
大家好
欢迎回来继续学习
java语言程序设计
这一节我们来学习
如何在类里面声明数据成员
数据成员呢
是用来表示对象的状态
也可以用来存放
在整个类的所有对象之间
要共享的数据
后面我要紧接着
就给大家介绍
有实例的成员
有类的成员
那么类里面定义的
这些数据成员呢
他的类型
可以是任何数据类型的
比如说基本类型的变量
或者是另外一个类的对象
数组 这些都可以
现在我们来看一下
数据成员他声明的语法形式
同样这里有很多关键字
都是放在方括号里面的
放在方括号里面的关键字呢
都是可有可无的
也叫做可选项
在需要的时候才写它
不需要的时候
可以不用写
我们刚开始的时候呢
涉及到这个关键字呢
也比较少
大多数关键字呢
在后面呢
都会给大家在后续章节中介绍
好 那我们看到
必须有的内容是什么呢
必须有的内容是数据类型
你要说明
这个数据类型刚才说了
可以是基本类型的
也可以是类类型
还可以是数组这些
因为数组也是对象嘛
在数据类型后面呢
就像我们在C语言里面
定义变量 全局变量
局部变量一样
在这里我们在类题里面
定义变量
语法也是这样定义的
那么这里面
关键字public protected private
称为访问控制符
是用来控制
对类成员的访问权限的
static呢
指明这是一个静态成员变量
或者叫做类的变量
在这一章中
我们就要讲的
final指的是这个变量
也就是这个属性的值
是不能被修改的
transien指的是变量
不需要序列化
也就是说当我们后面给大家介绍
这个文件IO的时候呢
就会遇到我们想把整个对象
整体存盘
将来再读取回来
那么这个时候
比如说有一些密码
这样的数据
敏感数据
可能我们不想
把它存到磁盘文件中去
怕泄密
那么这样呢
这个时候我们就可以对这些属性
用transien来修饰
那么存盘的时候
就不会存它
最后这个volatile呢
指的是这个变量呢
他是一个共享变量
好 现在我们来了解一下
实例变量
也叫属于对象的属性
那么实例变量呢
他实际上是用来描述
每个对象的属性的
他从所有的这同类型对象中
抽象出来
每个对象都要有这些属性
那么就把他定义为实例变量
但是对象与对象之间
这个实例变量的值
也就是它的属性的值
往往是不同的
恰恰是这些不同的值
区分此对象与彼对象
我们要访问一个实例变量呢
就要通过对象名去访问
那么语法形式呢
就是对象名点实例变量名
但是是不是对于所有的实例变量
我们都可以这样访问呢
也不是的
还要注意我们稍后
给大家介绍的
这个属性或者是变量的
它的访问控制权限
现在我们来看一个圆类的例子
这个类呢非常简单
我们在其中指定一个圆的半径
然后呢我们另外写一个类
shape tester
来测试来使用这个圆类
当然了
真正的我们要设计一个圆的时候
肯定除了半径
应该还有其他的功能
现在我们先从简单的例子开始
我们看到在这个shape tester类中
测试类中呢
定义了一个main方法
一个主方法
然后在这里
我们构造圆类的对象
步骤是什么呢
先定义一个圆类的引用X
然后用new运算
去获得一个新的圆对象
把他的引用附给X
然后我们输出一下X
以及呢这个半径radius的值
我们想象一下
输出的应该是什么呢
首先输出这个半径是几呢
并没有对他进行初始化
然后我们把X这个对象
整个当字符串输出
又会得到什么呢
我们看一下运行结果
首先我们看到把X这个对象
整个当作字符串输出
看到的还类名
然后后面@
然后呢一串数字
然后这个半径呢
输出了我们看到这是个零
这个零大家应该可以理解
我们前面讲过
在java中
数值类型的变量
如果他没有显示的被初始化的话
他就会默认的初始化为零
而前面这一串是怎么来的呢
是因为所有的类里面
都默认有一个to string方法
这个to string 方法
干点什么事儿呢
他先取得这个类的类名
转成字符串放在这
然后输出一个@符号
然后呢调用这个hash code 的方法
把这个对象的(哈希码)
转成十六进制形式的字符串
这样来输出
那么可以说将一个对象
转成这样的一个形式输出呢
并不是很有意义
没关系
后面的章节呢
我会告诉大家
怎么样去自己写一个to string
覆盖这个已有的to string
让我们可以把这个对象
整个当字符串输出
而且输出的信息呢
按照我们自己期望的意义去输出
现在我们再来看一个
矩形类的例子
这里我们定义了一个矩形类
它的数据呢
有宽和高
这个宽和高呢
在类里面
我们就给了他初始值了
所以在这个测试方法里面呢
测试类的main方法里面
我们构造一个矩形对象的时候
那么这个new的矩形对象
他没有进行初始化
但是呢宽和高不会是
默认的零
因为在类里面
就定义好了初始值了
而这个圆对象呢
跟上一个例题一样
依然是没有初始化
那么他默认初始化为零
这个时候呢
我们将X和Y
都转成字符串来输出
那么我们看到
编译运行以后
得到的两个对象
转成字符串的结果
我在前一个例题里面解释了
是类名@后面是对象的哈希码
那我们看一下
这个时候
在这个程序中
圆和矩形的两个对象
X Y
他们的状态是什么呢
这个圆里面
它的半径是零
而这个矩形呢
他的宽和高有值
但是问题是
你就是再多构造几个矩形对象
他的宽和高的值
也会是一样的
则后面我们学了如何初始化以后
我们就可以让每个对象
诞生的时候
他们的数值不一样
现在呢我们只会做这点事情
那么什么是类变量呢
类变量是为整个类的所有对象
共享的数据
那么这样的数据呢
我们就把它作为类变量
类变量呢
也成为静态变量
要用static关键字来修饰
这样的变量
在整个类中
他只有一个值
他不会存在于每个对象值中
在类中存一份就够了
他是在类初始化的时候
就被初始化的
在什么情况下
我们需要定义类变量
或者静态变量呢
比如说类中所有对象
都相同的这样的共同属性
那么我们可以在类里面
只存一份就可以了
还有呢需要经常共享的数据
或者呢系统中
需要用到的一些常量值
这些我们都可以定义成类变量
他的使用格式呢
我们可以直接通过类名点
类变量名就可以用了
没有对象名也可以
当然我们通过这个类的对象名
去使用他
也没有问题
也可以是对象名
或者是叫实例名点类变量名
都可以使用它
现在我们看看这个例子
在我们前面见过的
这个圆类里面呢
我们增加一个类变量
也叫静态变量
这加了static
这呢定义的是一个常量pi
也就是说这个圆里面的
所有对象
他们都共享这个常量
当然了
计算所有的圆对象的
相关值的时候
用到的圆周率
当然应该是一样的
这种情况下
当我们生成
这个圆类的实例的时候
在每个实例中
是不存这个 pi 的值的
pi 的值呢
他是只存一份
存在这个类中
现在呢我们来进行测试
还是在这个测试类中呢
在他的main方法中
我们构造圆对象
然后引用给了X
我们通过X点π来输出一下
这个π的值
然后接下来呢
我们再用类名
circle点pi
再输出一下pi 的值
我们看看一样不一样
从运行结果
我们看到两次输出是一样的
好 那我们再通过类名点pi
circle点pi
去改变它的值
把它重新附值为3.14
然后我们再用不同的方法
通过对象名去访问pi
通过类名去访问pi
得到的数值还是一样的
这就验证了我前面说的
你访问静态成员的时候
可以用类名去访问
也可以用对象名去访问
好 在这一节呢
我们学习了数据成员
我们在类中
声明的数据成员呢
可以有两类
一类呢是属于每个对象的
叫做实例属性
或者叫做实例变量
另一类呢
是用static的修饰的
属于整个类的
有整个类的所有对象所共享
叫类变量
或者叫类的属性
接下来下一节呢
我们要学习方法成员
-1.0-导学
--1.0-导学
-1.1-Java与面向对象程序设计简介
--第一章 Java语言基础知识--1.1-Java与面向对象程序设计简介
-1.2-基本数据类型与表达式
-第一章 Java语言基础知识--1.2-基本数据类型与表达式
-1.3-数组
--1.3.1-数组
-第一章 Java语言基础知识--1.3-数组
-1.4-算法的流程控制
--第一章 Java语言基础知识--1.4-算法的流程控制
-1.5-第一章小结
-第一章编程练习题
-课件
--外部链接
-Java环境配置、Eclipse使用、Helloworld程序详解
--使用eclipse建立Java项目、编写和运行Java程序
-Java数据类型
--Java整数类型
--Java浮点类型
--数据类型实战
--数据类型转换
--Java强制类型转换精度损失示例与表达式中的数据类型转换
-Java数组
-Java变量
--Java的变量
-命令行参数
--命令行参数的介绍
-2.0-导学
--2.0-导学
-2.1-面向对象方法的特性
--第二章 类与对象--2.1-面向对象方法的特性
-2.2-1-类声明与对象创建
--第二章 类与对象--2.2-1-类声明与对象创建
-2.2-2-数据成员
--第二章 类与对象--2.2-2-数据成员
-2.2-3-方法成员
--第二章 类与对象--2.2-3-方法成员
-2.2-4-包
--2.2-4-包
--第二章 类与对象--2.2-4-包
-2.2-5-类的访问权限控制
--第二章 类与对象--2.2-5-类的访问权限控制
-2.3-1-对象初始化
--第二章 类与对象--2.3-1-对象初始化
-2.3-2-内存回收
--第二章 类与对象--2.3-2-内存回收
-2.4-枚举类
--2.4-枚举类
--第二章 类与对象--2.4-枚举类
-2.5-应用举例
--2.5-应用举例
-2.6-第2章小结
-第二章编程练习题
-课件
--第二章课件
-3.0-导学
--3.0-导学
-3.1.1-3.1.2-类继承的概念和语法
--第三章 类的重用--3.1.1-3.1.2-类继承的概念和语法
-3.1.3-隐藏和覆盖
--第三章 类的重用--3.1.3-隐藏和覆盖
-3.2-Object 类
--第三章 类的重用--3.2-Object 类
-3.3-终结类与终结方法
--第三章 类的重用--3.3-终结类与终结方法
-3.4-抽象类
--3.4-抽象类
--第三章 类的重用--3.4-抽象类
-3.5-泛型
--3.5-泛型
--第三章 类的重用--3.5-泛型
-3.6-类的组合
--3.6-类的组合
-3.7-小结
--3.7-小结
-第三章编程练习题
-课件
--课件
-4.0-导学
--导学
-4.1-接口
--接口
--第四章 接口与多态--4.1-接口
-4.2.1-4.2.2-类型转换
--类型转换
--第四章 接口与多态--4.2.1-4.2.2-类型转换
-4.2.3-方法的查找
--方法的查找
--第四章 接口与多态--4.2.3-方法的查找
-4.3-多态的概念
--多态的概念
--第四章 接口与多态--4.3-多态的概念
-4.4-多态的应用举例
--多态的应用举例
--第四章 接口与多态--4.4-多态的应用举例
-4.5-构造方法与多态性
--构造方法和多态性
--第四章 接口与多态--4.5-构造方法与多态性
-4.6-本章小结
--本章小结
-第四章编程作业
-课件
--课件
-5.0-导学
--5.0-导学
-5.1.1-5.1.2-异常处理的概念
--第五章 输入输出--5.1.1-5.1.2-异常处理的概念
-5.1.3-5.1.5-异常的处理
--第五章 输入输出--5.1.3-5.1.5-异常的处理
-5.2-输入输出流的概念
--输入输出流的概念
--第五章 输入输出--5.2-输入输出流的概念
-5.3.1-写文本文件
--写文本文件
--第五章 输入输出--5.3.1-写文本文件
-5.3.2-读文本文件
--读文本文件
--第五章 输入输出--5.3.2-读文本文件
-5.3.3-写二进制文件
--写二进制文件
--第五章 输入输出--5.3.3-写二进制文件
-5.3.4-读二进制文件
--读二进制文件
-5.3.5-File类
--File类
-5.3.6-处理压缩文件
--处理压缩文件
-5.3.7-对象序列化
--对象序列化
-5.3.8-随机文件读写
--随机文件读写
-5.4-本章小结
--本章小结
-课件
--课件
-6.0-导学
--导学
-6.1-Java集合框架介绍
--第六章 对象群体的组织--6.1-Java集合框架介绍
-6.2-主要接口及常用的实现类
--第六章 对象群体的组织--6.2-主要接口及常用的实现类
-6.3-常用算法
--常用算法
-6.4-数组实用方法
-6.5-基于动态数组的类型(Vector, ArrayList)
--基于动态数组的类型(Vector, ArrayList)
-6.6-遍历Collection
-6.7-Map接口及其实现
-6.8-第6章小结
--第6章小结
-课件
--课件
-7.0-导学
--导学
-7.1-绘图
--绘图
-7.2-Swing基础
--Swing基础
-7.3-Swing的层次
--Swing的层次
-7.4-布局管理
--布局管理
-7.5-内部类
--内部类
-7.6-事件处理的基本概念
-7.7-事件派发机制
--事件派发机制
-7.8-顶层容器
--7.8-顶层容器
-7.9-中间层容器(一)
-7.10-中间层容器(二)
-7.11-原子组件(一)
-7.12-原子组件(二)
-7.13-原子组件(三)
-7.14-其它Swing特性
-7.15-第7章小结
-课件
--课件