数组的排序:
排序的算法:
冒泡排序
插入排序
快速排序
等…

数组元素的排序:
在java.util.Arrays.sort(要排序的数组的名称);
会对源数组做升序排序,会改变源数组
比如:
int[] ages={20,22,30,35,25}
java.util.Arrays.sort(ages);
//20 22 25 30 35

数组的复制:
使用System.arraycopy()方法可以实现数组的复制
方法的定义:
public static void arraycopy(Object src,
int srcpos,
Object dest,
int destpos,
int length)
方法的说明:
src:源数组
srcpos:源数组中的起始位置
dest:目标数组
destpos:目标数组中的起始位置
length:要复制的数组元素的数量
比如:
int[] a=new int[]{1,2,3,4,5};
int[] a1=new int[8];
System.arraycopy(a,1,a1,0,4);
结果:
a1数组中
2,3,4,5,0,0,0,0

使用java.util.Arrays类中的copyOf方法对数组进行复制
方法的定义:
类型[] newArrayName=Arrays.copyOf(类型[] original,
int newLength);
特点:
生成的新数组是源数组的副本
newLength小于源数组,则进行截取
newLength大于源数组,则用0或null进行填充
所产生的新数组可以大于源数组的长度,属于数组扩容,
所产生的新数据可以小于源数组的长度,属于数组缩容
比如:
int[] a={1,2,3,4,5};
int[] a1=Arrays.copyOf(a,6);
结果:
a1数组中的内容:
1,2,3,4,5,0

二维数组:
语法:
数据类型[][] 二维数组的名称=new 数据类型[行数][列数];
比如:
int[][] a=new int[3][4];//声明数组并在堆空间中申请12整型空间

a[0] a[0][0] a[0][1] a[0][2] a[0][3]
a[1] a[1][0] a[1][1] a[1][2] a[1][3]
a[2] a[2][0] a[2][1] a[2][2] a[2][3]

二维数组实际上是由多个一维数组组成
实际上上面的二维数组是由 a[0] a[1] a[2]三个一维数组组成

用对象存储不同类型的数据,至少比数组的方式更进一步
面向对象:
重要的引言:
面向对象不是某个阶段就能学习精通的,但是要面向对象的基本
知识点要理解,只是用的不灵活,也会应用到某个实际项目中
无论什么样的项目,都可以用面向象+设计模式+面向对象的设计原则
可以设计出很好的程序的架构.
为什么要学习面向对象
-能够把现实世界物或事转到计算机中

如何掌握面向对象
首先要掌握类:
类:
类是一种数据结构(逻辑结构),组织多个数据类型的一种结构
数组做不到的,类能做到,对数据管理的一种进步

类中只存储数据过于单一,所以需要在类中放置方法,
由方法来操作数据

类的特点:
封装:用类把数据和操作数据的方法封装在一起
继承:类和类之间是有继承关系,是为让子类复用父类的属性或方法
多态:是面向对象的灵魂

什么是类(class):就是一个普通的名词
1.类就是一个数据结构(逻辑结构)
变量只能存储一个数据类型的数据: int i=100;
数组能存储多个相同数据类型的数据 int[] a=new int[10];
数组也是一种数据结构
类能存储多个不同类型的数据,还可以有操作数据的多个方法
比如:
public class Student{
int age;//学生的年龄
String name;//学生的名字
String stuNo;//学生的学号
public void study(){}//学生具备学习的能力
public void dajia(){}//学生具备打架的能力
}

2.类是一种特殊的由程序员自定义的数据类型
  int i=3;以i为理由申请int类型大小的内存空间,存储的值是3
  int[] a=new int[10];以a为理由,申请int类型的10个空间,有默认值0
  public class Student{
	int age;//学生的年龄
	String name;//学生的名字
	String stuNo;//学生的学号
	public void study(){}//学生具备学习的能力
	public void dajia(){}//学生具备打架的能力		  
  }
  Student stu1=new Student();以stu1为理由,申请Student类类型这么大空间
     stu1里的age值是0
	 stu1里的name值是null
	 stu1里的stuNo值是null 
  
  
3.有类这种数据类型,可以通过这种数据类型在堆空间中申请空间
   Student stu=new Student();
   可以用类类型申请无数个内存空间,且每个空间对应一个学生信息
   
4.基于前三点,可以把现实世界的物或事转到计算机中的类上
  用类这种类型,在内存中申请内存空间,用于存储数据

使用面向对象或类,最难的事是把现实世界的物或事转换到计算机中
通俗的说法,就是把现实世界的物或事对应到计算机中的"类"上
如果了解或理解了现实世界的物或事,做成java的类就很容易
如果不了解或理解现实世界的物或事,做成java的类就很困难
实际java语法,创建一个类是很简单
public class 类名{
//最难的是在类中写属性或方法
//多个属性
//多个方法
//符合单一职责 此类只表达一件事
}
类的定义用java语法写起来很简单,难的是写什么样的属性和方法

结论:
现实世界物或事—>通过程序员的抽象成类(属性和方法)
—>用类在内存中申请(new)内存空间,并存储数据
—>从内存中取出对象的数据,根据需求处理数据
—>把处理后的结果现实在界面(控制台,网页,安卓app等…)


程序员要做面向对象,
首先要考虑的是在类中放置什么样的属性和方法
类里能放:
多个属性:代表数据
多个方法:代表功能
其次要掌握对象
对象和类在jvm内存中的存储机制:
jvm把内存分为三个主要部分
方法区:存储的是类的定义,静态数据,常量池,由jvm来控制管理

堆区:数组申请的空间,对象申请的空间,总之new出来的空间
堆空间中存储的是数组数据,对象的数据,可以通过程序操作的

栈区:堆中的对象空间中存储的是属性数据,没有方法,
判断对象是否相等,主要判断的是对象中的属性的值是否相等
所以对象就是数据的载体,对象中没有方法,只有数据
通过对象打点调用方法,实际上使用的方法区中的类定义里方法
方法中使用哪个对象的数据,取决于方法是被哪个对象调用的


第一段:
为什么要使用面向对象
为什么要有类
什么是类
第二段:
类和对象在内存中的存储机制
第三段
解决数据如何存储
解决数据的安全问题

数据如何存储:
类中的属性变成私有数据
私有数据通过公有的方法来访问,因为方法可以写逻辑
公有的方法是有规律的 getter and setter
getXXX and setXXX
数据的安全性问题:
在公有方法中的逻辑,来保证私有数据正确性和安全性