面向对象编码的思路
- 抽象出类:(Dog Cat)
- 抽象出业务相关的属性:对象共有的静态特征
Dog:昵称,年龄,品种
数据类型 变量名;
- 抽象出业务相关的方法:对象共有的动态特征
Dog:吃,睡,玩,治疗
访问控制符 返回值类型 方法名(参数列表){
}
- 实例化对象
对象名.属性
对象名.方法()
属性--全局变量--实例变量:
初始值:
系统会分配默认值。
引用类型的数据默认值null,null就是没有指向任何一块堆内存
NullPointExpection的原因都是在null值上调用属性和方法
int 默认值0 char默认值 空字符 double 0.0 boolean false
作用域:
整个类,在类的内部,各个方法都可以使用
生命周期:创建对象--- 对象销毁
Dog d = new Dog();
d = newDog();
垃圾回收程序gc,去回收游离的对象。
局部变量
初始值:没有初始值,必须手动初始化
作用域:定义它的方法中才有效
生命周期:方法调用---方法执行结束
问题:全局变量和局部变量可以重名吗?
可以,局部变量优先级更高。
通过this关键字来引用全局变量
this
关键字,指代当前对象,谁调用这个方法,我就指代谁
方法:
动作、行为、能力、功能等等
抽象的原则:一个功能一个方法,一个动作一个方法。
方法调用:
本质:执行方法体
有返回值的方法:对象名.方法();调用之后可以赋值,还可以输出,比较等等……
无返回值的方法:对象名.方法();
在其它类中调用方法:
1.创建对象
2.对象名.调用方法
在同一类中可以调用方法
可以直接调用
方法调用栈:
当执行方法时,就进栈。
执行结束,就弹栈。
方法 :代码重用
对象数组
学生数组
Student[] stu = new Student[3];
stu[0] = new Student();
stu[0],name = "张三";
stu.age = 20;
Student ss = new Student();
ss.name = "李四";
ss.age = 12;
stus[1] = ss;
-------------------------------------------------------------------------------------------------------------------------
-
代码①
public class Dog {
//属性:数据类型 变量名;
//昵称
String name;
//年龄
int age;
//品种
String strain;
//方法
/**
访问控制符 返回值类型 方法名(参数列表){
//
}
public 公共的,共有的---访问控制符
void 返回值类型
*/
//吃
public void eat() {
System.out.println("狗吃骨头......");
}
//展示信息
public void show() {
System.out.println("昵称:" + this.name);
System.out.println("年龄:" + this.age);
System.out.println("品种:" + this.strain);
}
}
代码测试类:
package D0619;
public class TextDog {
public static void main(String[] args) {
//创建狗的对象 类名 对象名 = new 类名();
Dog dog1 = new Dog();
dog1.name = "阿奇";
dog1.strain = "拉布拉多";
dog1.age = 2;
dog1.show();
dog1.eat();
}
}
运行结果:
代码②
public class AutoLion {
String color;
//跑
/**返回值类型 此功能执结束 需要给调用者返回什么结果
如果不需要返回写 void
如果需要返回就写返回值的数据类型
方法体最后必须以return 返回值
return 结束方法的
方法名:与变量命名规则一样
方法体:完成此功能的过程
*/
public void run() {
//if(color == null)return;
System.out.println(this.getColor()+"的电动狮子跑......");
this.sing();
}
public void sing() {
System.out.println("唱......");
}
//获取颜色
public String getColor() {
return "黄色";
}
}
代码测试类:
package D0619;
public class TextAutoLion {
public static void main(String[] args) {
//创建对象
AutoLion al = new AutoLion();
al.run();
al.sing();
System.out.println(al.getColor());
}
}
运行结果:
代码③:
public class Battery {
public void charge() {
System.out.println("充电中...");
}
public double getCharge() {
return 0.8;
}
}
public class TextBattery {
public static void main(String[] args) {
Battery b = new Battery();
b.charge();
System.out.println(b.getCharge());
}
}
public class MP3 {
public String download() {
//System.out.println("正在下载...");
return "小苹果";
}
public void play() {
System.out.println("正在播放" + download());
}
public void charge() {
Battery b = new Battery();
b.charge();
}
public static void main(String[] args) {
MP3 m = new MP3();
System.out.println(m.download());
m.play();
m.charge();
}
}