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