方法的重载_面向对象
课前回顾:
1.二维数组
动态初始化:
数据类型[][] 数组名 = new 数据类型[二维数组长度][每一个一维数组长度]
静态初始化:
数据类型[][] 数组名 = {{},{},{}}
存储元素:
数组名[i][j] = 元素值
i:代表的是一维数组在二维数组中的索引位置
j:代表的是元素在一维数组中的索引位置
获取元素:
数组名[i][j]
遍历:先遍历二维数组,再遍历一维数组
获取二维数组长度:数组名.length
2.方法
a.概述:功能
b.作用:好维护,提高了复用性
c.
无参无返回值
public static void 方法名(){
方法体
}
方法名()
有参无返回值
public static void 方法名(参数){
方法体
}
方法名(具体的值)
无参有返回值
public static 数据类型 方法名(){
方法体
return 结果
}
数据类型 变量名 = 方法名()
有参有返回值
public static 数据类型 方法名(参数){
方法体
return 结果
}
数据类型 变量名 = 方法名(具体的值)
3.注意事项:
a.方法不调用不执行 main方法是jvm调用的
b.方法之间不能嵌套的
c.方法的执行顺序只和调用顺序有关
d.void 和 return 结果 不能共存的
void 能和return 共存
e.一个方法中,不能连续return多个返回值(if else 除外)
f.调用方法时,要和下面定义好的方法完全匹配
今日重点:
1.会使用debug调试代码
2.什么是面向对象思想
3.为什么要是会用面向对象思想
4.怎么使用面向对象
5.会用代码描述我们世间万物的类
6.会在一个类中使用别的类中的成员->面向对象
7.会new对象,点别的类的成员
8.知道成员变量和局部变量的区别
9.会定义静态成员,以及会调用静态成员(类名直接点)
第一章.debug
1.概述:代码调试手段(工具)
2.作用:
a.可以让代码一行一行的执行
b.能够清楚的看到代码中每一个成员值的变化
c.找bug
3.怎么使用:
a.在想开始执行的那一行左边单击一下,点出一个红色大点点->断点(再单击一下,断点消失)
b.右键运行->点击debug运行
第二章.类和对象
1.面向对象的介绍
1.面向对象思想介绍:Java
自己的事情自己不做,找别人(对象)帮我去做事儿
2.面向过程:C
自己每一步都亲力亲为
3.举例:
洗衣服:
面向过程:找盆->放水->洗衣粉->搓衣板->搓搓搓
面向对象:找洗衣机
带饭:面向对象
点外卖:面向对象
4.总结:
a.什么是面向对象思想:自己的事情自己不做,找别人(对象)帮我去做事儿
我们在开发的过程中,我们使用已经被封装好的功能,直接帮我们完成需求
b.为什么使用面向对象思想?
为了让实现需求的过程更加的简单
c.怎么使用呢?
new 对象 点方法
d.使用面向对象的目的:
调用对象中的方法,去帮我们完成需求,怎么实现的,底层不用我们关注
5.特点:
由执行者变成了指挥者
将复杂的事情简单化
更符合人类思考逻辑->懒
6.补充:
如果想要在一个类中使用另外一个类中的成员,就需要使用面向对象思想
new 点
2.类和对象
2.1类
1.概述:一类事物的抽象表示形式(先会使用代码去描述世间万物的类,具体在开发中怎么使用,封装部分再说)
2.定义:
属性(成员变量)
定义位置:类中方法外
作用范围:整个类
定义格式:数据类型 变量名
成员变量有默认值:
整数 0
小数 0.0
字符 '\u0000'
布尔 false
引用 null
行为(功能,成员方法):这一类事物都能干啥
定义时去掉static,其他的方面和之前学的一模一样
public class Person {
//属性
String name;
int age;
//成员方法(行为)
public void eat(){
System.out.println("人要吃饭");
}
public void drink(){
System.out.println("人要喝水");
}
public void la(){
System.out.println("人要炸坑");
}
public void sa(){
System.out.println("人要嘘嘘");
}
}
public class Animal {
//属性
String name;
String brand;
String color;
int age;
//成员方法
public void sleep(){
System.out.println("睡觉");
}
public void jump(){
System.out.println("跳起来");
}
}
public class Phone {
//属性(成员变量)
String brand;
String system;
int price;
String color;
//成员方法
public void call(){
System.out.println("打电话");
}
public void message(){
System.out.println("发短信");
}
}
2.2对象
1.概述:一类事物的具体体现
2.怎么使用:
a.导包:import 包名.类名
如果两个类在同一个包下,使用时无需导包
如果两个类不在同一个包下,就需要导包了
lang包下的类使用时无需导包
b.创建对象:想使用哪个类中的成员,就new哪个类的对象
类名 对象名 = new 类名()
c.调用成员:想调用哪个成员,就用哪个类的对象去点哪个成员
对象名.成员变量名 = 值
对象名.方法名(参数)
public class Person {
//属性
String name;
int age;
//成员方法(行为)
public void eat(){
System.out.println("人要吃饭");
}
public void drink(){
System.out.println("人要喝水");
}
public void la(){
System.out.println("人要炸坑");
}
public void sa(){
System.out.println("人要嘘嘘");
}
}
public class Test {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);
System.out.println(person.age);
//给属性赋值
person.name = "柳岩";
person.age = 36;
System.out.println(person.name);
System.out.println(person.age);
System.out.println("===============");
person.eat();
person.drink();
}
}
3.练习
需求:用代码去描述一个动物类,在测试类中为动物类中的属性赋值,并且调用动物类中的功能
public class Animal {
//属性
String name;
String brand;
String color;
int age;
//成员方法
public void sleep(){
System.out.println("睡觉");
}
public void jump(){
System.out.println("跳起来");
}
}
public class Test02 {
public static void main(String[] args) {
Animal animal = new Animal();
animal.name = "球球";
animal.brand = "二哈";
animal.color = "黑白";
animal.age = 4;
System.out.println(animal.name+"..."+animal.brand+"..."+animal.color+"..."+animal.age);
//调用方法
animal.sleep();
animal.jump();
}
}
总结:
什么时候使用面向对象:一个类想使用别的类的成员
怎么使用: new 呀 点呀
3.匿名对象的使用
/*
等号左边Animal 代表的是 对象的类型
animal 是 对象名
等号右边new Animal -> 真正将对象创建出来
*/
Animal animal = new Animal();
1.概述:没有名字的对象-> new Animal()
2.使用的时候要注意:
如果涉及到赋值了,不要用
如果单纯的想调用一个方法,可以考虑用
3.总结:
匿名对象固然好使,但是不要贪杯(开发中尽量别使用)
public class Test01 {
public static void main(String[] args) {
//原始方式
Person person = new Person();
person.name = "柳岩";
System.out.println(person.name);
System.out.println("=================");
new Person().name = "涛哥";
System.out.println(new Person().name);
new Person().eat();
}
}
4.一个对象的内存图
public class Phone {
String brand;
int price;
public void call(String name){
System.out.println("给"+name+"打电话");
}
public void message(){
System.out.println("发短信");
}
}
public class Test01 {
public static void main(String[] args) {
Phone phone = new Phone();
System.out.println(phone);//地址值
System.out.println(phone.brand);//null
System.out.println(phone.price);//0
phone.brand = "苹果";
phone.price = 9299;
System.out.println(phone.brand);//苹果
System.out.println(phone.price);//9299
phone.call("柳岩");//给柳岩打电话
phone.message();//发短信
}
}
5.两个对象的内存图
6.两个对象指向同一片空间内存图
第三章.成员变量和局部变量的区别
1.定义位置:重点
成员变量:类中,方法外
局部变量:在方法中,或者参数位置
2.作用范围:重点
成员变量:整个类都能使用
局部变量:只能在自己的方法中使用,别的方法使用不了
3.默认值:重点
成员变量:有默认值,可以直接使用
局部变量:没有默认值,需要手动赋值之后才能使用
4.在内存位置:
成员变量:在堆中
局部变量:在栈中
5.生命周期:
成员变量:随着对象的创建而产生,随着对象的消失而消失
局部变量:随着方法的调用而产生,随着方法的执行完毕而消失
第四章.static关键字
1.static的介绍以及基本使用
1.概述:静态的,关键字
2.特点
a.被static修饰的成员随着类的加载而加载
b.被static修饰的成员由于跟着类到内存,所以优先于对象存在
c.被static修饰的成员属于类成员,不属于对象成员(成员方法,成员变量)
d.根据static所在的类创建出来的对象,都会共享这个静态成员
3.使用:
类名直接调用
public class Student {
int id;
String name;
//static String classRoom = "521";
static String classRoom;
public static void eat(){
System.out.println("吃饭");
}
}
public class Test {
public static void main(String[] args) {
//调用静态成员->类名直接调用
Student.classRoom = "520";
Student student = new Student();
student.id = 1;
student.name = "郭靖";
//student.classRoom = "520";
System.out.println(student.id);
System.out.println(student.name);
//System.out.println(student.classRoom);
System.out.println(Student.classRoom);
System.out.println("=====================");
Student student2 = new Student();
student2.id = 2;
student2.name = "黄蓉";
//student2.classRoom = "520";
System.out.println(student2.id);
System.out.println(student2.name);
System.out.println(student2.classRoom);
System.out.println("=============");
//类名直接调用
Student.eat();
}
}
2.static修饰成员的访问特点
1.静态的能直接访问非静态成员吗?(成员指的是成员变量,成员方法)
静态成员:属于类
非静态成员:属于对象
静态成员先存在在内存,优先于非静态成员存在
[不能]
如果静态的想访问非静态的咋整?
new对象,调用
2.非静态成员能直接访问静态成员吗?
可以
同类:
直接调用
new对象调用
类名直接调用
不同类:
new对象调用
类名直接调用
3.静态成员能直接访问静态成员吗?
可以
同类:
直接调用
new对象调用
类名直接调用
不同类:
new对象调用
类名直接调用
4.非静态成员能直接访问非静态成员吗?
可以
同类:
直接调用
new 对象调用
不同类:
new对象调用
总结:
只要是访问非静态成员,不管在不在同一个类中,都可以new对象调用
只要是访问静态成员,不管在不在同一个类中,都可以类名直接调用
第五章.方法参数
快速将一段代码抽到方法中:ctrl+alt+m
1.基本数据类型做方法参数传递
基本类型作为方法参数传递的时候
传递的是值,不是变量本身
一个方法内部的局部变量的变化,不会影响其他方法中的局部变量
public class Test01 {
public static void main(String[] args) {
int a = 10;
int b = 20;
method(a,b);
System.out.println(a);//10
System.out.println(b);//20
}
public static void method(int a, int b) {
a+=10;
b+=10;
System.out.println(a);//20
System.out.println(b);//30
}
}
2.引用数据类型做方法参数传递
1.参数为引用数据类型时,传递的是地址值
所以一个方法内部引用类型的值改变了,会影响到其他方法中的这个引用类型的值
public class Test02 {
public static void main(String[] args) {
int[] arr = {10,20};
method(arr);
System.out.println(arr[0]);//20
System.out.println(arr[1]);//30
}
public static void method(int[] arr) {
arr[0]+=10;
arr[1]+=10;
System.out.println(arr[0]);//20
System.out.println(arr[1]);//30
}
}
String做方法参数传递比较特殊:单记(字符串在底层是一个被final修饰的数组,字符串定义之后,在内存中无法改变)