面向对象
- 面向过程:
着眼于整个程序的执行流程和功能的具体实现,是一个执行者的身份 面向过程:
着眼于找到能够帮助自己完成此功能的人,是一个领导者的身份,更符合日常生活中人们处理事情的思想类和对象
- 类:
类型,一类事物,是这类事物的基本信息和功能行为所组成的集合 - 基本信息->属性
- 功能行为->方法
例如: 研究鸟类型 属性:品种、毛色 方法:飞,吃
对象:
类的一个具体的实例,获取对象需要创建对象(实例化)- 类和对象的关系:
- 类是一个抽象的概念,对象是一个具体的概念
- 任何对象都具有所属类中所有的属性和方法
例如: 研究鸟对象 属性:品种-鹦鹉,毛色-绿色 方法:飞-普通的飞,吃-游客给的食物
自定义类型
格式: public class 类名{ 属性 方法 }
- 讲究:
- 属性用名词
- 方法用动词
创建对象(实例化)
创建格式: 数据类型 对象名 = new 数据类型(); 调用属性: 对象名.属性; 调用方法: 对象名.方法();
注意:
- 对象中成员基本类型是默认赋值0,引用基本类型的默认值是null没有空间。除非new空间或者指向别人的空间,不然没有空间没有地址。
今天有点迷糊的,我想用自定义的对象Plane[] planes = new Plane[3];调用里面的方法。是不行的,它是动态创建,必须用对象来往里面填充。因为这是动态创建,动态创建的引用类型的默认值是null。想要初始化,要用户自己初始化。数组只是容器。
即便是静态赋值你往大括号里面传入的也是对象:
比如: //String 类型中的就是String类型对象 String[] string = {"wert","asdf","eerr"}; Plane[] planes = {plane1,plane2}; //静动态都要传入对象才能用,不然默认值是null没有开辟空间的,自然不能用的。
这样说吧,数组就是容器,你往里面存东西然后通过下标调用。比如静态的你初始化就放入数据然后调用。动态的,你后来放入数据,然后调用。引用动态的,你要后来放入数据,这时候你放入的就是你自己定义的类型对象这才是赋值。
```
例:
//3虽然是对象,但同时也是对象。基本数据类型也是,即使数字也是元素。
Integer[] inte = new Integer[2];
inte[0]=3;//str[0]接受到的也是一个对象
//plane是对象不能当成基本类型使用,并且如果没有装入对象的情况下是不能调用方法的。但这个plane是可以调用数组方法的。
String[] str = new String[2];
str[0]="hel";
Plane[] plane= new Plane[2];
```- 向外传递引用类型不用返回,因为引用类型是双向的,是地址传递。但是方法内想要获取外部的就要通过参数列表。
- 类中不用public 修饰的成员是不能被跨包修改的。
- 直接打印对象时打印的是地址,但是我不想打印地址,我想打印里面的内容。我们知道Arrarys里有toString方法,它是重写了Object(所有类的父类)中的toString。所以我们的类也是继承自他的,我们也重写toString,这样我直接打印对象的时候就不是打印地址而是toString的内容。我不知道toString内部怎么做的但就是能做。
下面这一题由于表达式是从右往左new然后赋值,又因为它的生命周期在for内,所以每一次for循环都会创建一个plane,新的会覆盖老的。
for (int i =0;i<10;i++){ //自定义飞机类 Plane plane = new Plane(); …… }