一、方法
1.参数和返回值使用的时机
1.参数:
当想将一个方法中的数据传递到另外一个方法中,那么被调用方法需要定义参数,调用时传递想要传递过去的数据
2.返回值:
调用方法时,想要此方法的结果,去参与其他操作,那么被调用的方法需要将自己的结果返回
public class Demo01Method {
public static void main(String[] args) {
int a = 10;
int b = 20;
/*
此时a代表的10
以及b代表的20
就传递到了method方法中
*/
method(a,b);
System.out.println("=====================");
/*
想在main方法中使用method02的结果
*/
int i = method02();
System.out.println(i);
}
public static void method(int i,int j){
System.out.println(i+j);
}
public static int method02(){
int a = 10;
int b = 20;
int sum = a+b;
return sum;
}
}
1.大家要注意:将来开发我们不可能将所有的代码放到一个main方法中;同理我们不能将所有的方法放到同一个类中;再同理,我们不能将所有的类放到同一个包中
所以为了好维护,我们应该"分包分层" -> 说白了就是通过创建不同的package,将不同的class分别存放
所以我们需要一个思想"三层架构思想"
com.atguigu.controller(表现层):专门放接收请求回响应的类
com.atguigu.service(业务层):专门放写业务逻辑的类
com.atguigu.dao(持久层):专门放和数据库打交道的类
com.atguigu.utils:专门放工具类
com.atguigu.pojo:专门放javabean
2.方法注意事项终极版
1.方法不调用不执行,main方法是jvm调用的
2.方法之间是平级关系,不能互相嵌套
3.方法的执行顺序只和调用顺序有关
4.[void]不能和[return 结果]共存,但是[void]能和[return]共存
a.void:代表方法无返回值
b.return 结果:代表有返回值 -> 先将结果返回,然后结束方法
c.return:仅仅代表结束方法
5.一个方法中只能有一个返回值,不能连续写多个return
6.调用方法的时候,如果没有此方法会报错
作为初学者:
1.先定义,再调用
2.没有返回值的-> 直接调用
3.有返回值的 -> 赋值调用
二、方法练习
1.方法练习1(判断奇偶性)
需求:
键盘录入一个整数,将整数传递到另外一个方法中,在此方法中判断这个整数的奇偶性
如果是偶数,方法返回"偶数" 否则返回"奇数"
方法名:要
参数:要
返回值:要
public class Demo03Method {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int data = sc.nextInt();
String result = method(data);
System.out.println("result = " + result);
sc.close();
}
public static String method(int n) {
if (n % 2 == 0) {
return "偶数";
} else {
return "奇数";
}
}
}
2.方法练习2(1-100的和)
需求 : 求出1-100的和,并将结果返回
方法名:要
参数:不要
返回值:要
public class Demo04Method {
public static void main(String[] args) {
int method = method();
System.out.println("method = " + method);
}
public static int method(){
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum+=i;
}
return sum;
}
}
3.方法练习3(不定次数打印)
需求:
定义一个方法,给这个方法传几,就让这个方法循环打印几次"我是一个有经验的JAVA开发工程师"
方法名:要
参数:要
返回值:不要
public class Demo05Method {
public static void main(String[] args) {
method01(10);
}
public static void method01(int n){
for (int i = 0; i < n; i++) {
System.out.println("我是一个有经验的java开发工程师");
}
}
}
4.方法练习4(遍历数组)
需求:
在main方法中定义一个数组,将数组传递到方法中,在此方法中遍历数组
public class Demo06Method {
public static void main(String[] args) {
int[] arr1 = {1,2,3,4,5};
method(arr1);//实参传递的是一个int型的数组int[]
}
public static void method(int[] arr2){
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);
}
}
}
三、方法的重载(Overload)
1.概述:
方法名相同,参数列表不同的方法,叫做重载方法
2.什么叫做参数列表不同:
a.参数个数不同
b.参数类型不同
c.参数类型的顺序不同
3.和什么无关:
a.和返回值无关
b.和参数名无关
1.需求:定义三个方法,分别求2个整数相加,三个整数相加,四个整数相加
public class Demo01OverLoad {
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){
int sum = a+b;
System.out.println("sum = " + sum);
}
public static void sum(int a, int b,int c){
int sum = a+b+c;
System.out.println("sum = " + sum);
}
public static void sum(int a, int b,int c,int d){
int sum = a+b+c+d;
System.out.println("sum = " + sum);
}
}
什么时候定义重载方法:功能一样,但是实现细节不一样
四、类和对象
1.面向对象的介绍
1.面向对象是什么:是Java语言的核心编程思想 -> 自己的事情别人(对象)做
面向过程:C语言的编程思想 -> 自己的事情自己做
2.为啥要使用面向对象思想编程:为了让事情变的简单(为了少写代码) -> 懒
有很多功能别人都提供好了,我们直接拿来用即可,一调用此功能就自动执行,我们想要的功能就完成了,其中的原理其实我们不用知道,我们只会用即可
3.什么时候用面向对象思想编程:
在一个类中想使用别的类中实现好的功能时,就需要使用面向对象思想编程
4.怎么使用面向对象思想编程:
a.new对象,点方法
b.类名直接点方法名
public class Demo01Object {
public static void main(String[] args) {
/*
nextInt方法是Scanner类中实现好的方法
我们想在Demo01Object类中使用Scanner类中的nextInt方法
就需要使用面向对象思想编程
*/
Scanner sc = new Scanner(System.in);
int data1 = sc.nextInt();
System.out.println("data1 = " + data1);
/*
nextInt方法是Random类中实现好的方法
我们想在Demo01Object类中使用Random类中的nextInt方法
就需要使用面向对象思想编程
*/
Random rd = new Random();
int data2 = rd.nextInt();
System.out.println("data2 = " + data2);
System.out.println("======================");
int[] arr = {1, 2, 3, 4, 5};
/*
toString方法是Arrays类中实现好的方法
我们想在Demo01Object类中使用Arrays类中的方法
我们就应该使用面向对象思想编程
*/
System.out.println(Arrays.toString(arr));
}
}
2.类和对象
1类(实体类)_class
1.java中的类:
a.实体类:描述的世间万物的分类,比如:人类,动物类,手机类,猫类,狗类....
b.测试类:测试代码是否能跑通的类,说白了就是带main方法的类
2.实体类:一类事物的抽象表示形式
3.实体类中的成员:
属性:这个分类都有啥 -> 成员变量
a.定义位置:类中方法外
b.定义格式:数据类型 变量名
c.成员变量有默认值:
整数:0
小数:0.0
字符:'\u0000'
布尔:false
引用:null
d.作用范围:整个类
行为:这个分类都能干啥 -> 成员方法
将之前的方法,去掉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;
int age;
//行为
public void eat(){
System.out.println("动物要吃饭");
}
public void drink(){
System.out.println("动物要喝水");
}
}
2.对象
1.对象:一类事物的具体体现
2.使用:
a.导包: import 包名.类名
如果两个类在同一个包下,想要使用对方的成员无需导包
如果两个类不在同一个包下,想要使用对方的成员需要导包
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 Demo02Object {
public static void main(String[] args) {
/*
创建对象:想要使用哪个类中的成员,就new哪个类的对象
类名 对象名 = new 类名()
*/
Person p1 = new Person();
p1.name = "涛哥";
p1.age = 18;
System.out.println(p1.name);
System.out.println(p1.age);
p1.eat();
p1.drink();
p1.la();
p1.sa();
}
}
public class Phone {
String brand;
String color;
int price;
public void call(String name){
System.out.println("给" + name + "打电话");
}
public String message(){
return "半夜涛哥给柳岩发短信,来呀!";
}
}
public class Demo03Object {
public static void main(String[] args) {
Phone phone = new Phone();
phone.brand = "华为";
phone.color = "白色";
phone.price = 9999;
System.out.println(phone.brand);
System.out.println(phone.color);
System.out.println(phone.price);
phone.call("张三");
String message = phone.message();
System.out.println(message);
}
}
3.匿名对象的使用
1.int i = 10
int:数据类型
i:变量名
10:具体的数据
2.Person p = new Person()
等号左边的Person:数据类型 相当于int
p:变量名
new Person():具体的数据,相当于10
1.匿名对象:new对象的时候没有等号左半边部分,只有new的部分
2.使用:
new 类名().成员
3.注意:
如果涉及到为属性赋值,千万不要用匿名对象
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 Demo04Object {
public static void main(String[] args) {
//原始形式new对象
Person p1 = new Person();
p1.eat();
p1.drink();
p1.name = "涛哥";
System.out.println(p1.name);
//匿名对象调用
new Person().eat();
System.out.println("=================");
new Person().name = "柳岩";
System.out.println(new Person().name);
}
}
4.一个对象的内存图
public class Phone {
String brand;
int price;
public void call(){
System.out.println("打电话");
}
}
public class Demo01Object {
public static void main(String[] args) {
Phone p1 = new Phone();
System.out.println(p1);//地址值
System.out.println(p1.brand);//null
System.out.println(p1.price);//0
p1.brand = "华为";
p1.price = 9999;
System.out.println(p1.brand);//华为
System.out.println(p1.price);//9999
p1.call();
}
}
5.两个对象的内存图
p1和p2都是new出来的,所以会开辟不同的空间,地址值也不一样,所以修改一个空间中的数据不会影响另外一个空间中的数据
6.两个对象指向同一片空间内存图
p2是p1直接赋值的,所以p1和p2的地址值是一样的,所以操作p2就会影响p1的数据
五、成员变量和局部变量的区别
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(name);
System.out.println(i);
int j;
//System.out.println(j);
}
public void drink(){
System.out.println(name);
//System.out.println(i);
}
}
六、总结
标签:Java,int,void,System,Day06,零到,println,public,out From: https://blog.csdn.net/NJG1013/article/details/144998779记忆汇聚成一条长河,将我们紧紧联系在一起。它流经你,穿过你,带着你不断向前,不断超越。