5.类与对象1

1. 类的定义:

【权限访问修饰符(public|default)】 class 类名 {

​ // 全局变量

​ // 方法

}

权限访问修饰符注意

类名: 首字母大写, 驼峰命名 标识符(字母、_、$开头)

2. 方法的定义

【权限访问修饰符】 【static】 返回修饰 方法名(参数列表) {

​ // 方法体

}

static: 违反面向对象: 静态的

方法名: 首字小写。

参数列表: (类型 参数名, 。。。)

3. OOP:Object Oriendted Programming :面向对象编程

面向过程的: 顺序写法

		// 给一个圆的半径5,求周长
		// Math.PI
		int r = 5;
		double zc = qiuzhouchang(r);
		System.out.println(zc);

	private static double qiuzhouchang(int i) {

		return 2 * i * Math.PI;
	}

面向对象的:复用性更好一些。

把事务抽象出来!!! 类 , 对象

所有的圆都有半径, 都能求周长。 圆 属性 是 半角, 方法–行为 求周长。 对象就是每一圆。

		// OOP
		// 对象的实例化
		Circle c1 = new Circle();
		c1.r = 5; // 调用属性赋值
		double zc2 = c1.qiuzhouchang(); // 调用方法
		System.out.println(zc2);

class Circle {
	int r; // 全局变量: 成员变量; 属性
	// 求周长: 行为:方法
	public double qiuzhouchang() {

		return 2 * r * Math.PI;
	}
	public double qiumianji() {

		return r * r * Math.PI;
	}
}

以学生为例:

类的属性: 学号,姓名,年龄

类的方法:行为: 学习,吃饭,打游戏。。。

对象: 每一个学生

package com.etc.lesson04;

public class Student {

	int stuno;
	String name;
	int age;
	
	public void study() {
		System.out.println(stuno + "@" + name + "学习");
	}
	
	public void playGame() {
		System.out.println(name + "游戏");
	}
}


		
		// 对象的实例化
		Student stu1 = new Student();
		
		stu1.stuno = 1;
		stu1.name = "张三";
		stu1.age = 20;
		
		// com.etc.lesson04.Student@15db9742
		System.out.println(stu1);
		System.out.println(stu1.name);
		
		stu1.study();
		stu1.playGame();
		
		// 对象的实例化
		Student stu2 = new Student();
		
		stu2.stuno = 2;
		stu2.name = "李四";
		stu2.age = 20;
		
		// com.etc.lesson04.Student@15db9742
		System.out.println(stu2);
		System.out.println(stu2.name);
		stu1.study();
		stu1.playGame();
		stu2.study();
		stu2.playGame();
	

4. 对象实例化

类型 变量 = new 类型();

类型===对象类型(除了8个基本类型)

变量===对象

new 开辟堆(heap)空间

类型() == 构造方法

在这里插入图片描述

5. 面向对象第二种理解:

boolean 1bit byte 8bit char 2byte short 2byte int 32bit float 32bit long 64bit double 64bit

复合的数据类型

在这里插入图片描述

6 static:

**静态不能调用非静态**

违反面向对象的:

静态是内存共享的。在方法区(元空间)中

静态是属于类的。

//		Math.PI
//		Arrays.sort();
// 

7. 构造方法:

实例化的时候会调用构造方法: new 构造方法();

构造方法与类名相同,没有返回修饰符。

目的: 初始化属性

  • 默认构造方法是无参数构造,编译生成
	public Student() {
		super(); // 默认第一行,可以不写。  调用父类构造方法
	}
	public Product(String proNO, String name, double price) {
		super();
		this.proNO = proNO;
		this.name = name;
		this.price = price;
	}
  • 当有参数构造方法, 默认无参构造失效
    • 规约: 有参数构造方法,就必须补无参数构造方法。

8: 方法传参数:

※:

值类型传参 : java八个基本类型 + String : 值的副本

对象类型传参:除了值类型: 地址的副本


	public static void main(String[] args) {
		
		// 值类型传递
		int a = 1;
		changea(a);
		System.out.println(a);
		
		// 对象类型传值
		Product pro1 = new Product("可乐", 3.0);
		changeprice(pro1);
		System.out.println(pro1.price);
	}

	private static void changeprice(Product pro1) {
//		pro1 = new Product("雪碧", 4);
		pro1.price = 6.0;
	}

	private static void changea(int a) {
		a = 10;
		System.out.println(a);
	}

值传递:

在这里插入图片描述

对象传递:

在这里插入图片描述

posted @ 2021-04-10 12:20  剑心空明  阅读(3)  评论(0编辑  收藏  举报  来源