zoukankan      html  css  js  c++  java
  • Java基础 | Java面向对象 | 02

    类和对象

    万物皆对象,现实世界任何存在的客观事物都是对象。

    如上图所示,只要是现实世界存在的客观事物,都可以是对象。

    创建类 & 对象实例化

    和操作系统中一样,我们可以通过不同的文件夹来管理同名文件,在Java中文件夹就是这样包。

    包的命名规范:

    • 英文字母小写
    • 域名的倒序

    创建宠物猫类

    package com.imooc.animal;
    
    /**
     * 宠物猫类
     * 
     * @author rowrycho
     *
     */
    public class Cat {
    	// 属性:昵称、年龄、体重、品种
    	String name;
    	int month;
    	double weight;
    	String species;
    
    // 方法:跑动、吃东西
    	public void run() {
    		System.out.println("小猫快跑");
    	}
    
    // 重载方法
    	public void run(String name) {
    		System.out.println(name + "快跑");
    	}
    
    	public void eat() {
    		System.out.println("小猫吃鱼");
    	}
    }
    
    

    创建一个猫的测试类

    package com.imooc.animal;
    
    public class CatTest {
    	public static void main(String[] args) {
    		// 实例化对象
    		Cat one = new Cat(),two=new Cat(); 
    		// 测试
    		one.eat();
    		one.run();
    		
    		// 给属性赋值
    		one.name = "花花";
    		one.month = 2;
    		one.weight = 1000;
    		one.species = "英国短毛猫";
    		
    		// 测试成员变量的默认初始值
    		System.out.println("昵称:"+one.name);
    		System.out.println("年龄:"+one.month);
    		System.out.println("体重:"+one.weight);
    		System.out.println("品种:"+one.species);
    		
    		one.run(one.name);
    	}
    }
    
    

    运行结果

    如果没有没成员属性赋初值直接使用的话,不会报错,默认就是0和null。但是如果局部变量没有给初值,就会报错。

    单一职责/功能原则

    为什么要将Cat和CatTest两个类分开?

    单一职责原则,一个类最好就一个功能,这样可以大大降低耦合度,大大类的复用性。

    这两个类是如何关联的?

    Java有自己的搜索机制,main运行的时候,首先会搜索同一个java文件中的类,如果没有找到,再去搜索同一个包中的类。

    new关键字

    声明对象 和 实例化对象 是两步操作。

    • 声明对象:在栈中进行对象声明。

    • 实例化对象:在堆中进行对象的实例化。

    如果只声明了对象,并没有对对象实例化,那么是不能使用对象的,因为此时对象只在栈中进行了声明,其值为null。

    栈中主要存储局部变量,堆中存储动态数据。

    如果是基本类型,那么变量和值都是存储在栈中的,如果是类,那么栈中只会存储一个堆的地址,然后堆中存储真正的对象数据。

    new了两个对象,那么这两个对象在堆中是两个独立的空间,相互之间是不影响的。

    Cat one = new Cat();
    Cat two = one; // 两个变量指向同一内存地址
    

    如果对象只需要使用一次,那么就可以不用声明对象,直接new Cat()使用一次。

    同时声明多个变量

    Cat one = new Cat(),two=new Cat(),three = new Cat();
    

    构造方法——无参构造方法

    构造方法要和new配合使用,不能被对象单独调用。

    package com.imooc.animal;
    
    /**
     * 宠物猫类
     * 
     * @author rowrycho
     *
     */
    public class Cat {
    	// 属性:昵称、年龄、体重、品种
    	String name;
    	int month;
    	double weight;
    	String species;
    
    	// 构造方法
    
    
    // 方法:跑动、吃东西
    	public void run() {
    		System.out.println("小猫快跑");
    	}
    
    // 重载方法
    	public void run(String name) {
    		System.out.println(name + "快跑");
    	}
    
    	public void eat() {
    		System.out.println("小猫吃鱼");
    	}
    }
    
    

    构造方法——有参构造方法

    通过带参数的构造方法,完成对象的属性赋值。

    package com.imooc.animal;
    
    /**
     * 宠物猫类
     * 
     * @author rowrycho
     *
     */
    public class Cat {
    	// 属性:昵称、年龄、体重、品种
    	String name;
    	int month;
    	double weight;
    	String species;
    
    	// 通过该构造方法进行属性赋值
    	public Cat(String name, int month, double weight, String species) {
    		this.name = name;
    		this.month = month;
    		this.weight = weight;
    		this.species = species;
    	}
    
    
    }
    
    
    package com.imooc.animal;
    
    public class CatTest {
    	public static void main(String[] args) {
    		// 实例化对象
    		Cat one = new Cat("花花",2,1000,"英国短毛猫"); // 通过构造函数给对象的属性赋值
    		// 测试
    		one.eat();
    		one.run();
    		
    
    		// 测试成员变量的默认初始值
    		System.out.println("昵称:"+one.name);
    		System.out.println("年龄:"+one.month);
    		System.out.println("体重:"+one.weight);
    		System.out.println("品种:"+one.species);
    	}
    }
    
    

    this表示当前对象。

    构造方法调用

    注意:构造方法只能在构造方法直接进行调用,构造方法不能被成员方法调用。

    package com.imooc.animal;
    
    /**
     * 宠物猫类
     * 
     * @author rowrycho
     *
     */
    public class Cat {
    	// 属性:昵称、年龄、体重、品种
    	String name;
    	int month;
    	double weight;
    	String species;
    
    	// 构造方法
    	public Cat() {
    		System.out.println("这是无参构造方法");
    	}
    	
    	
    	public Cat(String name) {
    		this(); // 调用无参构造方法
    		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;
    	}
    
    
    }
    
    

    this关键字

    注意: this()调用构造方法,必须放在方法体内第一行。

    小结

    面向对象的三大点

    封装、继承、多态
    

    什么是对象?

    对象是类的示例表现。
    

    什么是面向对象?

    人关注对象
    人关注事物信息
    
    通过对象来完成事情的交互,而不是通过面向过程的方式。
    

    什么是类?

    类是模子,确定对象将拥有的特征(属性)和行为(方法)。
    

    类和对象的关系?

    类是更加抽象的概念,对象是类的实例化。
    类是对象的类型,对象是特定类型的数据。
    

    什么是属性和方法?

    属性:对象有什么
    方法:对象能做什么
    

    关于包的知识点

    和操作系统中一样,我们可以通过不同的文件夹来管理同名文件,在Java中文件夹就是这样包。
    
    包的命名规范:
    
    *   英文字母小写
    *   域名的倒序
    

    局部变量、成员变量未赋初值,打印的结果?

    局部变量未赋初值,那么就报错。
    成员变量未赋初值,那么就会默认是0,或null。
    

    为什么要将Cat和CatTest两个类分开?

    **单一职责原则**,一个类最好就一个功能,这样可以大大降低耦合度,大大类的复用性。
    

    这两个类是如何关联的?

    Java有自己的搜索机制,main运行的时候,首先会搜索同一个java文件中的类,如果没有找到,再去搜索同一个包中的类。
    

    声明对象 & 实例化对象

    声明对象: Cat one;
    实例化对象: one=new Cat();
    
    通常写为 Cat one = new Cat();
    

    栈 & 堆

    栈:存储局部变量
    堆:存储动态数据
    
    堆存储对象数据
    栈中存储变量,如果是对象句柄,那么只存储堆地址;如果是基本类型变量,那么就存储变量名和变量值。
    
    int a=10; // 全部都存储在栈内存
    Cat one = new Cat(); // one存储在栈内存,new Cat()存储在堆内存
    

    构造方法

    	public Cat() {
    		System.out.println("这是无参构造方法");
    	}
    
    	public Cat(String name) {
    		System.out.println("这是有参构造方法");
    	}
    
    构造方法与类同名且没有返回值(构造方法是没有类型的)
    只能在new的时候被调用
    没有指定构造方法时,系统会自动添加无参的构造方法
    当有指定构造方法,无论是有参还是无参,都不会自动添加无参的构造方法
    一个类中可以有多个构造方法
    

    构造方法的调用

    注意:构造方法只能在构造方法直接进行调用,构造方法不能被成员方法调用。
    
    this(); // 调用无参构造方法
    this(”你好"); // 调用有参构造方法
    

    this关键字

    this:当前对象的默认引用
    
    this的使用
    	调用重载构造方法(必须放在第一行)
    	调用成员属性(解决成员属性和局部变量同名冲突)
    	调用成员方法
    
  • 相关阅读:
    Zara带你快速入门WPF(1)---开篇
    Vue Route Building the UI back-end framework
    TDX指标的理解与改造(价格到达指标线提醒)
    Vue生命周期详解
    Vue轻松入门,一起学起来!
    NodeJs安装步骤与淘宝镜像
    使用npm安装配置vue
    JavaScript面向对象
    vim常用快捷键
    python常用命令
  • 原文地址:https://www.cnblogs.com/Rowry/p/15068110.html
Copyright © 2011-2022 走看看