`

为什么java要用get,set方法替代域的直接调用?

阅读更多

今天看Think in java,在看到方法调用的别名问题时,想到老师说要用get,set方法替代域的直接调用,想来还是很有好处的。

如下:

class Letter{

    char c;

}

public class PassObject{

    static void f(Letter letter){

        letter.c='z';

    }

    public static void mian(String[] args){

        Letter l = new Letter();

        l.c = 'a';

        System.out.println("l.c:" + l.c);

        f(l);

        System.out.println("l.c" + l.c);

    }

}

 

其输出的结果为:
lc:a

lc:z

当在进行复制操作时,可能有很多地方都可以修改函数的值,当发现有错误的时候,你很难确定它是在什么地方别修改的,可读性不太好。

而如果使用get,set方法则复制操作使用set方法,当值发生改变的时候,必然会在set函数中发生,可读性更好,更安全。

分享到:
评论

相关推荐

    ActionForm里的get和set方法

    Struts框架在调用set方法时,会尝试进行类型转换,将字符串类型的请求参数转换为ActionForm中属性期望的数据类型。如果转换失败,例如用户输入的不是一个有效的数字,Struts会抛出一个TypeMismatchException。...

    BeanMapper:比BeanUtils.copyProperties更快

    一个BeanUtils.copyProperties的小型快速替代。 起因 由于BeanUtils(Spring或Apache Commons)的copyProperties实现是利用反射实现的,它在大量调用时具有比较严重的性能问题。 BeanMapper通过javassist类库实现在...

    Java反射经典实例

    1. 性能问题:反射操作比直接调用方法慢,因此在性能敏感的代码中应谨慎使用。 2. 安全风险:反射可能绕过访问控制,导致安全问题。在处理不受信任的输入时需格外小心。 3. API稳定性:反射操作的对象可能是不稳定...

    java8 API 文档

    集合接口(如`List`, `Set`, `Map`)新增了工厂方法,可以直接创建并初始化集合,如`List.of()`和`Map.of()`,这使得代码更加简洁。 9. **平行流** 除了顺序流,Java 8还引入了并行流,它可以在多核处理器上并行...

    Java企业面试题整理及答案

    可以使用 `Character` 类的静态方法 `toString()` 来将数字转换为字符,或者使用 `String.valueOf()` 方法。 **25. 如何去小数点前两位,并四舍五入。** 可以使用 `Math.round()` 函数结合乘除运算来实现,或者...

    java实现多次HttpURLConnection共享session

    String cookieHeader = headers.get("Set-Cookie").get(0); // 解析cookieHeader,例如:JSESSIONID=123456; Path=/; HttpOnly // 使用CookieManager的CookiePolicy接受所有Cookie cookieManager.getCookieStore...

    java反射性能测试分析.doc

    - **优化API调用**:直接使用Java反射API(如`Constructor.newInstance()`、`Field.set()`)而不是依赖第三方库,可以避免额外的性能损耗,尽管这通常需要编写更多的代码。 综上所述,Java反射机制虽然带来了强大的...

    基于Java的实例源码-COM中间件 JACOB.zip

    5. 操作属性和方法:可以使用`get`和`set`方法访问和修改COM对象的属性,`invoke`方法调用方法。例如,`var sheet = obj.get("ActiveSheet")`获取当前活动工作表,`sheet.invoke("Name", "NewSheetName")`将当前工作...

    Java1.8 API离线文档

    3. **方法引用来优化Lambda表达式**:在某些情况下,我们可以使用方法引用来替代Lambda表达式,如`Collections.sort(names, String::compareToIgnoreCase)`,这里的`String::compareToIgnoreCase`就是方法引用。...

    Java的泛型是什么?怎么用.pdf

    当调用泛型方法时,编译器会根据上下文自动推断出具体的类型,这个过程称为类型推断。例如: ```java Box<Integer> integerBox = new Box(); Box<String> stringBox = new Box(); ``` 在这里,`integerBox` 和 `...

    深入Java核心 Java中多态的实现机制编程资料

    3. **调用的方法也必须被声明为基类的一个成员**:这意味着子类重写的方法需要与父类的方法具有相同的签名。 4. **基类和派生类中对应的方法的签名必须相同**:包括方法名、参数列表以及返回类型。 5. **基类和派生...

    java sql 普通用法

    2. **创建连接对象**:使用`DriverManager.getConnection()`方法建立与数据库的连接。此方法需要数据库URL、用户名和密码作为参数。 ```java Connection con = DriverManager.getConnection("jdbc:mysql://...

    java-handles-kata:Java反射和不安全的替代方法-MethodHandle和VarHandle API-修复代码卡塔中损坏的测试

    这就是为什么Java引入了MethodHandle和VarHandle API作为更高效、更安全的替代方案。 MethodHandle API是Java 7引入的,它提供了一种类型安全的方式来调用方法。MethodHandle是一个引用,可以被视为一个指向特定...

    java1.8英文api.zip

    4. **方法引用来替代 Lambda**:除了使用 Lambda,还可以通过方法引用直接将已存在的方法作为函数式接口的实现。如 `Arrays.sort(list, Comparator.comparing(String::length))`。 5. **Optional 类**:为了解决空...

    Java 8 API Docs

    Java 8 API Docs是Java开发人员的重要参考资料,它包含了Java Development Kit (JDK) 8的所有公共类、接口、枚举和注解的详细说明。这些文档提供了对新特性的深入理解,帮助开发者充分利用Java 8的功能。以下是Java ...

    java中的日期处理类总结.pdf

    此外,在Java中,随着时间的发展,已经推荐使用java.time包中的新类,如LocalDate、LocalDateTime等,来替代Date、Calendar和SimpleDateFormat类,因为新的类更加清晰易用,支持ISO-8601标准,并且考虑了线程安全等...

    java1.8api开发文档

    2. **方法引用来代替lambda**:除了lambda表达式,Java 8还引入了方法引用,它可以将某个方法的签名直接用作lambda表达式。这使得代码更加简洁,特别是当需要调用已存在的方法时。 3. **Stream API**:Stream API是...

    Java面试题.txt

    为什么需要GC? GC(Garbage Collection)是自动内存管理的一部分,负责回收不再使用的对象所占用的内存空间。Java中,当对象不再有任何引用指向它时,GC会自动识别并回收这些对象,释放内存,避免内存泄漏。 ####...

    Java JDK 8学习笔记(简体中文) - 2015第1版

    它是一个可以为null的容器对象,如果值存在则isPresent()返回true,调用get()会返回该对象。这样可以避免空指针异常,提高代码的健壮性。 5. **日期和时间API的改进**:在Java 8中,引入了新的java.time包,包含了...

Global site tag (gtag.js) - Google Analytics