JAVAGUIDE(学习笔记1)

该博客介绍了Java编码准则,包括恰当使用Private、Public,区分原始型与参照型,用equals()比较对象相等,及时将不用变量置为null等。还提及常量使用、clone方法、finalize方法、数组复制等操作的注意要点,以及interface使用、构造函数定义等建议。
部署运行你感兴趣的模型镜像

Javaコーディングガイドライン

1Private,Public使用恰当。

2:原始和参照型的区别:

原始型(byte,boolen等)实例化的时候不要分配内存空间,所以速度和内存使用上比参照型要好。

   原始型的默认值是根据类型而定,而参照型的默认值是NULL

    ③原始型保存时他的值,而惨参照型保存的是他的地址,所以下面两段程序的含义不一样

int i = 5;

int j = i;

由于保存的是值,所以I的改变不会影响到j

Integer k = new Integer(5);

Integet l = k;

保存的是地址,k的改变会影响到l

所以在函数当参数传递的时候要特别注意。

import java.awt.Point;
 
class BadSample {
    void modifyValue(int value, Point point){
        value = 10;
        point.setLocation(55, 77);
    }
 
    void printValue(int value, Point point){
        StringBuffer buffer = new StringBuffer();
        buffer.append(value);
        buffer.append(" : ");
        buffer.append(point);
        System.out.println(buffer);
    }
 
    public static void main(String[] args){
        int intValue = 0;
        Point point = new Point(0, 0);
        BadSample sample = new BadSample ();
        sample.printValue(intValue, point);
        sample.modifyValue(intValue, point);
        sample.printValue(intValue, point);
    }
}
 
【実行結果】
0 : java.awt.Point[x=0,y=0]
0 : java.awt.Point[x=55,y=77]
    可以看出,modifyValue()中对value的改变并没有改变main中的intValue的值。对于原始型参数的传递,可以看成是传递的是值得拷贝,对于参照型参数的传递,函数内的改变会影响到他的值。
 
3:尽量使用本地变量
    访问本地变量比访问类变量更节约时间。
class BadSample {
    private int result;
 
    void sum(int[] values) {
        for (int i=0; i < values.length; i++){
            result += values[i];    //違反
        }
    }
}
 
class FixedSample {
    private int result;
 
    void sum(int[] values) {
        int sum = result;  
for (int i=0; i < values.length; i++){
            sum += values[i];
        }
        result = sum;
    }
}
 

4:用equals()比较object的相等。

   特别注意String,我曾经犯过,很难查错。

5:不使用的变量及时负值null,避免浪费空间。

class BadSample {
    public static void main(String[] args){
        TestClass test = new TestClass();
 
        String firstString = “first”;
        test.method(firstString);
        ・・・
 
        String secondString = “second”;
        test.method(secondString);
        ・・・
 
        String thirdString = “third”;
        test.method(thirdString);
        ・・・                  //違反
    }

}

 

class FixedSample {
    public static void main(String[] args){
        TestClass test = new TestClass();
 
        String firstString = “first”;
        test.method(firstString);
        ・・・
        firstString = null;
 
        String secondString = “second”;
        test.method(secondString);
        ・・・
        secondString = null;
 
        String thirdString = “third”;
        test.method(thirdString);
        ・・・
        thirdString = null;         //修正済み
    }

}

4:常量的使用场合

class FixedSample {
    private static final int ARRAY_SIZE = 1000;
 
    int[] getArray() {
        return new int [ARRAY_SIZE];  //修正済み
    }

private static final String START = “start”;

 

System.out.println( START );

 

public static final String LINE_SEPARATOR =

System.getProperty(line.separator);

                         :

System.out.println( “改行” + LINE_SEPARATOR );

 
}
 
5:变量初期化的时候附初值。
6:对list做循环的时候,用Iterator,效率比较高。
    public void doXXX(List l) {
   for (Iterator i  = l.iterator(); i.hasNext();) {
        User u = (User) i.next();
}
}
7:不要在for循环中改变循环子。
public class BadSample{
     int badSampleMethod(){
         int sum = 0;
         for (int i = 0; i < 100; i++){
             i += 3;  // 違反
             sum += i;
         }
     }
 }
 

public class FixedSample{

     int fixedSampleMethod(){

         int sum = 0;

         // 修正済み

         for (int i = 0; i < 100; i += 4){

             sum += i;

         }

         return sum;

     }

 }
 
8:如果一个实例变量在程序中不会改变其值,尽量定义为final,因为final是同步的,编译效率比较高。
9:在循环中尽量不要New一个OBJ,那样会不停的分配资源。
public class BadSample {
     public void badSampleMethod(int max){
         for (int i = 0; i < max; i++) {
             StringBuffer sampleBuffer = 
                           new StringBuffer();  
// 違反
             sampleBuffer.append(“loop: “);
             sampleBuffer.append(i);
             System.out.println(
                    sampleBuffer.toString());
         }
     }
 }
