一.数组
数组的定义
1.动态初始化:
数据类型[] 数组名 = new 数据类型[数组的长度]
int[] arr=new int[6];
2.静态初始化:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3…}
3.简化静态初始化:
数据类型[] 数组名 = {元素1,元素2,元素3…}
静态初始化和动态初始化的区别
动态初始化:
定义的时候,没有具体的元素,但是直接定义了长度
当我们定义数组的时候,不知道将来要存什么元素的时候
静态初始化:
定义的时候,有具体的元素,但是可以根据存储的元素的个数确定长度
当我们定义数组的时候,确定了存什么元素
获取元素
注意:直接输出数组名,是一个地址值
地址值:内存中的位置
格式:数组名[索引值]
索引值:
每一个元素在数组中的位置,编号
0开始,最大索引值是数组的长度-1
特点:唯一,不重复
代码演示:
public class Demo02Array {
public static void main(String[] args) {
String[] arr = {"张无忌","赵敏"};
System.out.println(arr); //[Ljava.lang.String;@ba4d45
String num1 = arr[1];
System.out.println(num1);
System.out.println(arr[2]);
System.out.println(arr[0]);
}
}
获取数组长度
格式:
数组名.length
数组的遍历
String[] arr = {"哈哈","呵呵","啦啦"};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
数组的异常
1.数组索引越界异常:ArrayIndexOutOfBoundsException
原因:操作的数组超出了最大索引,或者最大长度
2.空指针异常:NullPointerException
原因:定义数组的时候,给了null,然后操作数组中的元素
3.代码演示:
public class Demo01ArrayProblem {
public static void main(String[] args) {
/* int[] arr = new int[3];
arr[3] = 10;
*/
String[] arr = {"哈哈","呵呵","嘻嘻嘻"};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
int[] arr1 = null;
System.out.println(arr1[0]);
}
}
二.方法
无参数无返回值的方法(最简单)
1.定义格式:public static void 方法名(){
方法体;
}
2.使用:(调用):
方法名();
3.注意事项:
a.方法不调用不执行
b.方法之间不能嵌套
c.方法的执行顺序只和调用顺序有关
d.调用方法的时候,要和下面的方法完全匹配(方法名,参数的数据类型,参数的个数)
e.void和return 值不能共存(void代表无返回值,return 值代表将结果返回,并且结束方法)
但是void能和return共存(return代表的结束方法)
f.一个方法中,不能连续写两个return
g.返回值类型要和返回得结果类型一致
有参数无返回值的方法
1.定义格式:
public static void 方法名(参数){
方法体
}
2.调用:
方法名(具体的值)
有参数有返回值的方法:
1.定义格式:
public static 返回值类型 方法名(参数){
方法体;
return 值;
}
2.调用
数据类型 变量名 = 方法名(具体的值)
System.out.println(方法名(具体的值))
3.注意:
返回给了谁,调用的谁.
三.类和对象:
1.类是一类事物的描述,是抽象的
对象是一类事物的具体体现,是具体的
2.定义类
类的定义:
属性(类的信息):成员变量–>定义在类中,方法外的,只要是本类中的方法都可以使用这个变量
注意:定义的时候不用初始化,有默认值
数据类型 变量名;
行为(类都能做什么):成员方法-->去掉static
public 返回值类型 方法名(参数){
方法体
}
public class Person {
String name;
int age;
public void eat(){
System.out.println("太阳当空照");
}
}
创建对象:
格式:类名 对象名 = new 类名();
Person p = new Person();
四.成员变量和局部变量的区别
成员变量和局部变量的区别
类的定义位置[重点]
成员变量:类中,方法外
局部:方法中
作用范围[重点]
成员:整个类
局部:自己的方法
初始化不同[重点]
成员:有默认,不用初始化
局部:必须先初始化,再使用
内存的位置[了解]
成员:在堆中
局部:栈中
生命周期[了解]
成员:随着对象的创建而产生,随着对象的消失而消失
局部:随着方法的进栈而存在,随着方法的结束为结束
五.封装:
1.面向对象三大特征:封装 继承 多态
2.封装:让事物封装起来,不然给外界直接使用,外界看不见
3.封装的体现:
1.private
2.将代码放在方法中
4.赋值和取值
为成员变量赋值:setxxx()
获取成员变量值:getxxx()
5.this:
this代表的当前对象:谁调用this所在的方法,this就代表谁
this的使用:this.成员变量名 this.方法名(参数)
this的作用:区分重名的成员变量和局部变量
六.构造:
构造方法(构造器)
特点:
1.方法名和类名一致
2.没有static
3.没有返回值
无参构造(空参构造):
public 类名(){
}
作用:
1.用来直接new对象的,new对象之后,会执行空参构造
2.注意:
类中的空参构造方法,不写,java默认给一个
有参构造(满参构造)
public 类名(参数列表){
方法体
}
作用:
1.new对象
2.为属性赋值
3.执行有参构造
注意:
1.有参构造java不会默认给,需要我们自己手写
2.如果写了有参构造,java将不再提供空参构造,所以,一般我们有参的,无参的都写上
定义一个标准的类
属性
构造
get/set
自动生成构造以及get/set快捷键:alt+insert
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
----------------------------------------------------
public class Test {
public static void main(String[] args) {
//利用set为属性赋值
Person p1 = new Person();
p1.setName("张三");
p1.setAge(18);
System.out.println(p1.getName());
System.out.println(p1.getAge());
//利用有参构造赋值
Person p2 = new Person("哈哈",30);
System.out.println(p2.getName());
System.out.println(p2.getAge());
}
}