一、数组
1.数组概念
- 数组是存储同一种数据类型多个元素的容器。
- 数组既可以存储基本数据类型,也可以存储引用数据类型
2.数组的定义格式
- 格式1:数据类型[] 数组名;
- 格式2:数据类型 数组名[];
3.数组初始化
所谓初始化:
就是为数组中的数组元素分配内存空间,并为每个数组元素赋值
数组的初始化方式
- 第一种初始化(动态):初始化时只指定数组长度,由系统为数组分配初始值。
int[] arr = new int[3]
定义了一个int类型的数组,这个数组中可以存放3个int类型的值
- 第二种初始化(静态):初始化时指定每个数组元素的初始值,由系统决定数组长度。
int[] arr = new int[]{1,2,3}
定义了一个int类型的数组,这个数组中可以存放3个int类型的值,并且值分别是1,2,3
4.获取数组中的元素
数组中的每个元素是有编号的,编号从0开始,最大的编号是数组的长度-1
通过数组名和编号的配合使用我们就可以获取数组中指定编号的元素值
怎么配合的呢?编号的专业叫法:索引
获取元素的格式:数组名[索引]
//数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[]{1,2,3};
System.out.println(“arr[0]:”+arr[0]);//1
5.Java中的内存分配
Java 程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈 存储局部变量
堆 存储new出来的东西
方法区 (后面补充)
本地方法区 (和系统相关)
6.数组操作的两个常见小问题
- 数组索引越界异常ArrayIndexOfBoundsException
访问到了数组中不存在的索引时发生 - 空指针异常NullPointerException
数组引用没有指向对象,却在操作对象中的元素时
package com.itheima_04;
/*
* 两个常见小问题:
* ArrayIndexOutOfBoundsException:数组索引越界异常
* 如何产生的呢?我们访问了不存在的索引。
*
* NullPointerException:空指针异常
* 如何产生的呢?null是指不再指向堆内存的数据,而我们还在访问堆内存的数据
*/
public class ArrayDemo {
public static void main(String[] args) {
//定义数组
int[] arr = {1,2,3};
//访问数组中的元素
//System.out.println(arr[3]);
//引用数据类型:类,接口,数组
//常量:null,它是可以赋值给引用数据类型的,表示该引用不再指向堆内存的数据
arr = null;
System.out.println(arr[1]);
}
}
7.数组常见问题及练习
7.1遍历数组
//定义一个数组
int[] arr = {11,22,33,44,55};
//数组遍历
for(int x=0; x<arr.length; x++) {
System.out.println(arr[x]);
}
7.2数组操作之获取最值
//写代码获取数组的最大值(最高分)
int max = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
//写代码获取数组的最小值(最低分)
int min = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] < min) {
min = arr[x];
}
}
//写代码求数组中的元素和(总分)
int sum = 0;
for(int x=0; x<arr.length; x++) {
sum += arr[x];
}
//平均分:(总分-最高分-最低分)/(arr.length-2)
int avg = (sum - max - min)/(arr.length-2);
二、方法
1.方法定义及格式
定义
简单的说:方法就是完成特定功能的代码块
在很多语言里面都有函数的定义 , 函数在Java中被称为方法
格式
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
函数体;
return 返回值;
}
写一个方法首先有两点需要明确
- 返回值类型 明确功能结果的数据类型
- 参数列表 明确有几个参数,以及参数的类型
/*
* 需求:求两个数据之和的案例
*
* 两个明确:
* 返回值类型:int
* 参数列表:int a,int b
*/
public static int sum(int a,int b) {
int c = a + b;
return c;
}
2.方法的重载
- 方法重载概述
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。 - 方法重载特点
与返回值类型无关,只看方法名和参数列表
在调用时,虚拟机通过参数列表的不同来区分同名方法
public class MethodDemo {
public static void main(String[] args) {
//定义两个变量
int a = 10;
int b = 20;
//求和
int result = sum(a,b);
System.out.println("result:"+result);
//定义变量
int c = 30;
//int result2 = sum2(a,b,c);
int result2 = sum(a,b,c);
System.out.println("result2:"+result2);
}
public static float sum(float a,float b) {
return a + b;
}
//求三个数据的和
/*
public static int sum2(int a,int b,int c) {
return a + b + c;
}
*/
public static int sum(int a,int b,int c) {
return a + b + c;
}
//求两个数据的和
public static int sum(int a,int b) {
/*
int c = a + b;
return c;
*/
return a + b;
}
}
三、面向对象
1.类与对象
类和对象的概念
a:类:是一组相关的属性和行为的集合(我们班所有的同学都具备相同的属性和行为,比如:姓名,年龄,学习,这样就把所有的学生成为学生类)
b:对象:是该类事物的具体体现(说某个同学时,他都具备自己特有的属性和行为)
c:举例:
类 学生
对象 具体的某个学生就是一个对象
比如:车是一个类,具体的开的奔驰、宝马,就是对象
2.对象创建的过程
3.private关键字由来及其使用
private关键字:
是一个权限修饰符。
可以修饰成员(成员变量和成员方法)
被private修饰的成员只在本类中才能访问。
4.this关键字
this关键字的由来
this:代表所在类的对象引用
记住:方法被哪个对象调用,this就代表那个对象
this关键字的使用
局部变量隐藏成员变量(局部变量和成员变量重名)
5.构造方法
作用
给对象的数据进行初始化
格式
方法名与类名相同
没有返回值类型,连void都没有
没有具体的返回值
public static void main(String[] args) {
//如何调用构造方法呢?
//通过new关键字调用
//格式:类名 对象名 = new 构造方法(...);
Student s = new Student();
}
修饰符 构造方法名(参数列表) { }
有参构造方法:
public Student() {}
无参构造方法:
public Student(String name,intage) {
this.name = name;
this.age = age;
}
注意事项
- 如果你不提供构造方法,系统会给出默认构造方法
- 如果你提供了构造方法,系统将不再提供
- 构造方法也是可以重载的