一、类和对象
类也是一种数据类型,是一个引用数据类型,是自己创建出来的一种引用类型
- 对象:真实存在的,单一个体。软件中真实存在的个体
- 类:一类个体,类型/类别,基于对象抽出了类(设计类就是为了减少重复的代码)
- 类是对象的模子,对象是类的具体的实例
- 类中可以包含:
1、对象的属性/特征----------成员变量
2、对象的行为/动作----------方法 - 一个类中可以创建多个对象
补充:
- 只要有对象,就要把对应的类别设计出来,哪怕对象只有一个。
- 在潜艇游戏中,每一个对象就是每一个个体。
二、如何创建类?如何创建对象?如何访问成员?
public class Student{ //Student类就是我们自己造的一种引用数据类型.类名的命名规则遵循帕斯卡(大驼峰)原则
//成员变量
String name;
int age;
String address;
//方法study 和 方法sayHiq
void study(){
System.out.println(name+"在学习...");
}
void sayHi(){
System.out.println("大家好,我叫"+name+",今年"+age+"岁了,家住"+address);
}
}
public class StudentTest{
public static void main(String[] args){
//创建一个学生的对象
Student zs = new Student();
//给成员变量赋值
zs.name = "张三";
zs.age = 25;
zs.address = "河北廊坊";
//调用方法
zs.study();
zs.sayHi();
Student ls = new Student();
ls.name = "lisi";
ls.age = 24;
ls.address = "黑龙江佳木斯";
ls.study();
ls.sayHi();
//1)创建了一个学生的对象
//2)给过所有的成员变量赋默认值。String的默认值为null
Student ww = new Student();
ww.study();
ww.sayHi();
}
}
补充:
- 在同一个类中,可以直接进行访问
- 类是一种引用数据类型,引用数据类型的赋值都要用new
- 只有new 出来的才是对象,若要访问对象,需要通过引用。调用方法和使用变量都要引用来打点
- 只要new 了,就是给所有的成员的变量赋为默认值(在对成员变量不进行初始化的前提下)原因是:new对象的时候会默认调用无参构造,构造方法时给成员变量赋初始值.
- 引用类型变量----简称为引用
基本类型变量----简称为变量
三、方法的重载(overload/overloading)————更加方便用户的访问
1)发生在同一个类中,方法名相同,参数列表不同
2)编译器在编译时会根据签名自动绑定方法(方法的签名:方法名+参数列表)
//重载的演示
public class OverLoadDemo{
public static void main(String[] args){
Aoo o = new Aoo();
o.show(); //编译器根据方法的签名自动绑定方法
o.show("zhangsan");
o.show(25);
o.show("zhangsan",25);
o.show(25,"zhangsan");
}
}
class Aoo{
void show(){}
void show(String name){}
void show(int age){}
void show(String name,int age){}
void show(int age,String name){}
//int show(){return 1;} 编译错误,重载与返回值的类型无关
//void show(String address){} 编译错误,重载与参数名称无关
}
补充:
- 重载与返回值类型无关
- 重载与参数名称无关
- 重载与数据类型有关
- 重载与参数个数有关
- 重载与参数的顺序有关
补充:
1)在窗口进行设计时,把窗口的左上角设置为原点
2) 默认值规则:
byte,short,int,long,char-------------0
float,double-------------------------0.0
boolean------------------------------false
引用类型------------------------------null
3)以前不考虑对象,直接在main方法中写业务。现在的类是基于对象抽出来的,只充当一个类型,并不做实际的业务。相当于做月饼现在在做模具,而不是在制作月饼,不需要具体的业务
结论:凡是基于对象抽出来的类。都没有main
4)图片是像素为单位,int型。
5)方法的签名:方法名+参数列表
//若想访问对象,需要通过引用zs
引用
数据类型 引用类型变量 指向 对象
Student zs = new Student();
7)Phone p = new Phone();创建对象时,内存发生了什么?
在栈内存中开辟一块空间,Phone类型的引用类型变量p,把p压入栈底,此时p只有一个默认值null
在堆内存中开辟一块空间用于存放Phone类型的对象
要给这个对象进行初始化,比如:String brand = null;
此对象已经准备好,所以会生成一个唯一的地址值,并将这个地址值交给栈内存中的变量p来保存
如果后续想要对对象做操作,比如:p.price=88.8;先会找到栈中p变量保存的地址值,根据这个地址找到堆中的对象再做进一步的操作。