day03-Problems

Code Problems 03

写成String public demo报错了,顺序不对,为什么不能这么写,这么写的依据是什么?

Java 方法的声明必须遵循固定语法结构,访问修饰符(如 public)必须在返回值类型(如 String)之前,顺序不能颠倒。
正确的语法结构(以方法为例)是:
[访问修饰符] [其他修饰符,如static] 返回值类型 方法名(参数列表) { 方法体 }

4个访问修饰符private(low,仅当前类可以访问,同包都不行)public(跨包访问protected(同包+不同包子类可以访问),还有默认修饰符(包访问权限

  1. 统一代码结构,降低编译器解析成本
  2. 提升代码可读性

关于this.name name的疑问?

对比维度 return name; return this.name = name;
操作的变量 方法的「局部变量 name」(参数传入的值) 先给「成员变量 this.name」赋值,再返回
是否修改成员变量 不修改!成员变量 this.name 保持原值 会修改!把局部变量的值赋给成员变量
返回的内容 直接返回参数传入的「局部变量值」 先执行「赋值操作」,再返回「赋值后的值」(赋值表达式的结果就是 “被赋的值”)
实际作用 仅 “传递参数值”(方法无副作用,不改变对象状态) 既 “给对象的成员变量赋值”,又 “返回赋值结果”(有副作用,改变对象状态)
public class Test {
    public static void main(String[] args) {
        Person p = new Person(); // 此时成员变量 this.name 是默认值 null

        // 情况1:如果 demo 方法是 return name;
        String result1 = p.demo("张三"); 
        System.out.println(result1); // 输出:张三(返回的是参数值)
        System.out.println(p.getName()); // 输出:null(成员变量没被修改,还是默认值)

        // 情况2:如果 demo 方法是 return this.name = name;
        String result2 = p.demo("李四"); 
        System.out.println(result2); // 输出:李四(返回的是赋值后的值)
        System.out.println(p.getName()); // 输出:李四(成员变量被修改了)
    }
}

Summary:this是指向创建的实例的,所以当我们返回this.name=name时是给实例的属性赋值,如果返回name就仅仅返回输入的属性,没有对实例有什么影响。

即不是传参就是赋值,不要想当然的认为。

关于sout在非static函数外报错?

认为sout和c等语言的print一样可以在各处使用,其实不然。

java的直接作用域只能放[成员变量,方法声明,代码块声明],不能放执行性代码(如sout,赋值语句等)。其实也就是说1对于sout这些执行性代码来说只能放在方法或者代码块内,直接放在类的直接作用域会出错。sout等应该在被执行的时候调用而不是直接使用。面向对象的,类是装东西的,方法代码块才是负责干活的

🐾

posted @ 2025-08-29 21:51  Billmu  阅读(5)  评论(0)    收藏  举报