day6-小白学习JAVA---方法_面向对象
day6-小白学习JAVA---方法_面向对象
- 一、方法
- 1、方法介绍
- 2、无参无返回值方法
- 3、有参无返回值方法
- 4、无参有返回值方法
- 5、有参有返回值方法
- 6、方法的重载
- 二、面向对象
- 1、类和对象
- 1.1、类(实体类)---class
- 1.2、对象
- 1.3、练习
- 2、匿名对象
- 3、成员变量和局部变量区别
- 练习
一、方法
1、方法介绍
1.问题描述:之前所有的代码都在main方法中写,如果我们将来将所有功能的代码都放到main方法中,会显得main方法代码太多,太乱,太臃肿-> 不好维护解决:将不同功能的代码放到不同的方法中,想执行某个功能,直接调用方法名就行了,对应的代码就自动执行起来了将来维护的时候,直接找到对应的方法,就可以对其直接修改维护2.方法:拥有功能性代码的代码块将不同的功能放在不同的方法中,给每个方法取个名字,直接调用方法名,对应的方法就执行起来了,好维护3.通用定义格式:修饰符 返回值类型 方法名(参数){方法体return 结果}4.通过通用格式,分成四种方法来学习:a.无参无返回值方法b.有参无返回值方法c.无参有返回值方法d.有参有返回值方法
2、无参无返回值方法
1.无参无返回值方法定义:public static void 方法名(){方法体 -> 实现此方法的具体代码}2.调用:直接调用在其他方法中: 方法名()
3、有参无返回值方法
1.格式:public static void 方法名(数据类型 变量名){方法体}2.调用:直接调用:方法名(具体的值) -> 调用的时候要给参数赋值
public class Demo02 {public static void main(String[] args) {sum(10, 24);}public static void sum(int a, int b) {int sum = a + b;System.out.println("sum = " + sum);}}
4、无参有返回值方法
1.格式:public static 返回值类型 方法名(){方法体return 结果}
public class Demo03 {public static void main(String[] args) {//打印调用System.out.println(sum());//赋值调用int res = sum();System.out.println("res = " + res);}public static int sum() {int a = 10;int b = 20;int sum = a + b;return sum;}
}
5、有参有返回值方法
1.格式:public static 返回值类型 方法名(参数){方法体return 结果}
public class Demo03 {public static void main(String[] args) {//打印调用System.out.println(sum(23, 78));// 赋值调用int res = sum(23, 45);System.out.println("res = " + res);}public static int sum(int a, int b) {int sum = a + b;return sum;}
}
6、方法的重载
1.概述:方法名相同,参数列表不同的方法
2.什么叫参数列表不同:a.参数个数不同b.参数类型不同c.参数类型顺序不同3.判断两个方法是否为重载方法,和什么无关:a.和参数名无关b.和返回值无关
public class Demo1OverLoad {public static void main(String[] args) {sum(10,20);sum(10,20,30);sum(10,20,30,40);}//两个整数相加public static void sum(int a,int b){System.out.println(a+b);}//三个整数相加public static void sum(int a,int b,int c){System.out.println(a+b+c);}//四个整数相加public static void sum(int a,int b,int c,int d){System.out.println(a+b+c+d);}
}
二、面向对象
1、类和对象
1.1、类(实体类)—class
测试类:带main方法的类,主要是运行代码的实体类:是一类事物的抽象表示形式组成部分:1.属性(成员变量):这一类事物有啥a.定义位置:类中方法外 b.作用范围:作用于当前类c.定义格式: 数据类型 变量名d.默认值:整数:0小数:0.0字符:'\u0000'布尔:false引用:null2.行为(成员方法):这一类事物都能干啥只需要将模块六所学的方法中的static干掉,其他的都一样
public class Weather {//属性-> 成员变量String date;String weather;//行为 -> 成员方法public void windy() {System.out.println("今天大风");}
}
1.2、对象
1.概述:一类事物的具体体现
2.使用:a.导包: import 包名.类名如果两个类在同一个包下,想要使用对方的成员不需要导包如果两个类不在同一个包下,想要使用对方的成员需要导包特殊包:java.lang -> 使用lang包下的类不需要导包 -> String友情提示:在学四种权限修饰符之前,尽量让两个类在同一个包下b.创建对象:想要使用哪个类中的成员,就new哪个类的对象类名 对象名 = new 类名() -> 比如: Person person = new Person()c.调用成员(成员变量,成员方法) -> 想要使用哪个类中的成员,就用哪个类的对象去点哪个成员对象名.成员变量名 = 值对象名.方法名() -> 调用的是无参无返回值方法对象名.方法名(实参) -> 调用的是有参无返回值方法数据类型 变量名 = 对象名.方法名() -> 调用的是无参有返回值方法数据类型 变量名 = 对象名.方法名(实参) -> 调用的是有参有返回值方法
1.3、练习
public class Person {String nane;int age;//无参无返回值方法public void eat() {System.out.println("今天吃什么");}//有参无返回值方法public void drink(String drinkKind) {System.out.println("今天喝" + drinkKind);}//无参有返回值方法public String sex() {String sex1 = "女";return sex1;}// 有参有返回值方法public String age(String a, int b) {String name = a;int age = b;return name + "的年龄是" + age;}
}System.out.println("=========================================");public class ObjectTest {public static void main(String[] args) {//创建对象Person person = new Person();String drinkName = "杨枝甘露";person.age = 25;person.nane = "sean";System.out.println("person.nane = " + person.nane);System.out.println("person.age = " + person.age);//无参无返回值方法调用person.eat();//有参无返回值方法调用person.drink(drinkName);//无参有返回值方法调用String sex1 = person.sex();System.out.println("sex1 = " + sex1);//有参有返回值方法调用String ageName = person.age("sean", 25);System.out.println("ageName = " + ageName);}
}
2、匿名对象
public class ObjectTest {public static void main(String[] args) {//原始方式Person p = new Person();//匿名对象new Person().eat();new Person().name = "sean";System.out.println(new Person().name);//null}
}
3、成员变量和局部变量区别
1.定义位置不同(重点)a.成员变量:类中方法外b.局部变量:定义在方法之中或者参数位置2.初始化值不同(重点)a.成员变量:有默认值的,所以不用先手动赋值,就可以直接使用b.局部变量:是没有默认值的,所以需要先手动赋值,再使用3.作用范围不同(重点)a.成员变量:作用于整个类b.局部变量:只作用于自己所在的方法,其他方法使用不了4.内存位置不同(了解)a.成员变量:在堆中,跟着对象走b.局部变量:在栈中,跟着方法走5.生命周期不同(了解)a.成员变量:随着对象的创建而产生,随着对象的消失而消失b.局部变量:随着方法的调用而产生,随着方法的调用完毕而消失
public class Person {String name;//成员变量public void eat(){int i = 10;//局部变量System.out.println(i);System.out.println(name);//成员变量不用手动赋值可以直接使用,因为有默认值}public void drink(){int j;//System.out.println(j);//局部变量没有默认值,所以需要手动赋值再使用System.out.println(name);//System.out.println(i);//i是eat方法的局部变量,在drink中使用不了}
}
练习
需求:定义一个类MyDate,属性有 year month day再定义一个类Citizen(公民类),属性有 name(String类型) birthday(MyDate类型) idCard(String),为这三个属性赋值,然后将值取出来
public class MyDate {int year;int month;int day;
}System.out.println("===================")public class Citizen {String name;MyDate birthday = new MyDate();String idCard;}System.out.println("===================")public class ObjectTest {public static void main(String[] args) {Citizen citizen = new Citizen();citizen.name = "sean";citizen.birthday.day = 12;citizen.birthday.month = 23;citizen.birthday.day = 45;citizen.idCard = "12345";System.out.println(citizen.name + "," + citizen.idCard + "," + citizen.birthday.year + "," + citizen.birthday.month + "," + citizen.birthday.day);}
}