Java第六讲
类与对象
1、对象:能提供内容(方法和属性)的东西叫对象。
2、类:具有共同行为和特征的很多事务称为类。用属性来描述特征,用方法来描述行为。
方法名称后面的小括号中表示可以传递参数,括号中写参数列表。
3、类与对象的关系
类是抽象的。用来描述同一类事物,对象是具体的,有具体的行为和特征。
关系:在Java中一切对象都是有类型的,即:对象需要使用类来创建。
4、如何创建对象: 类型 对象名称 = new 类型();例:Gou xiaojinmaoGou = new Gou();
声明并实例化
使用类创建对象时,如果没有做特殊限制,则可以一直创建(对象的数量可以无限)
5、使用对象的属性&方法
注意:点(".")表示关联,关联对象本身的属性和方法。
注意:关联的属性没有括号,关联的方法一定有括号。
注意:对象执行方法是,执行的是本身的方法。
堆 对象(划出一块内存)
栈 属性 方法(数值)
6、对象的引用
Gou xiaojinmao3 = new Gou();
Gou xiaohei = xiaoxinmao3;
xiaohei:引用对象
xiaojuinmao3:被引用对象
注意:属性发生改变时,两个对象的属性值同事改变.
7、方法:有参、无参
无参:public void wan() {"玩和平精英"}
有参:public void chi(Fan fan){syso ("饿了,想吃饭。")}
总结:方法名称后面的小括号为参数列表,如果里面没有任何内容,则表示当前方法为无参方法,反之为有参方法。
注意:参数列表的形式: 类型 对象名称, 类型 对象名称,......
方法的组成:修饰符 有无返回值 方法名称 (参数列表){方法体}
8、成员变量/局部变量
成员变量:属性、全局变量 :写在类中,方法外的变量(对象)称为成员变量。
局部变量:写在方法内的变量称为局部变量。
类与方法案例
/*
Chengji类
*/
package com.wxkj.pan6;
import java.util.Scanner;
public class ChengJi {
Scanner input = new Scanner(System.in);
//提供一个空的数组,用于单独执行suan2方法。
double[] scores = {};
//课程数组,用于录入课程成绩
String[] kecheng = {"java","html","db","css"};
//此方法用来实现课程录入
public void keChengLuRu() {
kecheng = new String[10];
int changdu = kecheng.length;
for(int i=0;i<=changdu;i++) {
if(i == 10) {
//在数组长度即将超限时,创建一个长度更长的数组
String[] kecheng1 = new String[15];
//将原数组的元素依次放入新数组中
for(int j=0;j<changdu;j++) {
kecheng1[j] = kecheng[j];
}
//将新数组赋值给原数组
kecheng = kecheng1;
changdu = kecheng.length;
}
System.out.print("请输入第"+(i+1)+"门课程名称:");
kecheng[i] = input.next();
System.out.print("您还要继续录入课程吗?");
String shifou = input.next();
if(shifou.equals("n")) {
break;
}
}
}
public void chengJiLuRu() {
int kechengshu = kecheng.length;
//确认有效课程的总数
/**
* String类型的默认值:null
* 确认String类型数组元素不为空的方式:String类型对象 == null 或 String类型对象.equals(null)
*/
//创建一个计数器,用来记录当前数组中部位空的元素的个数。
int num = 0;
for(int i=0;i<kechengshu;i++) {
if(kecheng[i] != null) {
num ++;
}
}
kechengshu = num;
scores = new double[kechengshu];
for(int i=0;i<kechengshu;i++) {
System.out.print("请输入"+kecheng[i]+"成绩:");
if(input.hasNextDouble()) {
scores[i] = input.nextDouble();
}else {
System.out.println("输入错误,计算结束。");
return;
}
}
}
public void jiSuan() {
double sum = 0;
double sc_avg = 0;
int elements = scores.length;
if(elements != 0) {
System.out.println(elements);
for(int i=0;i<elements;i++) {
sum += scores[i];
}
sc_avg = sum / elements;
System.out.println(elements+"门课程的总成绩为:"+sum+"\t平均分为:"+sc_avg);
}else {
System.out.println("请先录入成绩。");
}
}
}
/*Score类*/
package com.wxkj.pan6;
import java.util.Scanner;
public class Score {
Scanner input = new Scanner(System.in);
//提供一个空的数组,用于单独执行suan2方法。
double[] scores = {};
//课程数组,用于录入课程成绩
String[] kecheng = {"java","html","db","css"};
//此方法用来实现课程录入
public void kechengluru() {
kecheng = new String[10];
int changdu = kecheng.length;
for(int i=0;i<=changdu;i++) {
if(i == 10) {
//在数组长度即将超限时,创建一个长度更长的数组
String[] kecheng1 = new String[15];
//将原数组的元素依次放入新数组中
for(int j=0;j<changdu;j++) {
kecheng1[j] = kecheng[i];
}
//将新数组赋值给原数组
kecheng = kecheng1;
}
System.out.print("请输入第"+(i+1)+"门课程名称:");
kecheng[i] = input.next();
System.out.print("您还要继续录入课程吗?");
String shifou = input.next();
if(shifou.equals("n")) {
break;
}
}
}
public void suan() {
double[] scores = new double[3];
System.out.print("请输入java成绩:");
if(input.hasNextDouble()) {
scores[0] = input.nextDouble();
}else {
System.out.println("输入错误,计算结束。");
return;
}
System.out.print("请输入html成绩:");
if(input.hasNextDouble()) {
scores[1] = input.nextDouble();
}else {
System.out.println("输入错误,计算结束。");
return;
}
System.out.print("请输入DB成绩:");
if(input.hasNextDouble()) {
scores[2] = input.nextDouble();
}else {
System.out.println("输入错误,计算结束。");
return;
}
double sum = 0;
double sc_avg = 0;
int elements = scores.length;
for(int i=0;i<elements;i++) {
sum += scores[i];
}
sc_avg = sum / elements;
System.out.println(elements+"门课程的总成绩为:"+sum+"\t平均分为:"+sc_avg);
}
public void luRu() {
scores = new double[4];
System.out.print("请输入java成绩:");
if(input.hasNextDouble()) {
scores[0] = input.nextDouble();
}else {
System.out.println("输入错误,计算结束。");
return;
}
System.out.print("请输入html成绩:");
if(input.hasNextDouble()) {
scores[1] = input.nextDouble();
}else {
System.out.println("输入错误,计算结束。");
return;
}
System.out.print("请输入DB成绩:");
if(input.hasNextDouble()) {
scores[2] = input.nextDouble();
}else {
System.out.println("输入错误,计算结束。");
return;
}
System.out.print("请输入css成绩:");
if(input.hasNextDouble()) {
scores[3] = input.nextDouble();
}else {
System.out.println("输入错误,计算结束。");
return;
}
}
public void luRu1() {
int kechengshu = kecheng.length;
//确认有效课程的总数
/**
* String类型的默认值:null
* 确认String类型数组元素不为空的方式:String类型对象 == null 或 String类型对象.equals(null)
*/
//创建一个计数器,用来记录当前数组中部位空的元素的个数。
int num = 0;
for(int i=0;i<kechengshu;i++) {
if(kecheng[i] != null) {
num ++;
}
}
kechengshu = num;
scores = new double[kechengshu];
for(int i=0;i<kechengshu;i++) {
System.out.print("请输入"+kecheng[i]+"成绩:");
if(input.hasNextDouble()) {
scores[i] = input.nextDouble();
}else {
System.out.println("输入错误,计算结束。");
return;
}
}
}
public void suan1(double[] scores111) {
double sum = 0;
double sc_avg = 0;
int elements = scores111.length;
for(int i=0;i<elements;i++) {
sum += scores111[i];
}
sc_avg = sum / elements;
System.out.println(elements+"门课程的总成绩为:"+sum+"\t平均分为:"+sc_avg);
}
public void suan2() {
double sum = 0;
double sc_avg = 0;
int elements = scores.length;
if(elements != 0) {
System.out.println(elements);
for(int i=0;i<elements;i++) {
sum += scores[i];
}
sc_avg = sum / elements;
System.out.println(elements+"门课程的总成绩为:"+sum+"\t平均分为:"+sc_avg);
}else {
System.out.println("请先录入成绩。");
}
}
}
/*Test类的main方法*/
package com.wxkj.pan6;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Score score = new Score();
score.kechengluru();
score.luRu1();
score.suan2();
}
}
set() / get() 方法的理解和使用
java中 当定义了一个私有的成员变量的时候,如果需要访问或者获取这个变量的时候,就可以编写set或者get方法去调用。
set()是给属性赋值的,get()是取得属性值的
被设置和存取的属性一般是私有
主要是起到封装的作用,不允许直接对属性操作
set()和get()不一定同时存在,看程序需求
解释:属性的访问器包含与获取(读取或计算)或设置(写)属性有关的可执行语句。
访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含。声明采用下列形式之一:get {}set {} get 访问器 get 访问器体与方法体相似。它必须返回属性类型的值。执行 get 访问器相当于读取字段的值。以下是返回私有字段 name 的值的 get 访问器:
package com.wxke05;
public class GuKe {
public String k_name ;
public int k_age;
public boolean huiyan_flag;
public void setk_age(int age) {
if (age > 0) {
k_age = age;
}
}
public int get_age() {
return k_age;
}
public void setk_name(String name) {
k_name = name;
}
public String getK_name() {
return k_name;
}
public void setHuiYuan_flag(boolean flag) {
huiyan_flag = flag;
}
public boolean getHuiYuan_flag() {
return huiyan_flag;
}
}
单词
1.class 类
2.object 对象
3.OOP 面向对象(Object-Oriented Programming)
4.return 返回
5.encapsulation 封装
6.null 空
7.initial 初始化
8.type 类型
简答题
- 类与对象的关系是什么?
- 定义一个类的语法是什么?
- 如何创建一个类的对象?