面向对象编程主要有三个特征:封装、继承和多态。

封装

一个简单的问题

一个能输出圆的面积的Java应用程序。

public class ComputerCircleArea {

public static void main(String args[]) {

double radius;     //半径

double area;       //面积

radius=163.16;

area=3.14*radius *radius; //计算面积

System.out.printf("半径是%5.3f的园的面积:\n%5.3f\n",radius,area);

}

}

其实, 假设其它Java应用程序也想计算圆的面积。相同须要知道计算圆面积的算法。即也须要编写和这里相同多的代码。

如今提出例如以下问题:

是否能将和圆有关的数据以及计算圆面积的代码进行封装。使得须要计算圆面积的Java应用程序的主类无需编写计算面积的代码就能够计算出圆的面积呢?

面向对象的一个重要思想就是通过抽象得到类,即将某些数据以及针对这些数据上的操作封装在一个类中。也就是说。抽象的关键点有两点一是数据,二是数据上的操作。

我们对所观察的圆做例如以下抽象:

☃圆具有半径之属性。

☃能够使用半径计算出圆的面积。

如今依据如上的抽象,编写出例如以下的Circle类。

class Circle {

double radius;      //圆的半径

double getArea() {   //计算面积的方法

double area=3.14*radius*radius;

return area;

}

}

(1)类声明:上述代码第一行中的class Circle称作类声明。Circle是类名。

(2)类体:类声明之后的一对大括号"{"。"}"以及它们之间的内容称作类体,大括号之间的内容称作类体的内容。

下面将在一个Java应用程序的主类中使用Circle类创建对象。该对象能够完毕计算圆面积的任务,而使用该对象的Java应用程序的主类,无需知道计算圆面积的算法就能够计算出圆的面积。

因为类也是一种数据类型。因此能够使用类来声明一个变量,那么,在Java语言中,用类声明的变量就称之为一个对象。

◆用Circle声明一个名字为circle的对象的代码例如以下:

Circle circle;

◆为Circle类声明的circle对象分配变量的代码例如以下:

circle = new Circle();

◆对象通过使用“.”运算符操作自己的变量和调用方法。

对象操作自己的变量的的格式为:对象.变量;

比如,circle.radius=100;

◆调用方法的格式为: 对象.方法;

比如,circle.getArea();

类是组成Java程序的基本要素。类封装了一类对象的状态和方法。

类是用来定义对象的模板。

类的实现包含两部分:类声明和类体。

基本格式为:

class 类名 {

类体的内容

}

class是keyword,用来定义类。

"class  类名" 是类的声明部分。类名必须是合法的Java标识符。

两个大括号以及之间的内容是类体。

类声明

◆类声明 : class  类名

比如:

class Retangle {

… …

}

当中的“class Retangle”称作类声明;“Retangle”是类名。

◆  给类命名时,遵守下列编程风格(这不是语法要求的,但应当遵守):

(1) 假设类名使用拉丁字母,那么名字的首字母使用大写字母,如。

(2) 类名最好easy识别、见名知意。当类名由几个“单词”复合而成时,每一个单词的首字母使用大写。

类体

◆ 类声明之后的一对大括号“{”,“}”以及它们之间的内容称作类体,大括号之间的内容称作类体的内容。

◆类体的内容由两部分构:

一部分是变量的声明。用来刻画属性;

还有一部分是方法的定义,用来刻画功能。

以下是一个类名为Retangle的类,

类体内容的变量声明部分给出了两个double类型的变量width和heightr。

方法定义部分定义了getArea()方法。

class Rectangle {

double width;                //变量声明部分,矩形的宽

double height;              //变量声明部分,矩形的高

double getArea() {       //定义计算面积的方法

return width*height;

}

}

成员变量和局部变量

类体分为两部分:一部分是变量的声明,还有一部分是方法的定义。

类体中变量声明部分所声明的变量被称作类的成员变量。

在方法体中声明的变量和方法的參数被称作局部变量。

1.成员变量的类型:成员变量的类型能够是Java中的不论什么一种数据类型,包含基本类型整型、浮点型、字符型。引用类型:数组、对象和接口(对象和接口见兴许内容)。

2.成员变量的有效范围:成员变量在整个类内都有效,其有效性与它在类体中书写的先后位置无关。

3.编程风格

(1)一行仅仅声明一个变量。

(2)变量的名字符合标识符规定。

(3)变量名字见名知意。避免easy混淆的变量名字。

方法

类体分为两部分:一部分是变量的声明,还有一部分是方法的定义。