public class FixedSample {
     public void fixedSampleMethod(int max){
         StringBuffer sampleBuffer = 
                             new StringBuffer();  
// 修正済み
         for (int i = 0; i < max; i++) {
             sampleBuffer.append(“loop: “);
             sampleBuffer.append(i);
             System.out.println(
                     sampleBuffer.toString());
 
             sampleBuffer.setLength(0);  
// 初期状態に戻す
         }
     }
 }
 
10equals()hashCode()要同时覆盖

public final class IDNumber {

    private final int id;

    public IDNumber(int id){

        this.id = id;

    }

 

    public boolean equals(Object object){

        boolean isEqual = false;

        if (object == this) {

            isEqual = true;

        } else if (object instanceof IDNumber){

            IDNumber idNum = (IDNumber)object;

            if (idNum.id == this.id) {  // idの値が等しければtrueを返す

                isEqual = true;

            }

        }

 

        return isEqual;

    }

}

  public int hashCode() {

      int result = 17;

      result = 37*result + id;  // id属性を利用しているので、同じidであれば同じ値が返る

      return result;

  }

11:调用一个classclone方法,该class必须要实现cloneable类。覆盖clone方法的时候,一定要调superclone方法。

12:覆盖finalize方法时,一定要调superfinalize方法。

13:数组复制用System.arraycopy()

public class FixedSample{

     int[] copyArray(int[] array){

         int length = array.length;

         int[] copy = new int[length];

         System.arraycopy(array, 0,

                          copy, 0, length); // 修正済み

         return copy;

     }

 }

14:由于interface可以实现多重继承,而抽象类不可以,所以建议尽量使用interface

15:定义一个默认的构造函数,这样可以用Class.newInstance()动态的生成一个对象。

16:避免ifmethod()==true);直接写ifmethod())效率比较高。

17:尽量不要在方法内改变或返回参数,因为可能改变外部参数本身的值,最好在方法中new一个obj返回。

18:尽可能的重载toString方法,可以使程序的调试更方便。

19:不想被覆盖的方法写成final,这样别人就不能对其进行覆盖了。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

<think>嗯,用户想找JavaGuide相关的技术资料或项目文档。首先,我需要回忆一下之前提供的引用内容。引用1、2、4、5都提到了JavaGuide是一个Java开发的综合指南,包含基础、集合、多线程、JVM等内容。引用3提到了RPC框架项目的学习笔记,但可能不是用户主要需要的。 用户可能想要的是如何获取和查阅JavaGuide的文档,所以需要给出具体的步骤,比如克隆项目、查看核心文档文件如JavaGuide.md和README.md。另外,用户可能对项目结构和使用方法感兴趣,所以需要说明这些文件的作用,比如配置指南、贡献指南等。 还要考虑用户可能需要扩展学习,比如相关的技术专题,比如认证授权、Spring框架、JVM等,这些在引用2和5中有提到。此外,用户可能有兴趣参与贡献或查看项目源码,所以需要提供Github链接和贡献指南的信息。 需要确保回答结构清晰,分点列出,并按照用户的要求使用正确的中文和LaTeX格式,但看起来用户的问题不涉及数学公式,所以可能不需要使用LaTeX。不过根据系统指令,所有行内数学表达式需要用$...$,但这里可能用不上。需要检查是否有变量或技术术语需要用LaTeX,但可能不需要。 最后,生成相关问题时要围绕JavaGuide的使用、内容结构、技术专题、源码结构、应用场景等,确保问题有针对性,帮助用户进一步探索。</think>### JavaGuide 项目文档与技术资料获取指南 #### 一、核心文档获取方式 1. **官方仓库地址** JavaGuide 项目托管于 GitHub,可通过以下命令克隆项目: ```bash git clone https://github.com/Snailclimb/JavaGuide.git ``` 项目文档集中在 `JavaGuide.md` 和 `README.md` 文件中[^1][^4]。 2. **核心文档结构** - **`JavaGuide.md`**:主文档,包含: - Java 基础、集合框架、多线程、JVM 等核心技术解析 - Spring/SpringBoot 实战指南[^2] - 认证授权、OAuth 2.0、SSO 等安全专题[^5] - **`docs/` 目录**:补充技术文档存放位置[^1] - **`CONTRIBUTING.md`**:贡献指南(代码/文档协作规范)[^1] #### 二、技术专题资料 1. **重点内容节选** - **JVM 调优**:内存模型、GC 算法、性能监控工具 - **分布式系统**:RPC 框架设计(参考 SocketRpcClient/Server 实现)[^3] - **新版本特性**:JDK 8~17 核心语法改进 2. **实战案例分析** ```java // Spring Boot 启动类示例 @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 完整配置示例可在 `spring-boot-demo` 子模块查看[^2]。 #### 三、扩展学习资源 1. **关联技术栈** - 微服务架构:Dubbo/Spring Cloud 对比 - 认证授权:Cookie-Session vs JWT 实现方案[^5] - 性能优化:MySQL 索引策略、Redis 缓存设计 2. **在线查阅方式** - 本地访问:克隆后打开 `index.html` 浏览结构化文档 - 在线阅读:官方维护的 https://javaguide.cn/
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值