java学习笔记3--类与对象的基础
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note3.html,转载请注明源地址。
1、面向对象的程序设计方法概述
面向对象的程序设计
与结构化程序设计方法相比,更符合人类认识现实世界的思维方式,已成为程序设计的主流方向
涉及的主要概念:抽象、封装、继承、多态
对象
现实世界中:万物皆对象,都具有各自的属性,对外界都呈现各自的行为
程序中:一切都是对象,都具有标识 (identity), 属性和行为(方法),通过一个或多个变量来保存其状态,通过方法(method) 实现他的行为
抽象
忽略问题中与当前目标无关的方面,以便更充分地注意与当前目标有关的方面;计算机软件开发中所使用的抽象有:过程抽象和数据抽象
过程抽象:
–-将整个系统的功能划分为若干部分,强调功能完成的过程和步骤,而隐藏其具体的实现
–-任何一个明确定义的功能操作都可被看作单个的实体,尽管这个操作实际上可能由一系列更低级的操作来完成
–-基于过程抽象的两个标准程序设计技术过程:分解、递归技术
–-将需要处理的数据和这些数据上的操作结合在一起,抽象成不同的抽象数据类型
–-每个抽象数据类型既包含了数据,也包含了针对这些数据的操作
–-相对于过程抽象,数据抽象是更为合理的抽象方法
数据(属性)
int Hour; int Minute; int Second;
方法(行为)
SetTime(); ShowTime();
封装
是一种信息隐蔽技术
利用抽象数据类型将数据和基于数据的操作封装在一起
用户只能看到对象的封装界面信息,对象的内部细节对用户是隐蔽的
封装的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节,只需使用设计者提供的消息来访问对象
继承
是指新的类可以获得已有类(称为超类、基类或父类)的属性和行为,称新类为已有类的派生类(也称为子类)
在继承过程中派生类继承了基类的特性,包括方法和实例变量
派生类也可修改继承的方法或增加新的方法,使之更适合特殊的需要
有助于解决软件的可重用性问题,使程序结构清晰,降低了编码和维护的工作量
PS:Java语言仅支持单继承
多态
一个程序中同名的不同方法共存
主要通过子类对父类方法的覆盖来实现
不同类的对象可以响应同名的消息(方法) ,具体的实现方法却不同
使语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序方法同名问题
2、类与对象
在程序中,对象是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(Class),一个类是对一类对象的描述。类是构造对象的模板,对象是类的具体实例
类的声明
[public] [abstract | final] class 类名称 [extends 父类名称] [implements 接口名称列表] {
变量成员声明及初始化;
方法声明及方法体;
}
class:表明其后声明的是一个类。
extends:如果所声明的类是从某一父类派生而来,那么,父类的名字应写在extends之后
implements:l如果所声明的类要实现某些接口,那么,接口的名字应写在implements之后
修饰符:可以有多个,用来限定类的使用方式
public:表明此类为公有类
abstract:指明此类为抽象类
final:指明此类为终结类
先看一个钟表类的例子:
public class Clock { // 成员变量int hour ;int minute ;int second ;// 成员方法public void setTime(int newH, int newM, int newS) { hour = newH ; minute = newM ; second = news ; }public void showTime() { System.out.println(hour + ":" + minute + ":" + second);} }
对象的声明
格式: 类名 变量名
例如:Clock是已经声明的类名,则下面语句声明的变量aclock将用于存储该类对象的引用:Clock aclock;
声明一个引用变量时并没有对象生成
对象的创建
生成实例的格式:
new <类名>()
例如: aclock=new Clock()
其作用是:
在内存中为此对象分配内存空间
返回对象的引用(reference ,相当于对象的存储地址)
引用变量可以被赋以空值
例如:aclock=null;
数据成员
表示Java类的状态,声明数据成员必须给出变量名及其所属的类型,同时还可以指定其他特性。在一个类中成员变量名是唯一的,数据成员的类型可以是Java中任意的数据类型(简单类型,类,接口,数组)
分为实例变量和类变量
[public | protected | private]
[static][ final][transient] [volatile]
变量数据类型 变量名1[=变量初值],
变量名2[=变量初值], … ;
–格式说明
public、protected、private 为访问控制符
static指明这是一个静态成员变量
final指明变量的值不能被修改
transient指明变量是临时状态
volatile指明变量是一个共享变量
类变量,也称为静态变量,声明时需加static修饰符,不管类的对象有多少,类变量只存在一份,在整个类中只有一个值,类初始化的同时就被赋值
适用情况:
类中所有对象都相同的属性
经常需要共享的数据
系统中用到的一些常量值
public class Circle { static double PI = 3.14159265; int radius; } public class ClassVariableTester { public static void main(String args[]) { Circle x = new Circle(); System.out.println(x.PI); System.out.println(Circle.PI); Circle.PI = 3.14; System.out.println(x.PI); System.out.println(Circle.PI); } }
执行结果:
3.14159265
3.14159265
3.14
3.14
实例变量和类变量都可被声明为final
final实例变量必须在每个构造方法结束之前赋初值,以保证使用之前会被初始化
final类变量必须在声明的同时初始化
//将摄氏温度(centigrade)转换成华氏温度(fahrenheit) //转换公式为 fahrenheit = centigrade * 9 / 5 + 32 //除了摄氏温度值及公式中需要的常量值,此功能不依赖于具体的类实例的属性值,因此可声明为类方法 //转换方法centigradeToFahrenheit放在类Converter中 public class Converter { public static int centigradeToFahrenheit(int cent) { return (cent * 9 / 5 + 32); } } //方法调用 Converter.centigradeToFahrenheit(40);
get方法
功能是取得属性变量的值,get方法名以“get”开头,后面是实例变量的名字,一般具有以下格式:
public <fieldType> get<FieldName>() {
return <fieldName>;
}
public int getRadius(){return radius; }
set方法
功能是修改属性变量的值,set方法名以“set”开头,后面是实例变量的名字,一般具有以下格式:
public void set<FieldName>(<fieldType> <paramName>) {
<fieldName> = <paramName>;
}
public void setRadius(int r){radius = r; }
关键字this的使用
如果形式参数名与实例变量名相同,则需要在实例变量名之前加this关键字,否则系统会将实例变量当成形式参数。
在上面的set方法中,如果形式参数为radius,则需要在成员变量radius之前加上关键字this。代码如下:
public void setRadius(int radius){this.radius = radius; }
参考资料:
《java程序设计》--清华大学
java学习笔记3--类与对象的基础相关推荐
- Java学习笔记_类和对象
·类:是一组相关属性和行为的集合,可以看成是一类事务的模板,使用事物的属性特征和行为特征来描述该类事物. ·属性:该事物的状态信息 ·行为:就是该事物能够做什么 ·对象:一类事物的具体体现,对象是类的 ...
- Java学习笔记1——类和对象
面向对象 对象:万物皆对象 面向对象 类:模子,属性+方法,类是对象的类型,是具有相同属性和方法的一组对象的集合 对象属性:对象拥有的各种特征,"对象有什么" 对象方法:对象执行的 ...
- Head First Java学习笔记(2):类与对象
类 1.类是定义同一类所有对象的变量和方法的蓝图或原型. 2.实例变量的值由类的每个实例提供.当创建类的实例时,就创建了这种类型的一个对象,然后系统为类定义的实例变量分配内存.然后可以调用对象的实例方 ...
- JAVA学习笔记(类的学习)
JAVA学习笔记(类的学习) 类声明和类体 构造方法和对象创建 对象的引用和实体 成员变量 方法 方法重载 关键字this 包 import语句 访问权限 对象数组 反编译和文档生成器 JAR文件 1 ...
- Python学习笔记 (类与对象)
Python学习笔记 (类与对象) 1.类与对象 面向对象编程语言类: 一个模板, (人类)-是一个抽象的, 没有实体的对象: (eg: 张三, 李四) 属性: (表示这类东西的特征, 眼睛, 嘴巴, ...
- java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...
六.Java类 1. Java中用关键字class来创建类. 2. 类中属性和方法称为类的成员;类的声明和方法要在同一个文件内,不同于C++. 3. 类的定义: [] class [extend ...
- 冰冰学习笔记:类与对象(上)
欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...
- 冰冰学习笔记:类与对象(下)
欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...
- Java学习笔记六 常用API对象二
1.基本数据类型对象包装类:见下图 1 public class Test { 2 public static void main(String[] args){ 3 Demo(); 4 toStri ...
- Java读书笔记05 类与对象
本文为java中对象与类等的基本知识,包括方法.构造.析构.静态域.初始化.包.路径等. 对象与对象变量 在Java中,任何对象变量的值都是对存储在另外一处的一个对象的引用.new操作符的返回值也是一 ...
最新文章
- 51nod 1065 最小正字段和 解决办法:set存前缀和,二分插入和二分查找
- Yabbly:让经验缔结因果
- 【HDOJ】1890 Robotic Sort
- Java程序运行纳秒级差值计算
- 高级数据结构与算法 | 红黑树(Red-Black Tree)
- SAP Spartacus cxOutlet 里的 templatesRefs 的填充逻辑
- 关于jstl.jar引用问题及解决方法
- 精读《手写 SQL 编译器 - 回溯》
- [深度学习]为什么梯度反方向是函数值下降最快的方向?
- 父类、派生类、方法重写、实例化后的执行顺序
- java基础知识汇总4
- 数据科学之:消费者资产分析
- vmstat工具详解
- 步进电机可以连续运转吗?
- 实验三:从整理上理解进程创建、可执行文件的加载和进程执行进程切换,重点理解分析fork、execve和进程切换...
- 适配器模式(Adapter Pattern)
- 河南财经政法大学计算机基础,河南财经政法大学就“忘开必修课”情况说明
- 阿里安全人机行为识别比赛 前五名队伍分享
- 【手机】手机代码查询命令大集合
- 图鉴| 互联网男女家门口贴什么春联?
热门文章
- Spring Boot实战系列《六》:人事管理系统的登录设计
- 张小龙的小程序革命,复盘731天,用“小”来改变这个世界
- 如何构建 FinTech 科学反欺诈体系|架构师实践日
- VGG-16 prototxt
- 今日新鲜事python_今日新鲜事励志的句子致自己
- Spring-AOP 切点/切面类型和创建切面
- Spring-国际化信息02-MessageSource接口
- Linux-locate/slocate命令
- 学习笔记Hadoop(十五)—— MapReduce编程进阶
- Python编程:Tkinter图形界面设计(1)