方法的定义包含两部分:方法声明和方法体。一般格式为:

方法声明部分 {

方法体的内容

}

1.方法声明     方法声明包含方法名和方法的返回类型,如:

double getArea() {

return width*height;

}

关注方法的返回类型、方法的參数、方法的名字

2.方法体

方法声明之后的一对大括号"{" 。"}"以及之间的内容称作方法的方法体。方法体的内容包含局部变量的声明和Java语句。

在方法体中声明的变量和方法的參数被称作局部变量。

3.区分成员变量和局部变量

假设局部变量的名字与成员变量的名字同样。则成员变量被隐藏,即这个成员变量在这种方法内临时失效。

须要注意的问题

类体的内容由两部分构成:一部分是变量的声明,还有一部分是方法的定义。

对成员变量的操作仅仅能放在方法中。方法能够对成员变量和该方法体中声明的局部变量进行操作。

在声明成员变量时能够同一时候赋予初值,可是不能够在类体中有单独的赋值语句(类体中不能够有变量的声明和方法的定义以外的其他语句)。

class A {

int a=12;

float b=12.56f;

}

可是不能够这样做:

class A {

int a;

float b;

a=12;     //非法。这是赋值语句(语句不是变量的声明,仅仅能出如今方法体中)

b=12.56f;  //非法

}

类的UML图

UML(Unified Modeling Language Diagram)图属于结构图。常被用于描写叙述一个系统的静态结构。

一个UML中通常包括有类(Class)的UML图,接口(Interface)的UML图以及泛化关系(Generalization)的UML图、关联关系(Association)的UML图、依赖关系(Dependency)的UML图和实现关系(Realization)的UML图。

在类的UML图中,使用一个长方形描写叙述一个类的主要构成,将长方形垂直地分为三层。

第1层是名字层;

第2层是变量层,也称属性层;

第3层是方法层,也称操作层。

类与Java应用程序的基本结构

一个Java应用程序(也称为一个project)是由若干个类所构成,这些类能够在一个源文件里,也能够分布在若干个源文件里。

Java同意在一个Java源文件里编写多个类,但当中的多个类至多仅仅能有一个类使用public修饰。

假设源文件里有多个类,但没有public类,那么源文件的名字仅仅要和某个类的名字同样,而且扩展名是.java就能够了。

假设有一个类是public类,那么源文件的名字必须与这个类的名字全然同样,扩展名是.java。编译源文件将生成多个扩展名为.class的字节码文件。每一个字节码文件的名字与源文件里相应的类的名字同样,这些字节码文件被存放在与源文件同样的文件夹中 。

构造方法与对象的创建

类是面向对象语言中最重用的一种数据类型,能够用它来声明变量。

在面向对象语言中,用类声明的变量被称作对象。

和基本数据类型不同,在用类声明对象后,还必需要创建对象,即为声明的对象分配变量(确定对象所具有的属性),当使用一个类创建一个对象时。也称给出了这个类的一个实例。通俗的讲。类是创建对象的“模板”,没有类就没有对象。

构造方法和对象的创建密切相关 。

构造方法

构造方法是一种特殊方法。它的名字必须与它所在的类的名字全然同样。并且没有类型。

同意一个类中编写若干个构造方法,但必须保证他们的參数不同。即參数的个数不同。或者是參数的类型不同。

须要注意的是

(1) 假设类中没有编写构造方法,系统会默认该类仅仅有一个构造方法。该默认的构造方法是无參数的。且方法体中没有语句。

(2)假设类里定义了一个或多个构造方法,那么Java不提供默认的构造方法 。

创建对象

1.对象的声明    一般格式为:

类的名字  对象名字;

如:Rectangle rectOne;

这里Rectangle是一个类的名字。rectOne是声明的对象的名字。

2.为声明的对象分配内存

使用new运算符和类的构造方法为声明的对象分配变量,即创建对象。假设类中没有构造方法,系统会调用默认的构造方法。

如: rectOne = new Rectangle();

3.对象的内存模型

(1)声明对象时的内存模型

(2)对象分配内存后的内存模型

4.创建多个不同的对象

使用对象

对象不仅能够操作自己的变量改变状态,并且能调用类中的方法产生一定的行为。

通过使用运算符“.”,对象能够实现对自己的变量訪问和方法的调用。

1.对象操作自己的变量(对象的属性)

对象创建之后。就有了自己的变量。即对象的实体。通过使用运算符“.”,对象能够实现对自己的变量的訪问,訪问格式为:对象.变量;

2.对象调用类中的方法(对象的功能)

