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学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态 例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...
- Java学习笔记 04 类和对象
一.类和对象的概念 类 >>具有相同属性和行为的一类实体 对象 >>实物存在的实体.通常会将对象划分为两个部分,即静态部分和动态部分.静态部分指的是不能动的部分,被称为属性,任 ...
- Java学习笔记之——类与对象
1.参数的传递方式 1)值传递 2)引用传递 2.类和对象: (1)类的定义: public class 类名{ 类型 属性1: 类型 属性2: ……… public 返回值类型 方法名1(形参){ ...
- 1.2(java学习笔记)类与对象
对象:是指具体的事物.比如学生 张三,老师 李四,代表一个单一的个体. 比如 学生 张三,这时张三就是具体的对象. 类:将对象中共有特征抽象出,可以理解为某种特性的集合. 世界上的事物可以分解成一 ...
- Java学习笔记——File类之文件管理和读写操作、下载图片
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
- Java学习笔记(2)--- 对象和类入门,java包,this 和 super区别
1.对象和类(Object and class): 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 面对对象编程是java非常重要的一部分,作者本身之前学过c ...
- Java学习笔记9(面象对象9:多态)
多态概述 多态是继封装.继承后,面对对象的第三大特性. 现实事物经常会出现多态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一 ...
- Java 学习笔记 ------第五章 对象封装
本章学习目标: 了解封装的概念与实现 定义类.构造函数与方法 使用方法重载与不定长度自变量 了解static方法 一.Java封装概念 在面向对象程式设计方法中,封装(英语:Encapsulation ...
- 0018 Java学习笔记-面向对象-类的基本要素
类与对象 大街上一个个的人,就是一个个对象 类是对一群对象的抽象,比如人都有性别.年龄.姓名,都会吃饭.睡觉等.姓名性别可以抽象为变量,吃饭睡觉可以抽象为方法,像下面一样定义个类来形容人 public ...
- Java学习笔记(七)——对象
一.类与对象 1.类的定义 类就是模型,确定对象将会拥有的特征(属性)和行为(方法). 2.类的特点 (1)类是对象的类型 (2)具有相同属性和方法的一组对象的集合. 3.对象的属性: 对象具有的各种 ...
随机推荐
- 【转】Serializers 序列化组件
https://www.cnblogs.com/MayDayTime/p/9890582.html 为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON ...
- postman自动生成签名
查看详细图文教程↓ 一.全局变量方式 1. 在全局变量添加key:value分别是autoSign和var sign={toUnicode:function(s){return s.replace(/ ...
- [GYM 100492A] Average Convex Hull 凸包好题
大致题意: 给出一个点集,其中有一个点有相同的几率会被删除,求删除之后的点集够成的凸包上的点的平均数. 首先看到题目,可以考虑枚举删除的点,将其凸包上前后两点以及两点间凸包内所有点构建凸包,因为凸包内 ...
- 用三个线程循环输出ABC
前两天看Java吧有人求助这个问题.想了想并不是很难.今天就顺手实现了一下. 我自己想到的有两种方法,一个是使用synchronized,一个是使用lock. 一.synchronized packa ...
- Python的环境搭建——万丈高楼平地起
Python的环境搭建,远程连接,端口映射,虚拟机 写在正文之前 python语言的开发环境还是相对比较简单的,但是也是有很多需要注意的地方,对于初次接触python或者以前很少用到虚拟环境的朋友来说 ...
- Am335x u-boot 代码大概流程
在_面之前的流程和u-boot-spl一样,区别在于_main中. 对于u-boot 2016.03来说 ENTRY(_main) /* * Set up initial C runtime envi ...
- 浅谈MVVM模式和MVP模式——Vue.js向
浅谈MVVM模式和MVP模式--Vue.js向 传统前端开发的MVP模式 MVP开发模式的理解过程 首先代码分为三层: model层(数据层), presenter层(控制层/业务逻辑相关) view ...
- TCP/IP——ARP与RARP简记
ARP(Address Resolution Protocol):ARP为IP地址到对应的硬件地址(MAC)之间提供动态映射.这个过程是自动完成的,一般应用程序用户和系统管理员不必要关心. ARP高速 ...
- dp 动规 最佳加法表达式
最佳加法表达式 有一个由1..9组成的数字串.问如果将m个加号插入到这个数字串中,在各种可能形成的表达式中,值最小的那个表达式的值是多少 解题思路 假定数字串长度是n,添完加号后,表达式的最后一个加号 ...
- 在学习HTML——form表单中的label标签时的一点小体会
在我啃了一遍书本之后,开始了在慕课看视频的过程,从最开始的HTML+CSS的基础课程看起,在第5-9小节讲到了form表单的label标签, 首先看一下慕课的讲解: label 标签不会向用户呈现任 ...