//例如:"CourseNumber"的类:标示课号。
class CourseNumber{
String number;
String coursename;
void showInfo(){
System.out.println("课号:"+number+",课程名称:"+coursename);
}
}
//学生类
class Student{
String number;
String name;
//构造方法
Student(String num,String stuname){
this.number = number;
this.name = stuname;
}
//构造方法
String selectCourse(CourseNumber num){
String s = name + "您好,您选修的课程信息为:"+num.shouInfo();
return s;
}
}
插入知识点——
数据成员:一个具有特特定数据类型、处于类内部的一个变量,又称为成员变量。
数据类型可以为任何合法的数据类型,例如简单的数据类型、数组类型、类类型、接口类型。
编程风格建议:
1.一个成员变量占据一行。
2.变量名最好能见名知意。
3.首字母小写,多单词构成第二单词开始首字母大写。
-
类的成员:方法成员或者数据成员都可以加static修饰符。
-
对象的成员:没有加static修饰的成员。
-
类的成员和对象的成员都是类体中的成员。
注意:
加了static的变量,访问这种类变量的标准格式可以用:类名.类的成员名,或者对象变量名.类的成员名(不过不推荐后者)。而对象的数据成员,则通过对象变量名.类的成员名访问。
一般情况下,每个对象用自己的成员变量,他们是独立的,但有些情况下,当多个对象要共享同一个成员时,我们在这个成员前用static修饰使之成为类变量。
举个例子:
//每当新建一个DemoClass对象时,该变量自身加1,从而实现了对创建成功的对象计数功能。
class DmeoClass{
static int instanceNum = 0;
//构造器,我们下一节讨论
DemoClass(){
DemoClass.instanceNum++;
}
}
-
类,是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。
- 动物、植物、手机、电脑…
- Person类、Pet类、Car类等,这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为。
-
对象,是抽象概念的具体实例。
- 张三就是人的一个具体实例,张三家里的旺财就是狗的一个具体实例。
- 能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念。
我们可以将这些思想转换为代码实现!
定义了一个类后,相当于创建了一个新的数据类型。创建对象,也就是声明新的数据类型变量,并为这种新的数据类型变量分配内存空间的过程。分配空间后,这个类的实例或者说是对象就创建好了。
例如:
//梯形类
class Trapezoid{
double above;
double bottom;
double height;
//构造方法,用于初始化数据成员的值
Trapezoid(double a,double b,double h){
above = a;
bottom = b;
height = h;
}
//普通方法:用于计算梯形的面积
double computeArea(){
return (above+bottom)*height/2;
}
}
//主类:
public class Test{
public class void main(String[] args){
Trapezoid t = new Trapezoid(4.5,9,2);//1.声明一个变量名为t,类类型Trapezoid;2.使用new运算符创建一个Trapezoid实例,对t进行初始化;3.t就指向了这个新建的Trapezoid实例(或者对象),从此就可以通过t调用它的实例(或者对象)方法了
System.out.println(t.computeArea);
}
}
- 使用new关键字创建对象,对象创建后,对象对应的变量名就是对象的“引用”,是对象的一个“别名”。
- 使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。
- 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。 并且构造器有以下两个特点:
- 1.必须和类的名字相同
- 2.必须没有返回类型,也不能写void
- 构造器必须要掌握!!!
构造方法(也就是构造器)是类中的一种特殊的方法,当程序用类创建对象时,会自动调用它。Java语言规范里叫Constructor,我们翻译为构造方法,实际上还是觉得构造器比较好一点,所谓的构造器,严格意义上来说不算是一个真正的方法,也就没有所谓的返回值。
此外,类中如果没有显式定义构造器,编译系统也会自动地给我们提供一个默认的构造器(这个系统提供的构造器,是没有带参数的,也没有方法体),而如果我们显式的定义了一个有参构造,则这个无参构造就必须显式定义!!
package com.oop.Test02;
public class Person {
//一个类即使什么都不写,它也会存在一个方法
String name;
//1.使用new关键字(本质是在调用构造器),类中必须要有构造器
//2.用来初始化对象值
public Person(){
}
//有参构造:一旦定义了有参构造,无参构造就必须显式定义
public Person(String name){
this.name = name;
}
}
穿插一点继承里面的东西——(后面会讲)
在继承里,子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。
如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
创建对象内存分析在此,我们以图形的形式展示!
简单小结类与对象


