0510课堂笔记--数组-面向对象

1. 数组的工具类

Arrays.toString()–查看数组元素

Arrays.sort()–数组元素排序

Arrays.copyOf()–复制数组/数组的扩容 /缩容

Arrays.copyOfRange()–指定首位元素复制原数组

package cn.tedu.arrays;

import java.util.Arrays;

//本类测试数组的 工具类Arrays
public class TestArraysSortAPI {
	public static void main(String[] args) {
		// f1();//测试toString--查看数组元素
		// f2();//测试 sort--数组元素排序
		f3();// 测试 copyof--复制数组 /数组的扩容/缩容
	}

	public static void f3() {
		// 3. 创建测试数组
		/** 数组一旦创建,长度不可改变 */
		int[] from = { 1, 2, 3, 4, 5 };
		// 3.1 数组的普通复制
		/** 两个参数:(original, newLength) 要复制谁,复制的长度 */
		int[] to = Arrays.copyOf(from, 5);
		System.out.println(Arrays.toString(to));

		// 3.2 数组的扩容
		/**
		 * 扩容:扩充 容量,并不是修改远数组 先创建对应长度的新数组,复制原数组的数据,其余位置为int默认值0
		 */
		int[] to2 = Arrays.copyOf(from, 10);
		System.out.println(Arrays.toString(to2));

		// 3.3 数组的缩容
		/**
		 * 扩容:减少容量,并不是修改远数组 先创建对应长度的新数组,复制原数组前面部分数据,类似于截取
		 */
		int[] to3 = Arrays.copyOf(from, 3);
		System.out.println(Arrays.toString(to3));

		// 3.4 指定首尾元素复制原数组
		// (original, from, to)复制的是下标[2,4)位置上的元素a(2)--a(3)
		int[] to4 = Arrays.copyOfRange(from, 2, 4);
		System.out.println(Arrays.toString(to4));
	}

	// 2. 创建f2()测试Arrays.sort
	public static void f2() {
		// 2.1 准备一个乱序数组
		int[] a = { 9, 55, 2, 355, 223, 0 };
		// 2.2 用工具类方法对a数组进行排序
		/**
		 * sort()方法是底层优化过的快速排序算法 是直接对无序数组进行排序,排序后a数组就是有序数组
		 */
		Arrays.sort(a);
		System.out.println(Arrays.toString(a));
	}

	// 1. 创建f1()用来测试Arrays.toString(数组名)
	public static void f1() {
		// 定义长度为3的String类型的数组
		String[] s = new String[3];
		s[0] = "A";
		s[1] = "B";
		s[2] = "C";
		System.out.println(s);// [Ljava.lang.String;@15db9742 这是地址值
		System.out.println(Arrays.toString(s));// [A, B, C] 具体元素
	}
}

2. 面向对象 类 对象 封装

2.1 面向对象概念

面向对象和面向方法都是编程思想

2.2 面向对象的三大特征

封装 继承 多态

2.2 类和对象

类:Java最基本的单位,类似于类型,类是一类事物的抽象,可以理解为模版或者设计图纸

对象:三个特征:状态,行为和标识

状态–基本特征–成员变量

行为–功能–方法

标识–对象内存在唯一的地址值和其他对象区分

类是一类事物的抽象,对象是具体的实现

2.3 类的创建练习

package cn.tedu.oop;

//本类用于练习面向对象
/**分析手机这一类事物--通过类来描述
 * 属性:品牌 价格 颜色 尺寸
 * 功能:打电话 发微信 看视频
 * */
/**
 * 在一个java文件中可以写多个class,但是被public修饰的只能有一个 而且这个公共类的名字必须 与文件名保持一致
 */
public class TestCreateClass {
	// 2. 创建入口函数
	public static void main(String[] args) {

		// 3. 在main()方法中通过new关键字来创建对应类的对象
		Phone p = new Phone();

		// 4. 通过.来完成对象功能的调用
		p.call();// 调用打电话的方法
		p.message();
		p.video();

		// 5. 通过.来查看对象的属性值
		System.out.println(p.brand);
		System.out.println(p.color);
		System.out.println(p.price);
		System.out.println(p.size);

		// 6.创建第二个对象
		Phone p2 = new Phone();

		// 8.给p2对象设置属性值
		p2.color = "五彩斑斓的黑";
		p2.brand = "banana";
		p2.price = 6666.66;
		p2.size = 233;

		// 7. 通过p2对象 查看属性值
		System.out.println(p2.brand);
		System.out.println(p2.color);
		System.out.println(p2.price);
		System.out.println(p2.size);

		// 9.通过p2对象,调用模版里的功能
		p2.call();
		p2.message();
		p2.video();
	}
}

/**
 * 通过class关键字描述一个类型 类是一类事物的抽象,抽象的规定这一类事物的特征与行为
 */
