面向对象
一.类与对象
1. 什么是类和对象
类:
官方语言:拥有相等功能和相同的属性的对象的集合 – 抽象的
举例:人类、动物类、鸟类
对象:
就是类的实例 – 具体
举例:动物的的实例------猫、狗、猪
2.取类名的注意点
类名与变量名类似,需要注意的是,类中的成员如果是static修饰的,那么不能访问非static修饰的
3.面向过程和面向对象的区别
面向过程是考虑“怎么”做,面向对象是考虑“谁”来做
举个栗子: 将大象装进冰箱
面向过程:打开冰箱—将大象装进去–关上冰箱门这样一种过程
面向对象:重点在对象:人—将大象—放进冰箱
4.Person类实例
/*Person类*/
public class Person {
// 类中没有自己定义构造器,系统会自行提供一个默认的构造器
// 成员变量(属性)
String name;
int age;
boolean sex;
private int height;
// 成员方法:无参、有参 (方法)
public void eat(){
System.out.println("吃饭");
}
public void eat(String food){
System.out.println("吃"+food);
}
public void setHeight(int height){
this.height = height;
}
public int getHeight(){
return height;
}
}
/*Person类-main方法*/
public class PersonTest {
public static void main(String[] args) {
Person person = new Person();
person.name = "gogo";
System.out.println(person.name);
person.age = 20;
System.out.println(person.age);
person.sex = false;
System.out.println(person.sex);
// 由于Person的height属性被private修饰了,需要getXXX、setXXX方法才能调用
person.setHeight(111);
System.out.println(person.getHeight());
person.eat();
person.eat("水果");
}
}
5.对象的内存解析
Person p1 = new Person();
p1.name = "tom";
p1.isMale = "true";
Person p2 = new Person();
System.out.println(p2.name);
Person p3 = p1;
p3.age = 10;
6.属性与局部变量的对比
不同点:
- 位置不同
属性(成员变量)-- 直接声明在类的{ }内
局部变量 – 声明在方法、代码块、方法形参、构造器形参构造器内部 - 权限修饰符不同
属性可以被public、static、private等修饰符修饰
局部变量不可以被修饰 - 默认初始化值不同
属性有默认初始化值
成员变量无默认初始化值,一定要先进行初始化 - 加载位置不同
属性(非static)(加载到堆空间中)
局部变量(加载到栈内存当中)
二.类与方法
1.方法的声明
权限修饰符 返回值类型 方法名(形参){
方法体
}
public void eat(String food){
System.out.println("jame吃"+food);
}
方法内部还可以调用方法,但方法内不可再声明方法。
2. 权限修饰符
权限修饰符有:
public:可以在任何类中都能被访问
private:私有的,即只能在当前类中被访问
protected:受保护的,只能被位于同一package中的所有类访问
default/缺省/friendly:同一package中的所有类都能访问
3.方法按返回值类型分类
可以分为:有返回值/无返回值
有返回值的方法,在声明方法时,需要指定方法的数据类型,需要有返回值
4.return关键字的使用
- return的使用范围:方法的内部使用
- return的作用
1.从当前的方法中退出,返回到该调用的方法的语句处,继续执行
2.返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致 - 注:return的后面其他语句不再生效
三.对象数组练习
题目要求:定义类Student,包含三个属性,学号num,年级state,成绩score
创建20个学生对象,学号为1到20,年级和成绩都由随机数确定
打印出3年级的学生信息
Student类:
/*
* Student类
*/
public class Student {
int number;
int state;
int score;
public void info_3(){
System.out.println("学号"+number+"\t"+state+"年级\t"+"分数:"+score);
}
}
主方法:
package com.stx.sn.myobject.person.array;
/**
* author: yiaiming
* Date: 2020/9/17
* Time: 11:21
* \
*/
public class Main {
public static void main(String[] args) {
Student[] stus = new Student[20];
for (int i = 0; i < stus.length; i++) {
stus[i] = new Student();
stus[i].number = i;
/*static double random()
返回值为 double值为正号,大于等于 0.0 ,小于 1.0 。
如要产生[5-15]的随机数:
int a =(int)(Math.random()*(15-5+1)+5)*/
stus[i].state = (int) (Math.random() * (9 - 1 + 1) + 1);
stus[i].score = (int) (Math.random() * (100 - 50 + 1) + 50);
if (stus[i].state == 3) {
stus[i].info_3();
}
}
}
}