Java是一门面向对象的编程语言,面向对象是一种程序设计思想,我们都是在面向对象思想的指引下去设计、开发计算机程序。Java中有“万物皆对象”的说法,这里的对象泛指现实中一切事物,每个事物都具有有自己的属性和行为。
类:是一组相关属性和行为的集合。举例:手机
对象:是一类事物的具体体现。举例:小米10
类与对象的关系:
类的定义:
现实世界的一类事物:
属性:事物的状态信息 行为(功能):事物能够做什么。
Java中用class描述事物也是如此:
成员变量:对应事物的属性 成员方法:对应事物的行为
格式:
public class ClassName { //大驼峰 见名知意
//属性---->成员变量
//行为/功能--->成员方法
}
类的定义格式举例:
学生:
属性: 姓名 年龄 成绩........
行为: 学习 吃饭 睡觉 打篮球
public class Student {
//成员变量
String name;//姓名
int age;//年龄
//成员方法
//学习的方法
publicvoid study() {
System.out.println("好好学习,天天向上");
}
//吃饭的方法
publicvoid eat() {
System.out.println("学习饿了要吃饭");
}
}
对象及使用
创建对象格式
类名 对象名 = new 类名();
类型名 变量名 = new 类型名();
Student xiaoming = new Student();
使用对象访问类中的成员:
变量名.成员变量;//访问成员变量 使用 .
变量名.成员方法();//访问成员方法 使用 .
类与对象的练习
public class Phone {
// 成员变量
String brand; //品牌
int price; //价格
String color; //颜色
// 成员方法
//打电话
public void call(String name) {
System.out.println("给"+name+"打电话");
}
//发短信
public void sendMessage() {
System.out.println("群发短信");
}
}
定义测试类:
public class Test02Phone {
public static void main(String[] args) {
//创建对象
Phone p = new Phone();
//输出成员变量值
System.out.println("品牌:"+p.brand);//null
System.out.println("价格:"+p.price);//0
System.out.println("颜色:"+p.color);//null
System.out.println("------------");
//给成员变量赋值
p.brand = "锤子";
p.price = 2999;
p.color = "棕色";
//再次输出成员变量值
System.out.println("品牌:"+p.brand);//锤子
System.out.println("价格:"+p.price);//2999
System.out.println("颜色:"+p.color);//棕色
System.out.println("------------");
//调用成员方法
p.call("小明");
p.sendMessage();
}
}
1. 一个对象调用一个方法内存图
在栈内存中运行的方法,遵循“先进后出,后进后出”的原则。变量phone指向堆内存中的空间,寻找方法信息,去执行该方法。方法并不是在堆内存中,而是在方法区中。
2. 两个对象调用一个方法内存图
对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息只保存一份,节约内存空间。
3. 对象作为参数传递到方法中的内存图
引用类型作为参数,传递的是地址值。所以在main方法中给phone属性赋值,对象传入show方法中能够打印出对应设置的值。
成员变量( 属性,成员属性 , 字段)
变量根据定义位置的不同,我们给变量起了不同的名字。
public class Car{
String color; //成员变量
public void drive(){
int speed = 80; //局部变量
System.out.println("时速:"+speed);
}
}
成员变量和局部变量区别:
不同点 | 局部变量 | 成员变量 |
---|---|---|
在类中的位置不同 | 方法中或方法声明上 | 类中,方法外 |
作用范围不一样 | 方法中 | 类中 |
初始化值的不同 | 没有默认值,必须先定义,赋值,后使用 | 有默认值 |
在内存中的位置不同 | 栈内存 | 堆内存 |
生命周期不同 | 随着方法的调用而存在,随着方法调用完毕消失 | 随着对象的创建而存在,随着对象的消失而消失 |