2.面相对象的成员 -> 类:
a.类的定义:
- 1.类是对公共特点的抽象,其中包含了很多成员,如属性(成员变量 )、方法、构造器等.要想很好的定义类,就必须要好好的了解这些类的成员
b.访问修饰符
控制属性的访问范围
有四种访问修饰符public, proctected, 默认, private
- 属性的
定义类型可以为任意类型
,包含基本类型或引用类型 - 属性如果不赋值,有默认值,规则和数组一致。具体说:
int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char, boolean false,String null
c.类用处:
- 1.对类进行实例化就产生了对象
- 2.
创建对象 = 类的实例化 = 实例化类
d.类成员介绍:
- 1.类的
常见
的成员有:属性和行为
等- 2.类的其他成员:
- 构造器
- 代码快
- 内部类
d1.类的成员->属性:
- 1.属 性:对应类中的
成员变量
或者叫:field
;或者叫:域,字段
d2.类的成员->方法:
- 1.对应类中的
成员方法
或者叫:函数
;或者叫:method
3.面相对象的成员 -> 对象:
对象哪来的?
?是对类实例化所产生的
a.对象的创建与使用:
b.代码举例:
- 1.编码实现创建对象及属性的调用:
java
// Object01.java
package com.jianqun.package01;
import java.util.function.IntBinaryOperator;
/**
* @author jianqun
* @email:1033586391@qq.com
* @creat 2022-01-31-16:11
*/
public class Object01 {
public static void main(String[] args) {
//实例化一只猫;即造出一只实实在在的猫来
//把创建的第一支猫赋给cat1,就是这个猫的名字叫cat1
Cat cat1 = new Cat();
cat1.name = "小白";
cat1.color = "白色";
cat1.age = 3;
//创建第二支猫
Cat cat2 = new Cat();
cat2.name = "小黑";
cat2.color = "黑色";
cat2.age = 30;
System.out.println("第一支猫" + cat1.name + cat1.color);
}
}
class Cat{
/**
* 猫的属性
*/
String name;
String color;
int age;
/**
* 猫的行为
*/
}
- 2.对象创建说明:
new Cat()
代表的才是真正的对象,cat
只是代表的对象名字,或者说叫对象的引用
java
//直接创建
Cat cat;//先声明对象cat
cat = new Cat();//再创建对象cat
java
//直接创建对象
Cat cat = new Cat();
c.类与对象的区别和联系
- 1.通过上面的代码可以看出:
类是抽象的,是代表一类事务
,比如人类,猫类...是一种数据类型 - 2.对象是具体的,实际的,代表一个具体事务,即是实例
- 3.类是对象的模板,对象是类的一个个的个体,对应着实例
- 4.如果创建了
一个类的多个对象
,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰(非static类型的属性
)
d.匿名对象介绍:
- 1.匿名对象就是:我们创建的对象没有赋给一个变量名,而直接调用这个对象的方法。这样的对象叫做
匿名对象
,如:new Person().shout();
- 2.匿名对象智能调用一次
- 3.使用情况 :
- 如果
对一个对象只需要进行一次方法调用
,那么就可以使用匿名对象
- 我们经常将
匿名对象作为实参传递给一个方法调用
- 如果
java
package com.jianqun.day08;
public class InstanceTest {
public static void main(String[] args) {
//创建Phone对象
Phone phone = new Phone();
System.out.println(phone);
//对象调方法
phone.sendEmail();
phone.playGame();
//匿名对象使用举例1:
new Phone().price = 20000;
new Phone().showPrice();//0.0
new Phone().playGame();//打游戏.....
//匿名对象使用举例2:
PhoneMall phoneMall = new PhoneMall();
phoneMall.show(new Phone());//发送邮件.....
}
}
class PhoneMall{
public void show(Phone phone){
phone.sendEmail();
}
}
class Phone{
double price;//价格
public void sendEmail(){
System.out.println("发送邮件.....");
}
public void playGame(){
System.out.println("打游戏.....");
}
public void showPrice(){
System.out.println("手机价格::" + price);
}
}
d.对象的内存解析:
d1.JVM内存结构简介:
- 1.
堆(Heap)
:- 此内存区域的唯一目的就是
存放对象实例
,几乎所有的对象实例都在这里分配内存
- 这一点在Java虚拟机规范中的描述是:所有的
对象实例(Cat cat)
以及数组
都要在堆上分配
- 此内存区域的唯一目的就是
- 2.
栈(Stack)
:- 通常所说的
栈(Stack)
是指虚拟机栈
。 - 虚拟机栈用于
存储局部变量表
、操作数栈等。 - 局部变量表存放了编译期可知长度的各种基本数据类型
(boolean、byte、char 、 short 、 int 、 float 、 long 、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址
), 方法执行完,自动释放。
- 通常所说的
- 3.
方法区(Method Area)
:方法区(Method Area)
用于存储已被
虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码
等数据。
d2.案例1:分析对象创建过程:
d3.案例2:创建单个对象的内存解析:
以下分析忽略了main方法在栈中的存储,对对象中的属性做了进一步的分析
d4.案例3:一个类的多个对象的内存解析:
- 1.如果我们
创建了一个类的多个对象
,则每个对象都独立的拥有一套属性(非static)
,也就是说,我们修改一个对象的属性a,不会影响另一个对象的属性a的值
- 2.如下分析暂时忽略了jvm中的方法区