Java基础之面向对象(一)
类和对象
类由很多对象组成
由类构造对象的过程称为创建类的实例
1.什么是类?
(1)具有相同属性和方法的一组对象的集合,通过众多对象抽取而得来。
(2)类是对象的类型,但它不同于int类型,它具有方法。
2.什么是对象?
对象:用来描述客观事物的一个实体,由一组属性和方法构成
对象的三个主要特性:
(1)对象的行为
(2)对象的状态
(3)对象标识
一个对象变量并没有实际包含一个对象,而仅仅引用一个对象
任何对象的变量的值都是对存储在另外一个地方的一个对象的引用。new操作值的返回值也是一个引用。
3.类与对象的区别
(1)类是模板
(2)对象是一个能够看的到、摸得着的具体实体
4.创建对象
类名称 对象名=new 类名称()
5.调用类对象的方法和属性
(1)调用属性:对象名称.属性名称
(2)调用方法:对象名称.方法名称()
6.构造函数
(1)构造函数不需要手动调用,创建类对象自动调用
(2)构造函数名称必须要和类名相同
(3)建议每个类都需要加上构造函数,方便被继承
7.构造器
(1)构造器与类同名
(2)每个类可以有一个以上的构造器
(3)构造器可以有0,1或1个以上参数
(4)构造器没有返回值
(5)构造器总是伴随着new操作一起调用
8.调用构造器的具体步骤
(1)所有数据域被初始化为默认值(0,false或null)
(2)按照类在声明中的出现顺序,依次执行所有域初始化语句和初始块
(3)如果一个构造器的第一行调用了第二个构造器,则先执行第二个构造器的主体
(4)执行这个构造器的主体
9. gc垃圾回收机制
(1)局部变量:方法调用结束后,局部变量就会被销毁
(2)类成员变量(类属性):对象销毁之后随之一起销毁
(3)块级作用域:在for,while,do-while等代码块中声明变量,只在相应的代码块中才能使用
10.成员变量和局部变量的区别
(1)作用域不同
->局部变量的作用域仅限于定义它的方法
->成员变量的作用域在整个类内部都是可见的
(2)初始值不同
->Java会给成员变量一个初始值
->Java不会给局部变量赋予初始值
局部变量:
– 定义在方法中;
– 没有默认值,必须自行设定初始值;
– 方法被调用时,存在栈中,方法调用结束,从栈中清除;
成员变量:
– 定义在类中,方法外;
– 有默认初始值,可以不显式初始化;
– 所在类被初始化后,存在堆中,对象被回收时,成员变量失效;
简单的程序案例:
从键盘接收三门课分数,计算三门课的平均分和总成绩,编写成绩计算类实现功能
创建ScoreCalculation类
public class ScoreCalc {
int javaScore;//java的成绩
int cScore;//c的成绩
int dbScore;//db的成绩
/**
* 不带参的构造函数
*/
public ScoreCalc() {
}
/**
* 带参的构造函数
* @param javaScore
* @param cScore
* @param dbScore
*/
public ScoreCalc(int javaScore,int cScore,int dbScore) {
this.javaScore=javaScore;
this.cScore=cScore;
this.dbScore=dbScore;
}
//计算三门课的总成绩
public int calcTotalScore() {
return (javaScore+cScore+dbScore);
}
//输出三门课的总成绩
public void showTotalScore() {
System.out.println("总成绩是:"+calcTotalScore());
}
//计算三门课的平均值
public double calcAvg() {
return calcTotalScore()/3;
}
//输出三门课的平均值
public void showAvg () {
System.out.println("平均成绩是:"+calcAvg());
}
}
主函数:
public class Test3 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.print("请输入java成绩:");
int javaScore=scan.nextInt();
System.out.print("请输入C#成绩:");
int cScore=scan.nextInt();
System.out.print("请输入DB成绩:");
int dbScore=scan.nextInt();
//创建ScoreCalc对象
ScoreCalc sc=new ScoreCalc(javaScore,cScore,dbScore);
sc.showTotalScore();//调用方法
sc.showAvg();
}
}