1、 数组工具类Arrays
1.1 Arrays.toString(数组)
- 把数组里的数据,用逗号连接成一个字符串。【值1,值2】
1.2 Arrays.sort(数组)
-
对数组排序,对于基本类型的数组使用优化后的快速排序算法,效率高。
-
对引用类型数组,使用优化后的合并排序算法。
1.3 Arrays.copyOf(原数组,新的长度)
-
把数组复制成一个指定长度的新数组。
-
新数组长度大于原数组,相当于复制,并增加位置
-
新数组长度小于原数组,相当于截取前一部分数据
package cn.tedu.arrays;
import java.util.Arrays;
import java.util.Random;
//这个类用来测试数组的工具类Arrays
//TODO 思考 为什么sort()没有返回值 / copyOf()为什么有返回值?---原因是?数组一旦创建,长度不可改变。
public class Test1_Arrays {
public static void main(String[] args) {
//method(); // Arrays.toString() 显示数组里的值
//method2();//sort()排序
method3();//copyOf()复制
}
private static void method3() {
//1、静态创建数组
int[] a = {1,2,3,4,5};
//2、复制数组
//Arrays.copyOf(m,n)--m是要复制的原数组,n是新数组的长度
//其中的参数n -- 如果新数组的长度 > 原数组的长度 -- 会新增位置 -- 扩容
int[] b = Arrays.copyOf(a,10);
System.out.println( Arrays.toString(b) );//[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]
//其中的参数n -- 如果新数组的长度 < 原数组的长度 -- 会截取数组 -- 缩容
int[] c = Arrays.copyOf(a, 3);
System.out.println( Arrays.toString(c) );//[1, 2, 3]
}
private static void method2() {
//1、创建数组
int[] a = new int[10];
//2、给数组中的元素赋值
for (int i = 0; i < a.length; i++) {
a[i] = new Random().nextInt(100);
}
//3、给数组排序
Arrays.sort(a);//默认是从小到大的顺序,默认使用了快速排序算法
//4、查看元素
System.out.println( Arrays.toString(a) );
}
private static void method() {
// 1、创建数组
int[] a = new int[5];
// 2、存随机值
for (int i = 0; i < a.length; i++) {
a[i] = new Random().nextInt(100);
}
// 3、打印数组里的值
// for (int i = 0; i < a.length; i++) {
// System.out.println(a[i]);
// }
System.out.println(a); // [I@7852e922 内存中为数组分配的地址值
// [27, 98, 35, 63, 78] 将指定的数组里的元素拼接成字符串显示
System.out.println(Arrays.toString(a));
}
}
2、 面向对象
2.1 概念
- 所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的执行者变成了指挥者。
- 面向对象是基于面向过程而言的。
- 我们经常说的面向对象的编程实现(OOP,Object Oriented Programming)
- 万物皆对象。
2.2 三大特征
- 封装性,把相关的数据封装成一个“类”组件。
- 继承性,是子类自动共享父类属性和方法,这是类之间的一种关系
- 多态,增强软件的灵活性和重用性
3 、 类和对象
- 3.1 类
- Java语言最基本单位就是类,类似于类型。
- 类是一类事物的抽象。
- 可以理解为模板或者设计图纸。
3.2 对象
- 每个对象具有三个特点:对象的状态,对象的行为和对象的标识。
- 对象的状态用来描述对象的基本特征。
- 对象的行为用来描述对象的功能。
- 对象的标识是指对象在内存中都有一个唯一的地址值用来和其他对象区分开来。
- 类是一类事物的抽象,对象是具体的实现。
汽车类:
- 实现可以有奥迪汽车对象、有宝马汽车对象。
3.3 类和对象的关系
-
计算机语言是用来描述现实世界事物的。成员属性+成员方法
-
那怎么通过java语言描述呢?通过类来描述事物,把事物的属性当做成员变量,把行为当做成员方法。
分析手机事物:
- 特征:颜色,尺寸,品牌,价格…
- 功能:打电话,发短信,听音乐…
- 类:手机类,抽取相同的特征和功能…
- 对象:可以按照模板生产很多个手机,比如1号手机对象,包含特有的成员变量和成员方法…
package cn.tedu.oop;
//一个.java源文件中,可以定义多个类,只不过要求,只能有一个类被public修饰,而且被public修饰的类名就是.java的文件名
//这个类用来创建类和使用类
public class Test2_Class {
public static void main(String[] args) {
//测试使用类,我们知道类是抽象的,具体使用是要产生对象来使用
//通过new关键字创建对象
//p是引用类型的变量(默认值是null),p保存的是手机对象在内存中的地址值
Phone p = new Phone();
//可以调用模板里的方法
p.call();
p.music();
p.message();
//设置属性值
p.color = "red";
p.size = 5.5;
p.pinpi = "HUAWEI";
p.price = 5688.6;
//查看属性值
System.out.println(p.color);
System.out.println(p.size);
System.out.println(p.pinpi);
System.out.println(p.price);
}
}
//创建手机类 -- 用来描述手机事物
//通过class关键字创建类
//生活中,可以通过 特征+行为 描述事物
class Phone{
//程序中,怎么体现? 特征 -- 成员属性/成员变量 行为 -- 成员方法
//特征:颜色,尺寸,品牌,价格 -- 成员变量
String color ; //默认值是null
double size ; //默认值是0.0
String pinpi ; //默认值是null
double price ; //默认值是0.0
//行为:打电话,发短信,听音乐 -- 成员方法
//方法的修饰符 方法的返回值 方法名(参数列表){方法体}
public void call() {
System.out.println("call()...");
}
public void message() {
System.out.println("message()...");
}
public void music() {
System.out.println("music()...");
}
}
3.4 对象在内存中的存储
- Java把内存分成5大区域,我们重点关注栈和堆。
- 一般来讲局部变量存在栈中,方法执行完毕内存就被释放
- 对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
- 每个堆内存的元素都有地址值
- 对象中的属性都是有默认值的
4、 封装
- 封装是指隐藏对象的属性和实现细节
- 仅仅对外提供公共的访问方式。
>好处:
1、 提高安全性
2、 提高重用性
> private关键字:
是一个权限修饰符,用于修饰成员变量和成员函数。被私有化的成员只能在本类中访问。
>创建学生类,创建学生对象测试
package cn.tedu.privatedemo;
//这个类用来测试封装
public class Test5_Private {
public static void main(String[] args) {
//创建对象使用类
Student s = new Student();
// s.coding();//已经被封装,除了本类,外界无法看到更无法使用
s.study();
//设置值
// s.name="蔡徐坤";//报错,因为name属性已经被private了,外界无法直接设置值
s.setName("王一博");
s.age=18;
//获取值
// System.out.println(s.name);//报错,因为name属性已经被private了,外界无法直接获取值
System.out.println( s.getName() );
System.out.println(s.age);
}
}
//创建Student类
class Student{
//特征+行为
//private实现封装,访问权限仅在本类中
private String name;
//提供公共的setXxx() -- 设置值
public void setName(String n){
name = n ;//拿着n给name赋值
}
//提供公共的getXxx() -- 获取值
public String getName(){
return name;
}
//TODO 封装以下的属性
int age;
String addr;
String country;
double salary;
String subject;//学科
int sno;//学号
//封装
private void coding() {
System.out.println("coding()...");
}
public void study() {
// coding();私有数据在本类中可以访问
System.out.println("study()...");
}
}
5 、 构造方法
概念
- 构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。
- 对象的创建就是通过构造方法来完成,其功能主要是完成对象的创建或者对象的初始化。当类实例化new一个对象时会自动调用构造方法。
- 构造方法和其他方法一样也可以重载(方法名相同+参数列表不同)。