对象创建之后,能够使用运算符“.”调用创建它的类中的方法。从而产生一定的行为功能。调用格式为:   对象.方法;

3.体现封装

当对象调用方法时,方法中出现的成员变量就是指分配给该对象的变量。

样例3

rectOne.getArea();

rectTwo.getArea();

注:当对象调用方法时,方法中的局部变量被分配内存空间。方法运行完成,局部变量即刻释放内存。须要注意的是,局部变量声明时假设没有初始化,就没有默认值,因此在使用局部变量之前,要事先为其赋值。

对象的引用和实体

1.避免使用空对象: 没有实体的对象称作空对象。空对象不能使用,即不能让一个空对象去调用方法产生行为。

2.垃圾收集:  一个类声明的两个对象假设具有同样的引用,那么二者就具有全然同样的实体。

class Point {

int x,y;

void setXY(int m,int n) {

x = m;

y = n;

}

}

public class E {

public static void main(String args[]) {

Point p1,p2;

p1 = new Point();

p2 = new Point();

System.out.println("p1的引用:"+p1);

System.out.println("p2的引用:"+p2);

p1.setXY(1111,2222);

p2.setXY(-100,-200);

System.out.println("p1的x,y坐标:"+p1.x+","+p1.y);

System.out.println("p2的x,y坐标:"+p2.x+","+p2.y);

p1 = p2;

System.out.println("将p2的引用赋给p1后:");

System.out.println("p1的引用:"+p1);

System.out.println("p2的引用:"+p2);

System.out.println("p1的x,y坐标:"+p1.x+","+p1.y);

System.out.println("p2的x,y坐标:"+p2.x+","+p2.y);

}

}

參数传值

方法中最重要的部分之中的一个就是方法的參数。參数属于局部变量,当对象调用方法时,參数被分配内存空间,并要求调用者向參数专递值,即方法被调用时。參数变量必须有详细的值。

传值机制

在Java中,方法的全部參数都是“传值”的,也就是说,方法中參数变量的值是调用者指定的值的拷贝。

比如,假设向方法的int型參数x传递一个int值,那么參数x得到的值是传递的值的拷贝。

基本数据类型參数的传值

对于基本数据类型的參数,向该參数传递的值的级别不能够高于该參数的级别 。

比方。不能够向int型參数传递一个float值,但能够向double型參数传递一个float值。

在前面的样例4中有,对象调用setXY(int m,int n)设置自己的x,y坐标值,因此,对象在调用setXY(int m,int n)方法时,必须向方法的參数m和n传递值。

引用类型參数的传值

当參数是引用类型时。“传值”传递的是变量中存放的“引用”,而不是变量所引用的实体。

对象的组合

类的成员变量能够是Java同意的不论什么数据类型,因此,一个类能够把对象作为自己的成员变量,假设用这种类创建对象,那么该对象中就会有其他对象,也就是说该对象将其他对象作为自己的组成部分(这就是人们常说的Has-A)。

圆锥体

对圆锥体作一个抽象。属性:底圆。高

  功能:计算体积

圆锥体的底圆应当是一个对象。比方Circle类声明的对象。圆锥体的高能够是double型的变量,即圆锥体将Circle类的对象作为自己的成员。

关联关系和依赖关系的UML图

1.关联关系:  假设A类中成员变量是用B类声明的对象,那么A和B的关系是关联关系,称A关联于B或A组合了B。

假设A关联于B,那么UML通过使用一个实线连A和B的UML图,实线的起始端是A的UML图。终点端是B的UML图。但终点端使用一个指向B的UML图的方向箭头表示实线的结束。

2.依赖关系:    假设A类中某个方法的參数是用B类声明的对象或某个方法返回的数据类型是B类对象,那么A和B的关系是依赖关系,称A依赖于B。

假设A依赖于B,那么UML通过使用一个虚线连A和B的UML图,虚线的起始端是A的UML图,终点端是B的UML图。但终点端使用一个指向B的UML图的方向箭头表示虚线的结束。

实例成员与类成员

实例变量和类变量的声明

类的成员变量可细分为实例变量和类变量。

在声明成员变量时,用keywordstatic给予修饰的称作类变量。否则称作实例变量(类变量也称为static变量,静态变量).

比如:

class Dog {

float x;      //实例变量

static int y;   //类变量

}

Dog类中,x是实例变量,而y是类变量。

须要注意的是static需放在变量的类型的前面。

实例变量和类变量的差别

1.不同对象的实例变量互不同样

2.全部对象共享类变量

3.通过类名直接訪问类变量