//1.创建手机类
class Phone {
	// 特征(属性)--用类的成员变量来 描述--位置:类里方法外
	String brand;// 品牌
	double price;
	double size;
	String color;

	// 功能(行为)--用类的方法来描述--修饰符 返回值类型 方法名(参数列表 ){方法体}
	public void call() {
		System.out.println("正在打电话");
	}

	public void message() {
		System.out.println("发微信");
	}

	public void video() {
		System.out.println("看视频");
	}
}

2.4 对象在内存中的储存

Java把内存分成5大区域,我们重点关注栈和堆。

一般来讲局部变量存在栈中,方法执行完毕内存就被释放
对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
每个堆内存的元素都有地址值
对象中的属性都是有默认值的
TIPS: 栈与队列指的是一种数据的结构。
栈:先进后出(FILO – First In Last Out)
队列:先进先出(FIFO – First In First Out)
在这里插入图片描述

p2.brand = “HUAWEI”;
就是先到栈内存中找到p2中保存的唯一的地址值
然后根据地址值找到对应的Phone对象,并对其对应的属性值进行修改
p2.eat();
也是先到栈内存中找到p2中保存的唯一的地址值
然后根据地址值找到对应Phone对象,执行Phone对象的eat()方法

创建对象时,内存经历了什么?

1.在栈内存中开辟一块空间,存放引用类型变量p,并把p压入栈底

2.在堆内开辟一块空间,存放Phone对象

3.完成对象的初始化,并赋予默认值

4.给初始化完毕的对象赋予唯一的地址值

5.把地址值交给引用类型变量p保存

2.5 封装

封装是隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式,比如类和方法
好处:

  1. 提高安全性

  2. 提高重用性

    private关键字:是一个权限修饰符 ,可以用来修饰成员变量和成员方法.被私有化的成员只能在本类中访问

2.5.1 封装练习

package cn.tedu.oop;

//本类用于测试封装
public class TestPrivate {
	public static void main(String[] args) {
		// 4. 创建学生类对象--new
		Student s = new Student();
		// 5. 初步测试学生类对象s
		// s.eat();//调用s对象的方法
		s.study();
		s.sno = 441513;
		s.name = "程序猿";
		// s.subject="java培优";//The field Student.subject is not visible
		System.out.println(s.name);// 调用s对象的name属性,查看它的值
		System.out.println(s.sno);
		// System.out.println(s.subject);
		// 8. 通过student类中提供的get/set方法操作属性值subject
		s.setSubject("JAVA CGB");// 调用对外公共赋值方式,用set.
		System.out.println(s.getSubject());// 调用对外提供的公共查看方式,用get.
	}
}

//1.通过关键字class创建 学生类--用来描述学生这一类型--属性+行为 
/**
 * 封装:通过private关键字(权限修饰符 )来修饰成员变量/成员方法 被修饰的成员实现了私有化,访问权限只能在本类中访问
 */
class Student {
	public char[] setSubject;
	// 2. 定义属性--成员变量
	String name;// 姓名
	int sno;// 学号
	/* private对subject进行了私有化,只能在本class里面使用,外面的main方法就无法访问了 */
	private String subject;// 科目

	/** 6. 对外提供公共的属性值设置方式 */
	public void setSubject(String s) {
		subject = s;// 将用户设置的变量s赋值给subject
	}

	/** 7. 对外提供公共的属性值查看方式 */
	public String getSubject() {
		return subject;
	}

	// 3. 定义功能--方法
	public void study() {
		System.out.println("正在学习JAVA~");
	}

	public void eat() {
		System.out.println("干饭人");
	}
}
package cn.tedu.oop;

//本类用于oop综合练习
public class TestTeacher {
	// 4.在公共类中,创建入口函数main()方法
	public static void main(String[] args) {
		// 5.创建Teacher对象
		Teacher t = new Teacher();
		// 6.1设置属性值:对象.set.name
		t.setName("白小纯");
		// 6.2打印获取到的属性值:对象.get.name
		System.out.println(t.getName());
	}
}

//1.创建类
class Teacher {
	// 2.1提供属性
	// 2.2对属性进行封装:private
	private String name;
	private String gender;// 性别
	private int age;
	private double salary;// 薪水

	// 3. 创建一些自己的功能方法
	public void ready() {
		System.out.println("正在备课~");
	}

	public void teach() {
		System.out.println("正在授课~");
	}

	// 2.3需要给外界提供公共的属性值设置和获取方法
	// 快捷键:右键->Source->GT全选
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public double getSalary() {
		return salary;
	}

	public void setSalary(double salary) {
		this.salary = salary;
	}
}

类–一类事物的抽象–模版

1.创建类

2.创建类的属性

3.封装类的属性

4.提供get与set方法

5.提供一些本类分功能

创建对象

通过对象的调用方法

1.可以调用set方法设置修改私有属性的值

2.可以调用get方法获取私有属性的值

3.可以调用普通的方法执行对应的功能

新单词

field 字段

visible 可见的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值