类是模子,确定对象将会拥有特征(属性)和行为(方法)
对象是类的实例表现
类是对象的类型
对象是特定类型的数据
属性:对象具有的各种静态特征
方法:对象具有的各种动态行为
包名的推荐命名规范
1.英文字母小写
2.域名的倒序
Cat.java
package com.imooc.animal;
/**
* 宠物猫类
* @author Hurric4ne
*
*/
public class Cat {
//成员属性:昵称、年龄、体重、品种
//系统会给成员属性默认值
//boolean默认值为false
String name;//String类型默认值null
int month;//int类型默认值0
double weight;//double类型默认值0.0
String species;
//成员方法:跑动、吃东西
public void run() {
System.out.println("小猫会跑");
}
public void run(String name) {
System.out.println(name+"会跑");
}
public void eat() {
System.out.println("小猫会吃");
}
}
CatTest.java
package com.imooc.animal;
public class CatTest {
public static void main(String[] args) {
// 对象实例化
Cat one = new Cat();
// 测试
one.eat();
one.run();
one.name = "花花";
one.month = 2;
one.weight = 1000;
one.species = "英国短毛猫";
System.out.println(one.month);
System.out.println(one.name);
System.out.println(one.species);
System.out.println(one.weight);
one.run(one.name);
}
}
为什么main方法要放在CatTest类中?
单一职责原则(单一功能原则)
建议一个类有且只有一个引起功能变化的原因,不同的职责放在不同的类当中
如果在一个类当中,承担的功能越多,交融、耦合性就会越高,被复用的可能性就会越低
CatTest是如何找到Cat的?(类间如何识别?)
如果在CatTest类中找不到Cat,则到同名的包下寻找可允许访问的Cat类
面向对象五个基本原则(SOLID)
SRP单一责任原则
OCP开放封闭原则
LSP里氏替换原则
DIP依赖倒置原则
ISP接口分离原则
对象实例化
实例化对象的过程可以分为两部分:
-声明对象 Cat one 在栈中开辟一片叫做one的内存空间,但为空盒子(null)
-实例化对象 new Cat(); 在堆中完成初始化
对象实例化的另一种形式
Cat one = new Cat();
Cat two=one;//one和two指向同一片内存空间
注意事项:
需要多次访问同一对象时,必须进行声明
同一作用范围内,不能定义同名对象
可以同时声明多个引用,用逗号分隔
构造方法
构造方法只能与new一起进行调用,不能通过对象名、类名等其他形式调用,在非构造方法中,只能结合对象实例化操作被调用,不能通过方法名被访问
1.构造方法必须与类同名且没有返回值(不能用void修饰)
2.构造方法的语句格式
3.可以指定参数
public 构造方法名(){
//初始化代码
}
4.只能在对象实例化的时候调用
5.当没有指定构造方法时,系统会自动添加无参的构造方法
6.当有指定构造方法,无论是有参、无参的构造方法,都不会自动添加无参的构造方法
7.一个类中可以有多个构造方法
8.构造方法的调用只能在构造方法之间完成,通过this()调用构造方法,必须放在方法体内第一行,可以通过this调用本类中带参或者无参构造方法,调用带参构造方法时,需要按顺序传入设定的参数,在一个构造方法内只能调用一个构造方法
public Cat() {
System.out.println("无参构造方法");
}
public Cat(String name,int month,double weight,String species) {
this();
this.name=name;
this.month=month;
this.weight=weight;
this.species=species;
}
Cat.java
public Cat(String name) {
System.out.println("有参构造方法");
}
public Cat() {
System.out.println("无参构造方法");
}
CatTest.java
Cat one = new Cat("花花");
Cat two = new Cat();
谁调用了this谁就是当前对象,this可以理解为指向当前对象的一个引用
public Cat(String name,int month,double weight,String species) {
this.name=name;
this.month=month;
this.weight=weight;
this.species=species;
}
public void run() {
this.eat();
System.out.println("小猫会跑");
}
就近原则总结
关于在Java方法调用传参时涉及到的“就近原则”,通俗来说可理解为“有需要,找最近的”
最近指可访问范围内的最近
run方法执行第一句,由于此时在run方法中,由于“就近原则”的影响,其“可访问范围内”的month,最近的是方法形参的month,也就是说month=month,执行操作实际为,方法形参的自身赋值,说白了,这句话的执行类似于1=1,无实际意义
如果方法里存在局部变量和成员属性同名,但程序有需要在该方法里访问成员属性时,则必须使用this进行调用
大部分时候,类的成员方法访问同类中其他成员方法时,this关键字可加可不加,效果相同