实例方法和类方法的定义

类中的方法也可分为实例方法和类方法。方法

声明时,方法

类型前面不加keywordstatic修饰的是实例方法、加

statickeyword修饰的是类方法(静态方法)。

类体 java_java中的类与对象相关推荐

  1. .class与.java_Java中Class类的作用与深入理解

    Java中Class类的作用与深入理解 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识.这个信息跟踪着每个对象所属的类.JVM利用运行时信息选择相应的方法执行.而保存 ...

  2. calendar java_java中Calendar类的使用讲解

    Calendar类是我们在工作中经常用到时间相关的一个工具类:比如月初.月末.年初.年末.指定月份所在季度的季末等操作,对它有更深入的了解,在工作中会起到事半功倍的效果,下面就来了解一下吧!!! ** ...

  3. java color类 蓝色_java中Color类的简单总结

    标签: java中Color类的简单总结 1.颜色的常识 任何颜色都是由三原色组成(RGB),JAVA中支持224为彩色,即红绿蓝分量取值 介于0-255之间(8位表示) 2.Color类中的常量 p ...

  4. java中string类相等_Java中String类的常见面试题

    第一题:==与equals()的区别 1.判断定义为String类型的s1和s2是否相等 String s1 = "abc"; String s2 = "abc" ...

  5. python新式类和经典类区别_Python中新式类和经典类的区别,钻石继承

    1)首先,写法不一样: class A: pass class B(object): 2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索. 3)新式类更符合OOP编程思想,统一了pyt ...

  6. python实例属性与类属性_Python中的类属性和实例属性引发的一个坑-续

    上篇文章Python 中的类属性和实例属性,我们探讨了类属性和实例属性引发的一个小坑.总结了类属性和实例属性的区别如下:类属性可以被类和实例调用,实例属性只能被实例调用 类属性不会随着实例的调用而改变 ...

  7. 计算机网络中的c类地址,计算机网络中C类地址的子网掩码是哪个

    计算机网络中C类地址的子网掩码是哪个 发布时间:2021-05-31 14:12:45 来源:亿速云 阅读:65 作者:小新 这篇文章给大家分享的是有关计算机网络中C类地址的子网掩码是哪个的内容.小编 ...

  8. dateformat java_java中Dateformat类的详细使用(详解)

    DateFormat其本身是一个抽象类,SimpleDateFormat 类是DateFormat类的子类,一般情况下来讲DateFormat类很少会直接使用,而都使用SimpleDateFormat ...

  9. a类怎么引用b类java_Java中A类的数组如何传入B类???急

    public class Test { public static void main(String[] args) { //方法一:引用传递 //创建A对象并给数组赋值 A a = new A(); ...

最新文章

  1. java基础-数据类型
  2. python模块调用的用法_如何使用Python语言中的random模块调用方法
  3. 【深度学习】深度学习之Pytorch基础教程!
  4. BCrypt加密怎么存入数据库_第6天 密码加密与微服务鉴权JWT(下)
  5. Python3.7模块之hashlib
  6. ajax怎么在html与php中使用,如何使用ajax和php将数据从数据库表放到html表
  7. linux学习-将seafile启动脚本设置为开机启动服务
  8. python--修改默认递归层级
  9. springboot07多环境切换
  10. jspSmartUpload 组件的使用方法
  11. Matab六自由度机械臂建模的偷懒方法
  12. 用公式编辑器打的公式变大了怎么办?
  13. 下城投 × 奇点云 |「数智城投驾驶舱」,打造转型示范新样板
  14. Handler简单介绍
  15. pyinstaller 打包附带DLL
  16. Liferay Portal 7.2 CE GA1 发布
  17. android.telex 涉及技术整理
  18. Web前端技术基础实验报告二之格式化文本、段落与列表
  19. python视频行人检测_python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
  20. 增量本构模型和全量本构模型

热门文章

  1. 火狐浏览器所有历史版本下载地址
  2. 怎么用html做寻找宝藏游戏,原神寻找宝藏任务怎么做 璃月寻宝隐藏任务攻略
  3. python实现贪心算法经典案例
  4. 好用的蓝牙耳机有哪些推荐?2022蓝牙耳机性价比之王
  5. 飞升前后1-150升级经验一览表
  6. hive 范例_以人为本的网络范例
  7. html如何自动调整边框大小,css边框怎样设置长度?
  8. try块的三种组合方式
  9. 基于粒子群优化堆叠去噪自编码器(PSO-SDAE)的时间序列预测
  10. 为Oracle 服务器和客户端配置网络数据加密和完整性