Java面向对象
一.包名的推荐规范
1.英文小写字母;2.域名的倒序
二.面向对象
优点:稳定性;可扩展性;可重用性
对象:用来描述客观事物的一个实体;
类:具有相同属性和方法的一组对象的集合
1.一个简单的类例:
属性和方法:(属性未赋初值,整型默认为0,字符串类型默认为null,double型为0.0)
单一职责原则(单一功能原则):有且只有一个引起功能变化的原因【注:如果在一个类中,承担的功能越多,交融和耦合性越高,被复用的可能性越低,而且因为耦合性高,类中的一个职责发生变化时有可能引起其他职责变化】,因此在程序中尽量把不同的职责(引发变化的不同原因)封装在不同的类里面。
如例:把与猫相关的属性和方法放在一个类,而把实例化测试放在另一个类里面
package com.imooc.animals;
public class Cat {
//成员属性:昵称,年龄,体重,品种
String name;
int month;
double weight;
String species;
//成员方法
public void eat(){
System.out.println("我吃东西了");
}
public void run(){
System.out.println("我跑了");
}
}
package com.imooc.animals;
public class Cattest {
public static void main(String[] args) {
// 对Cat实例化
Cat cat=new Cat();
//属性赋值,开始未赋值,默认为0
//cat.month=12;
//调用方法
cat.eat();
cat.run();
System.out.println(cat.name);
System.out.println(cat.month);
System.out.println(cat.weight);
System.out.println(cat.species);
/*输出:
我吃东西了
我跑了
null
0
0.0
null
*/
}
}
2.实例化对象过程:
2.1声明对象:Cat cat(在内存的栈空间里开辟了一个区域取名为cat,此时为一个空盒子null,无法操作【未被初始化】)
2.2实例化对象:new Cat()(在内存的堆空间里开辟了一块空间,完成了对象的初始化操作);
还可以直接 Cat cat2=cat(相当于一个房子有两把钥匙,并给不同的人,指向的是内存中的同一区域)【如图2】
图1
图2
注:Python实例化过程是先调用__new__(静态方法)方法实例化对象,并返回对象,在调用__init__(构造方法)完善对象,__init__无返回值。
三,.构造方法
1.构造方法与类名相同且没有返回值;
2.只能在对象的实例化过程中被调用;
3.当没有指定构造方法时,系统会自动添加无参构造方法;
4.当有指定构造方法,无论是有参和无参,系统都不会自动添加构造方法;
5.一个类可以有多个构造方法
例1:无参构造方法
package com.imooc.animals;
public class Cat {
//成员属性:昵称,年龄,体重,品种
String name;
int month;
double weight;
String species;
//无参构造(默认是无参)
public Cat(){
}
//成员方法
public void eat(){
System.out.println("我吃东西了");
}
public void run(){
System.out.println("我跑了");
}
}
例2:有参构造方法
注意:赋值满足就近原则
解决方法:
可以修改参数为不同的名字(缺点:麻烦,需要刻意取不同的名,对照麻烦);
this关键字:表示当前对象
注:可以定义一个与构造方法相同名的普通方法(语法没影响,但是不推荐)
通过this()调用构造方法必须放在方法体内的第一行。