面向对象
面向对象和面向过程的区别
面向过程和面向对象都是一种编程思想,不同的思维方式
面向过程:"如何完成|如何实现?"然后一步一步实现就可以了
面向对象:"这件事情应该找谁来完成?"完成的这个人就是对象,不关注实现过程,只关注对象
面向对象依托于面向过程
自定义类:
pubic class 类名{
//属性
修饰符 数据类型 变量名=变量值;
//功能
修饰符 返回值类型|void 方法名(参数列表){
方法体;
不加static修饰的方法叫做成员方法
public class Phone02{
//颜色;
public String color;
//品牌;
public String brand;
//价格;
public double money;
//打电话 : 不加static修饰的方法叫做成员方法
public void call(){
System.out.println("从前有一个人长得像电话,出门就被打了...");
使用自定义类:
创建这个类型的一个变量|引用 创建对象->new
引用数据类型 变量名 = new 引用数据类型();
变量名.属性名字
变量名.方法名字(实参)
//1.创建了一个手机对象,表示真实存在的事物
Phone02 p1=new Phone02();
Phone02 p2=new Phone02();
//2.给成员属性赋值
p1.color="黑色";
p1.brand="苹果";
p1.money=8000;
//3.使用功能
p1.call();
System.out.println(p1.color);
p2.call();
System.out.println(p2.color); //成员属性不赋值存在默认值
System.out.println(p2.brand);
System.out.println(p2.money);
//new就是一个新的对象
//匿名对象 没有名字对象 只能使用一次,看到new就是一个新的对象
//引用数据类型的成员变量值为null
//Car04 car3=null; 引用数据类型变量的声明,对象指向为null
//NullPointerException 使用某个对象的某个功能,但是这个对象没有真实存在,指向为null,所以会发生空指针
** new创建对象会执行的步骤:**
- 1.在堆中为对象开辟空间,当前类的成员属性会跟随对象进入到堆内存并附默认值
- 2.调用构造器为对象初始化信息(一般为成员属性第一次赋值)
- 3.将对象的地址返回给引用
构造器|构造方法|构造函数:
- 作用:
- 初始化对象信息
- 定义:
- 修饰符 类名([参数]){
- …
- }
- 1.没有返回值类型,没有void
- 2.可以根据需求存在return,提前结束方法
- 3.构造器不能和static,abstract,final一起使用
** 调用:**
- 跟随new使用,new其中的一步
- 1.如果没有显示构造器,编译器会隐式为你提供一个空构造
- 2.如果存在自定义构造器,编译器不会再为你提供任何构造器, 包括空构造
- 3.定义多个构造器,参数列表不同,构成构造器的重载,调用根据()中的实参匹配不同的构造器
- 4.构造器的修饰符可以是private,私有的,只能在当前类中使用这个构造器
- 根据不同的需求定义不同的构造器,一般都会存在至少一个空构造
- 作用,使用,定义,特点
public class ConstructorDemo01 {
//空构造 :没有参数的构造器
/*public ConstructorDemo01(){
//打印语句的快捷键 : syso->alt+/
System.out.println("我是无参空构造....");
}*/
//main->alt+/
public static void main(String[] args) {
//Dog dog=new Dog();
//Dog dog=new Dog("二楞子"); //()匹配不同构造器参数列表
Dog dog2=new Dog("张二狗","中华田园狗"); //创建对象的同时为成员属性赋值
//dog.lookHome();
//dog.name="三楞子"; //修改对象的属性值
//dog.lookHome();
dog2.Dog();
}
}
class Dog{
public String name;
public String type;
//默认提供空构造
private Dog() { //只能再当前Dog类中才能使用这个构造器为对象初始化信息
System.out.println("我是空构造.....");
}
//带参构造器
public Dog(String dogName){
name=dogName; //为成员属性name赋值
}
public Dog(String dogName,String dogType){
name=dogName;
type=dogType;
}
//普通的方法
public void Dog(){ //方法名不符合标识符的命名规范
System.out.println(name+"-->"+type);
Dog dog=new Dog();
}
//功能看家
public void lookHome(){
System.out.println(name+"正在看家...");
}
}
2019.07.04