方法的重载_面向对象
课前回顾:1.二维数组动态初始化:数据类型[][] 数组名 = new 数据类型[二维数组长度][每一个一维数组长度]静态初始化:数据类型[][] 数组名 = {{},{},{}}存储元素:数组名[i][j] = 元素值i:代表的是一维数组在二维数组中的索引位置j:代表的是元素在一维数组中的索引位置获取元素:数组名[i][j]遍历:先遍历二维数组,再遍历一维数组获取二维数组长度:数组名.length2.方法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.找bug3.怎么使用:a.在想开始执行的那一行左边单击一下,点出一个红色大点点->断点(再单击一下,断点消失)b.右键运行->点击debug运行
![day06[方法的重载_面向对象] - 图1](http://jcsune.ink/upload/2021/05/1622251883577-a505eb125fc94da3b4fe32d6f66f514c.png#id=iLKQe&originHeight=580&originWidth=1279&originalType=binary&status=done&style=none)
![day06[方法的重载_面向对象] - 图2](/uploads/projects/liuye-6lcqc@vk53cd/ca27f54026a83158da3b03c379b5cad5.png)
第二章.类和对象
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();}}
![day06[方法的重载_面向对象] - 图3](/uploads/projects/liuye-6lcqc@vk53cd/088360158c867315e727cbd9a6a7cb7f.png)
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);//nullSystem.out.println(phone.price);//0phone.brand = "苹果";phone.price = 9299;System.out.println(phone.brand);//苹果System.out.println(phone.price);//9299phone.call("柳岩");//给柳岩打电话phone.message();//发短信}}
![day06[方法的重载_面向对象] - 图4](/uploads/projects/liuye-6lcqc@vk53cd/629ea25fd9dd097abb2549cb52925ea5.png)
5.两个对象的内存图
![day06[方法的重载_面向对象] - 图5](/uploads/projects/liuye-6lcqc@vk53cd/5a09645a5fb488ae8f8746cb856d7dc8.png)
6.两个对象指向同一片空间内存图
![day06[方法的重载_面向对象] - 图6](/uploads/projects/liuye-6lcqc@vk53cd/f874402a403fb039c0f18c48db4a1cd2.png)
第三章.成员变量和局部变量的区别
1.定义位置:重点成员变量:类中,方法外局部变量:在方法中,或者参数位置2.作用范围:重点成员变量:整个类都能使用局部变量:只能在自己的方法中使用,别的方法使用不了3.默认值:重点成员变量:有默认值,可以直接使用局部变量:没有默认值,需要手动赋值之后才能使用4.在内存位置:成员变量:在堆中局部变量:在栈中5.生命周期:成员变量:随着对象的创建而产生,随着对象的消失而消失局部变量:随着方法的调用而产生,随着方法的执行完毕而消失
第四章.static关键字
1.static的介绍以及基本使用
1.概述:静态的,关键字2.特点a.被static修饰的成员随着类的加载而加载b.被static修饰的成员由于跟着类到内存,所以优先于对象存在c.被static修饰的成员属于类成员,不属于对象成员(成员方法,成员变量)d.根据static所在的类创建出来的对象,都会共享这个静态成员3.使用:类名直接调用
![day06[方法的重载_面向对象] - 图7](/uploads/projects/liuye-6lcqc@vk53cd/8592b8daa4c48aeddbca6c8e779c3f43.png)
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();}}
![day06[方法的重载_面向对象] - 图8](/uploads/projects/liuye-6lcqc@vk53cd/6db70a88a0b9b16df6c196cebe3bf87c.png)
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);//10System.out.println(b);//20}public static void method(int a, int b) {a+=10;b+=10;System.out.println(a);//20System.out.println(b);//30}}
![day06[方法的重载_面向对象] - 图9](/uploads/projects/liuye-6lcqc@vk53cd/3b3bf4423e318e717ae8952b27ba8b65.png)
2.引用数据类型做方法参数传递
1.参数为引用数据类型时,传递的是地址值所以一个方法内部引用类型的值改变了,会影响到其他方法中的这个引用类型的值
public class Test02 {public static void main(String[] args) {int[] arr = {10,20};method(arr);System.out.println(arr[0]);//20System.out.println(arr[1]);//30}public static void method(int[] arr) {arr[0]+=10;arr[1]+=10;System.out.println(arr[0]);//20System.out.println(arr[1]);//30}}
![day06[方法的重载_面向对象] - 图10](/uploads/projects/liuye-6lcqc@vk53cd/6f7f3b1adccdb049edf788c3557c332f.png)
String做方法参数传递比较特殊:单记(字符串在底层是一个被final修饰的数组,字符串定义之后,在内存中无法改变)
