类与对象篇
1.类与对象
*理解面向对象的概念
-相当于主语与谓语的关系
-面向对象的三大特征:1.封装,2.继承,3.多态
*类的定义
-类和对象是面向对象方法的核心概念
-类:是对一类事物的描述,是抽象的,概念上的定义。
-对象:是实际存在的该类事物的每个个体,因而也称实例。
例子:
public class Student
{
//属性
public String Name;
public int age;
public int score;
//定义方法
public void Study()
{
System.out.println(“student
must be studying!”);
}
}
//声明对象,并创建一个类的对象,命名为Stu1
Student Stu1 = new
Student();//使用一个new关键字
//调用类方法
Stu1.Study();
*声明类、属性、方法
-声明类
语法格式:
语法格式:
[< 修饰符>] class
< 类名>
{
[<属性声明>]
[<构造器声明>]
[<方法声明>]
}
说明:修饰符public:类可以被任意访问
类的正文要用{ }括起来
举例:
public class 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。
举例:
public class Person{
private int age;
public int getAge() { return age; } //声明方法getAge
public void setAge(int i)
{ //声明方法setAge
age = i; //将参数i的值赋给类的成员变量age
}
}
*创建、使用对象
-使用 new +构造方法
创建一个新的对象;
-使用 “对象名.对象成员” 的方式访问对象成员(包括属性和方法)
-如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰。
-类的访问机制:
-在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(有一个例外)
-在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。
*对象的生命周期
-一个类被创建以后才执行内存
-
*匿名对象
-我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象,
如:new Person().shout();
-如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
-我们经常将匿名对象作为实参传递给一个函数调用
2.信息的封装与隐藏
*使用这内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题
-Java中将数据声明为私有的(private),再提供公开的(public)方法:getXXX和setXXX实现对属性的操作,实现以下目的:
1.隐藏一个类的实现细节;
2.使用者智能通过事先定制好的方法来访问数据,可以方便加入控制逻辑,限制对属性的不合理操作
3.便于修改,增强代码的可维护性
3.构造方法
*构造方法的特征
-它具有与类相同的名称
-它不含返回值
-注意:在构造方法里不含返回值的概念是不同于“void”的,在定义构造方法时加了“void”,结果这个方法就不再被自动调了。
*构造方法的作用:
-当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。
例子:
功能:创建类的实例时,初始化实例的一组指令。
语法格式:
< 修饰符> <类名>([< 参数表>]) {
[< 语句>]
}
举例:
public class Animal {
private int legs;
public Animal() {legs = 4;
} //构造器
public void setLegs(int i)
{ legs = i; }
public int getLegs(){return
legs;}
}
创建Animal类的实例:Animal a=new Animal(); //调用构造器,将legs初始化为4
注释:构造器的名称必须与类名相同。修饰符:public、private、protected
构造器不是方法,没有返回值(连void也不能写)
*默认的构造方法
-Java语言中,每个类都至少有一个构造方法;
-如果类的定义者没有显式的定义任何构造方法,系统将自动提供一个默认的构造方法:
-默认构造方法没有参数
-默认构造方法没有方法体
-默认的构造方法:Animal(){}
所以:不编写构造方法就能用new Xxx()创建类的实例。
-Java类中,一旦类的定义者显式定义了一个或多个构造方法,系统将不再提供默认的构造方法;
-构造器的主要作用:利用构造器参数初始化对象的属性。
4.方法的重载
*代码格式
返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,….)
{
程序代码
return 返回值;
}
其中:
-形式参数:在方法被调用时用于接收外部传入的数据的变量。
-参数类型:就是该形式参数的数据类型。
-返回值:方法在执行完毕后返还给调用它的程序的数据。
-返回值类型:函数要返回的结果的数据类型。
-实参:调用函数时实际传给函数形式参数的数据。
*函数的重载
在同一个类中可以定义多个同名方法—方法名重载(overload)
public class PrintStream{
public void print(int i) {……}
public void print(float f) {……}
public void print(String s) {……}
}
-重载方法的参数列表必须不同
-重载方法的返回值类型可以相同,也可以不同
-调用时根据方法的参数类型来区别。
-print(3);print(1.2f);print(“hello!”);
5.this关键字
*如果func2方法被调用 ,一定是事先已经有了一个存在的对象,func2被作为那个对象的方法被使用。
*在func2内部能引用别的对象 ,同样也能引用func2所属的那个对象。
*在func2中,自己所属的那个对象的引用名称是什么呢?
*this关键字在java程序里的作用和它的词义很接近,它在函数内部就是这个函数所属的对象的引用变量。
6.函数的参数传递
*基本数据类型的参数传递
*引用数据类型的参数传递
7.package语句/import语句
*package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。它的格式为:
package <顶层包名>[.<子包名>]* ;
举例:pack\Test.java
package p1; //指定类Test属于包p1
public class Test{
public void
display(){
System.out.println(“in method display()”);
}
}
*包对应于文件系统的目录,package语句中,用‘ .’ 来指明包(目录)的层次;
*包通常用小写单词,类名首字母通常大写。
*import语句
-为使用定义在不同包中的Java类,需用import语句来引入所需要的类。Import语句告诉编译器到哪里去寻找类。
-语法格式:
import
包名[.子包名…]. <类名
|*>