day04method-Fight
day04method
方法的规范
注意流程规范化和命名的准确性,确保其鲁棒性
类名首字母大写,其后用驼峰命名法,方法正常驼峰命名法
设计规范
方法是某个功能的语句块的集合,设计时确保方法的原子性即一个方法实现一个功能,利于后期扩展
method语法
[修饰符] 返回类型 方法名(形参){语句块-函数体}
修饰符就是之前说的public等四个(若有则优先写)
返回类型即void,int,String等等
推荐单一出口,即return写在最后,便于提高可读性和降低逻辑错误
method
package com.example.demo.method;
public class Demo01 {
public static void main(String[] args) {
Demo01 demo01 = new Demo01();
int ad=demo01.add2(1,2);//写错 add2 ad=new add2(1,2),搞错了.之前说的就是:非类的static方法需要new才能使用,是指对
System.out.println(ad);
System.out.println(demo01.add(1,2));//警告。
}
//add
public static int add(int a,int b){//类的静态方法static可以直接使用
return a+b;
}
public int add2(int a,int b){
return a+b;
}
}
Q:警告?不能通过new的对象来使用类里的static方法吗?
A: static 成员属于类本身,而非类的实例对象,即使通过实例访问能正常运行,也不符合设计规范
static 成员的本质:
static 修饰的方法 / 变量是 “类级别的资源”,在类加载时就会初始化,所有实例共享同一份,不依赖于任何对象存在。
警告的目的是提醒你:这种写法容易误导开发者,让人误以为 static 成员和实例相关,违背了 static 成员的设计初衷。
new的对象里面有这个static方法的吧?
严格来说:没有。
实例对象只存储非静态成员(实例变量、实例方法),static 成员存储在类的 “方法区”,不属于任何实例。即使通过 new Demo01()
创建对象,这个对象也不会 “包含” static 方法,只是编译器允许你通过对象引用间接调用(本质还是调用类的方法)。
Summary: “静态归类,实例归对象”—— 静态成员用类名调用,实例成员用对象调用
Java 中只有值传递,没有引用传递。(有点懂-)
这里的 “值” 需根据参数类型区分:基本类型传递 “值的副本”,引用类型传递 “引用地址的副本”。
**基本类型:传递 “值的副本” **
-
特点:方法内修改参数值,不影响原变量。
-
原理:参数是原变量值的一份拷贝,两者在内存中是独立的两块空间。
引用类型:传递 “引用地址的副本”
- 特点:方法内通过参数修改对象的属性,会影响原对象;但修改参数的 “引用指向”,不影响原引用。
- 原理:引用变量存储的是对象在堆内存中的地址。传递时,拷贝的是这个 “地址”,因此原引用和参数引用指向同一个对象;但如果给参数重新赋值(指向新对象),原引用的指向不变。
day04method
方法的规范
注意流程规范化和命名的准确性,确保其鲁棒性
类名首字母大写,其后用驼峰命名法,方法正常驼峰命名法
设计规范
方法是某个功能的语句块的集合,设计时确保方法的原子性即一个方法实现一个功能,利于后期扩展
method语法
[修饰符] 返回类型 方法名(形参){语句块-函数体}
修饰符就是之前说的public等四个(若有则优先写)
返回类型即void,int,String等等
推荐单一出口,即return写在最后,便于提高可读性和降低逻辑错误
method
package com.example.demo.method;
public class Demo01 {
public static void main(String[] args) {
Demo01 demo01 = new Demo01();
int ad=demo01.add2(1,2);//写错 add2 ad=new add2(1,2),搞错了.之前说的就是:非类的static方法需要new才能使用,是指对
System.out.println(ad);
System.out.println(demo01.add(1,2));//警告。
}
//add
public static int add(int a,int b){//类的静态方法static可以直接使用
return a+b;
}
public int add2(int a,int b){
return a+b;
}
}
Q:警告?不能通过new的对象来使用类里的static方法吗?
A: static 成员属于类本身,而非类的实例对象,即使通过实例访问能正常运行,也不符合设计规范
static 成员的本质:
static 修饰的方法 / 变量是 “类级别的资源”,在类加载时就会初始化,所有实例共享同一份,不依赖于任何对象存在。
警告的目的是提醒你:这种写法容易误导开发者,让人误以为 static 成员和实例相关,违背了 static 成员的设计初衷。
new的对象里面有这个static方法的吧?
严格来说:没有。
实例对象只存储非静态成员(实例变量、实例方法),static 成员存储在类的 “方法区”,不属于任何实例。即使通过 new Demo01()
创建对象,这个对象也不会 “包含” static 方法,只是编译器允许你通过对象引用间接调用(本质还是调用类的方法)。
Summary: “静态归类,实例归对象”—— 静态成员用类名调用,实例成员用对象调用
Java 中只有值传递,没有引用传递。(有点懂-)
这里的 “值” 需根据参数类型区分:基本类型传递 “值的副本”,引用类型传递 “引用地址的副本”。
**基本类型:传递 “值的副本” **
-
特点:方法内修改参数值,不影响原变量。
-
原理:参数是原变量值的一份拷贝,两者在内存中是独立的两块空间。
引用类型:传递 “引用地址的副本”
- 特点:方法内通过参数修改对象的属性,会影响原对象;但修改参数的 “引用指向”,不影响原引用。
- 原理:引用变量存储的是对象在堆内存中的地址。传递时,拷贝的是这个 “地址”,因此原引用和参数引用指向同一个对象;但如果给参数重新赋值(指向新对象),原引用的指向不变。
🐼