类与对象,以及构造器——
类的定义
//例如:"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;
}
}
/*
public static void main(String[] args) {
//new 实例化了一个对象
Person person = new Person();
Person person2 = new Person("xuaner");
Syetem.out,println(person.name);//null
System.out.println(perso2n.name);//xuaner
}
构造器:
1.和类名相同
2.没有返回值
作用:
1.new的时候,本质在调用构造方法
2.初始化对象的值
注意点:
定义了有参构造之后,如果想使用无参构造,就必须显式定义一个无参的构造
IDEA给我们提供了一个快捷的方式:Alt+Insert+Fn 快速生成构造器
this.名 = 值。 this.后面的是当前类 = 传进来的参数;
*/
穿插一点继承里面的东西——(后面会讲)
在继承里,子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。
如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
创建对象内存分析
在此,我们以图形的形式展示!
简单小结类与对象
/* 1.类与对象 类是一个模板,对象是一个具体的实例 2.方法 定义,调用,必须要会!! 3.对象的引用 引用类型:基本类型(8大基本类型)之外的 对象是通过引用(引用就是指向对象的一个地址)来操作的: 栈--->堆 4.属性:就是一个个字段Field,也是成员变量 系统默认的初始化: 数字: 0 0.0 char: u0000 boolean:false 引用:null 5.赋值: 修饰符 属性类型 属性名 = 属性值! 6.对象的创建和使用: - 必须使用new关键字 创建对象,构造器 Person xiaobai = new Person(); - 对象的属性 xiaobai.name - 对象的方法 xiaobai.sleep() 7.类: 静态的属性 属性 动态的的行为 方法 */
本文来自博客园,作者:柔小兔,转载请注明原文链接:https://www.cnblogs.com/whitebunny/p/16271697.html