Java面向对象
来源:互联网 发布:单身比例 知乎 编辑:程序博客网 时间:2024/06/10 16:22
类的定义
public class Animal
{
public int legs;
public void eat(){
System.out.println(“Eating.”);
}
public void move(){
System.out.println(“Moving.”);
}
}
- legs是类的属性,也叫类 成员 变量 。
- eat,move是方法也叫类的成员 函数。
声明类
语法格式:
[< 修饰符>] class< 类名>
{
[<属性声明>]
[<构造器声明>]
[<方法声明>]
}
说明:修饰符public:类可以被任意访问
类的正文要用{ }括起来
举例:
publicclass Person{
private int age ; //声明私有变量 age
public void showAge(int i) { //声明方法showAge
age = i;
}
}
声明属性
语法格式:
[<修饰符>] 类型 < 属性名> [=初值] ;
说明:修饰符private: 该属性只能由该类的方法访问。
修饰符 public: 该属性可以被该类以外的方法访问。
类型:任何基本类型,如int、boolean或任何类。
举例:
public class Person{
private int age; //声明private变量 age
public String name = “Lila”; //声明public变量 name
}
属性有时也称为:数据成员(数据),成员变量(变量)
声明方法
语法格式:
<修饰符> <返回类型> <方法名>([<参数表>]) {
[< 语句>]
}
说明:修饰符:public,private,protected 等。
返回类型:return语句传递返回值。没有返回值:void。
举例:
publicclass Person{
private int age;
public int getAge() { return age;} //声明方法getAge
public void setAge(int i) { //声明方法setAge
age = i; //将参数i的值赋给类的成员变量age
}
}
方法有时也称为:成员函数(函数)
对象创建及使用
Ø 使用 new +构造方法 创建一个新的对象;
Ø 使用 “对象名.对象成员” 的方式访问对象成员(包括属性和方法);
Ø 如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰。
v 类的访问机制:
v 在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(有一个例外)
v 在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。
对象生命周期
匿名对象
l 我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象,如:new Person().shout();
l 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
l 我们经常将匿名对象作为实参传递给一个函数调用。
构造器
构造方法的特征
– 它具有与类相同的名称;
– 它不含返回值;
– 注意:在构造方法里不含返回值的概念是不同于“void”的,在定义构造方法时加了“void”,结果这个方法就不再被自动调了。
l 构造方法的作用:当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。
默认构造器
l Java语言中,每个类都至少有一个构造方法;
l 如果类的定义者没有显式的定义任何构造方法,系统将自动提供一个默认的构造方法:
– 默认构造方法没有参数
– 默认构造方法没有方法体
– 默认的构造方法:Animal(){}
l 所以:不编写构造方法就能用newXxx()创建类的实例。
l Java类中,一旦类的定义者显式定义了一个或多个构造方法,系统将不再提供默认的构造方法;
l 构造器的主要作用:利用构造器参数初始化对象的属性。
Person p = new Person(“Tom”,18) 的内存状态变化过程分析:
函数
返回值类型函数名(参数类型形式参数1,参数类型形式参数2,….)
{
程序代码
return 返回值;
}
其中:
形式参数:在方法被调用时用于接收外部传入的数据的变量。
参数类型:就是该形式参数的数据类型。
返回值:方法在执行完毕后返还给调用它的程序的数据。
返回值类型:函数要返回的结果的数据类型。
实参:调用函数时实际传给函数形式参数的数据。
如何理解函数返回值类型为void的情况
函数重载
函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可。
- 在同一个类中可以定义多个同名方法—方法名重载(overload)
publicclass PrintStream{
publicvoid print(int i) {……}
publicvoid print(float f) {……}
publicvoid print(String s) {……}
}
- 重载方法的参数列表必须不同
- 重载方法的返回值类型可以相同,也可以不同
- 调用时根据方法的参数类型来区别。
print(3);print(1.2f);print(“hello!”);
构造方法重载
l 构造方法一般用来创建对象的同时初始化对象。如
class Person{
Stringname;
intage;
publicPerson(String n , int a){ name=n;age=a;}
}
l 构造方法重载使得对象的创建更加灵活,方便创建各种不同的对象。
构造方法重载举例:
public class Person{
public Person(String name, int age, Date d) {this(name,age);}
public Person(String name, int age) {…}
public Person(String name, Date d) {…}
public Person(){…}
}
- 构造方法重载,参数列表必须不同
this
l 如果func2方法被调用 ,一定是事先已经有了一个存在的对象,func2被作为那个对象的方法被使用。
l 在func2内部能引用别的对象 ,同样也能引用func2所属的那个对象。
l 在func2中,自己所属的那个对象的引用名称是什么呢?
l this关键字在java程序里的作用和它的词义很接近,它在函数内部就是这个函数所属的对象的引用变量。
l 每个成员方法内部,都有一个this引用变量,指向调用这个方法的对象,类中的成员方法与this之间的关系
源文件布局
软件包
- 包帮助管理大型软件系统:将语义近似的类组织到包中。
- 包可以包含类和子包。
- 例:某航运软件系统包括:一组域对象、GUI和reports子系统
package语句
- package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。它的格式为:
package<顶层包名>[.<子包名>]*;
举例:pack\Test.java
packagep1; //指定类Test属于包p1
public class Test{
public void display(){
System.out.println("in method display()");
}
}
- 包对应于文件系统的目录,package语句中,用‘.’来指明包(目录)的层次;
- 包通常用小写单词,类名首字母通常大写。
import语句
- 为使用定义在不同包中的Java类,需用import语句来引入所需要的类。Import语句告诉编译器到哪里去寻找类。
- 语法格式:
import 包名[.子包名…]. <类名|*>
- 应用举例:
import p1.Test; //import p1.*;表示引入p1包中的所有类
publicclass TestPackage{
public static void main(String args[]){
Test t = new Test(); //Test类在p1包中定义
t.display();
}
}
JDK常用包解释
Java API文档
- API----Application Programming Interface
- JavaAPI文档是一组超文本文件,提供关于Java类(API)的说明信息:
–类层次–类的功能性描述–成员变量列表及详细介绍–构造方法列表及详细介绍–其它方法列表及详细介绍–从父类中继承来的属性及方法列表
- JavaAPI文档按包组织,在某个类的API文档中还提供了指向关联类的API文档的链接
- java----Java面向对象
- java----Java面向对象
- java----Java面向对象
- java----Java面向对象
- java----Java面向对象
- java----Java面向对象
- 【java】java面向对象
- 【Java】Java面向对象
- java面向对象(一) 了解面向对象
- Java面向对象概述
- java面向对象
- JAVA面向对象
- JAVA 面向对象??
- Java面向对象特性
- Java面向对象特性
- java基础 面向对象
- Java面向对象程序设计
- java面向对象
- ffmpeg+OpenCV Linux下安装和配置
- polya定理+欧拉函数优化
- poj-1751 Highways
- LeetCode Insertion Sort List
- ZOJ Problem Set - 2095 Divisor Summation
- Java面向对象
- 【004】虚方法
- 获取当前正在运行的App的包名
- 禁止浏览器缓存方案
- eclipse如何修改dynamic web module version
- 性能调试---(五)I/O性能分析
- App发布系列--苹果开发证书运行机制(二) Code Signing
- 《模糊测试-强制性安全漏洞发掘》--读书笔记
- 线程控制[pthread_create() pthread_join()] 线程同步[互斥锁 条件变量 信号量]