华为Java编码规范

简介: 华为Java编码规范

一、java基础语句规范


1.1 switch得default语句


必须带有default语句,除非是枚举类型。


1.2 switch的break语句


分支必须包含break语句,否则不满足条件会发生全部输出语句,不会结束。


1.3 建议 if-else-if类型条件判断


建议,最后加一个else分支。 用来解决不符合规则的输入。类似default语句。


1.4 不能用浮点类型作为循环变量


精度问题会产生意想不到的问题 浮点数由三部分组成:符号位S,指数部分E,尾数部分M float: S----E----M 1位 8位 23位 供32位

double: S----E----M 1 11 52


尾数部分为有效数字。


1.5 明确的进行类型转换


不要依赖隐士类型转换【系统自动完成,存储范围晓得类型自动向打的类型进行的转换】 强制类型转换:存储大的-->小的 进度损失 精确计算?BigDecimal来进行计算


二、类的使用规范


2.1 类名调用静态方法


不要使用实例化的方式进行调用方法 注意:使用实例化来调用静态方法时候,调用的静态方法是声明类型的静态方法,与实例实际类型无关。 当父类与子类有同名的静态方法时候,声明父类变量引用子类实例,调用静态方法时候调用的就是父类的静态方法。 父类子类有同名非静态:重写 父类和子类有同名静太:隐藏,调用的是父类的方法 使用类名来调用!!!


2.2 避免隐藏,遮蔽和遮掩


正确: 复写-->存在于子类父类之间 重载-->存在于类的内部【一组相似的行为用相同的命名】 隐藏-->子类与父类之间相同成员名,相同的方法名 遮蔽-->发生子啊类内部:一个变量方法或者类分别遮蔽在类内部具有相同名字的变量方法或者类,无法简单名引用到。 遮掩-->一个变量可以遮掩具有相同名字的一个类,只要他们都在同一个范围内:唯一一种两个名字位于不同名字空间的名字重用形式。 包括变量,包,方法或者类型。


2.3 子类复写父类方法要加Override注解


编译期发现是否已经复写父类方法


2.4 哈希集合存储对象的相关规则


HashSet是Set接口的实现,不允许重复【当有对象存储于这个类型之中,不允许修改hascode,否则内存泄漏等问题】 元素不重复是基于HashMap实现的 非线程安全 对于HashSet和HashMap,对象的hashcode至关重要,在hashcode集合内找到该对象完全依赖此值。 如果一个对象存入hash集合后,修改了参与计算的hashcode有关的字段,那么修改后的hashcode值就与最初存储进来的hashcode不同了 结果就是在集合内部找不到该对象,进而不能删除对象,造成内存泄漏。


2.5 向下转型前使用instanceof判断


自动类型转换:向上类型转换,小类型--->大类型的转换 强制类型转换:向下类型转换,大类型--->小类型的转换 老虎-->动物 没问题 动物-->老虎 有风险 需要判断instanceof


2.6 使用集合的toArray()方法转成数组

2.7 使用System.arraycopy()进行数组复制


如:for循环 复制到新数组 简单实现:System.arraycopy(),从制定位置开始,到目标函数指定位置结束 函数原型: public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);


src:源数组 srcpos:源数组的指定开始位置 dest:目标数组 desPos:目标数组起始位置 length:长度


native:是原生方法,由C、C++实现


优势:数组大小 小数组:for循环适合几百大小 大数组:arraycopy适合成千上万


三、异常处理规范


3.1 在异常条件下,保证释放已有的锁


ReentrantLock 可重入锁 互斥锁 ReentrantLock是一种递归同步机制=====等同于synchronized使用 但是ReentrantLock提供了比synchronized更强大的,灵活的锁机制,可以减少死锁的发生


ReentrantLock类能够实现线程之间的同步互斥 ReentrantLock完全互斥排他的效果,同一时间只有一个线程在执行 ReentrantLock.lock()方法后面的任务 释放锁放到finally语句块中。 这样就会解决没有异常的线程正常执行!


3.2 防止通过异常泄露敏感信息


信息泄露,如FileNotFoundException 就会发现异常,从而推测系统挖掘结构。 会打印文件的路径!!!!!黑客得知。 比进行过滤。 解决:放大IOException,catch异常进行处理!


3.3 拒绝在finally块中非正常结束


异常处理机制,最佳补充。 不要使用return,break,continue使其非正常结束! 否则会导致无法抛出异常。


四、认证考试试题

/**
 * @author 纸浅
 * @date 2020/5/29 9:34
 */
public class TestC {
    public static void main(String[] args) {
        List<String> nameList2 = new ArrayList<>();
        nameList2.add("jim");
        nameList2.add("jim");
        String[] array2 = (String[]) nameList2.toArray();
        for (int i = 0; i < array2.length; i++) {
            System.out.println("array->"+array2[i]);
        }
    }
}
编译通过,执行异常
------------------------------------------------------
/**
 * @author 纸浅
 * @date 2020/5/29 9:34
 */
public class TestC {
    public static void main(String[] args) {
        char data = '5';
        int test = 4;
        switch (data + 1){
            case '5':
                test = test+1;
            case '6':
                test = test+3;
            case  '7':
                test = test+5;
                break;
            default:
                test = test+7;
        }
        System.out.println(test);
    }
}
12
----------------------------------------------
设置 线程名字
/**
 * @author 纸浅
 * @date 2020/5/29 14:36
 */
public class ThreadName extends Thread {
    public ThreadName(String threadName){
        super(threadName);
    }
    @Override
    public void run(){
        while (true){
            System.out.println("running");
        }
    }
    public static void main(String[] args) {
        ThreadName threadName = new ThreadName("testName");
        threadName.start();
    }
}
----------------------------------------
/**
 * @author 纸浅
 * @date 2020/5/29 14:36
 */
public class ThreadName extends Thread {
    public void start(){
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
    }
    public static void main(String[] args) {
        ThreadName threadName = new ThreadName();
        threadName.start();
    }
}
编译通过
--------------------------------------------
/**
 * @author 纸浅
 * @date 2020/5/29 9:34
 */
public class TestC {
    public static void main(String[] args) {
      //int a = 3;
        int a = 1;
        switch (a){
            default:
                System.out.println(5);
                break;
            case 0:
                System.out.println(0);
            case 1:
                System.out.println(1);
            case 2:
                System.out.println(2);
                break;
        }
    }
}
5
1
2
---------------------------------------------
/**
 * @author 纸浅
 * @date 2020/5/29 9:34
 */
public class TestC extends Thread{
    public static void main(String[] args) {
        switch (3){
            default:
                System.out.println(3);
            case 0:
                System.out.println(0);
                break;
            case 1:
                System.out.println(1);
            case 2:
                System.out.println(2);
                break;
        }
    }
}
3
0
------------------------------------------


目录
相关文章
|
XML JavaScript Java
华为Java工程师面试题
华为Java工程师面试题
69 0
|
安全 Java 容器
阿里巴巴编码规范(Java)证明(下)
阿里云上有个阿里巴巴编码规范认证,我估算一下时间成本很低,多个认证也没什么坏处,就花了1分钱报了个名。这个认证报名后就可以下载链接下的编码规范,然后参加个考试应该就OK了。 共48页的规范实际上每读一遍都是要花一些时间的,因为每读一遍就会发现上面有些东西我不信。我需要去证明。过去证明过的因为JDK版本升级迭代有可能需要继续证明。下面是其中的一些证明过程。
阿里巴巴编码规范(Java)证明(下)
华为OD机试真题 Java 实现【核酸最快检测效率】【2022.11 Q4 新题】
华为OD机试真题 Java 实现【核酸最快检测效率】【2022.11 Q4 新题】
|
4月前
|
Oracle Java 关系型数据库
Java中的编码规范与代码审查实践
Java中的编码规范与代码审查实践
|
6月前
|
存储 安全 Java
12条通用编程原则✨全面提升Java编码规范性、可读性及性能表现
12条通用编程原则✨全面提升Java编码规范性、可读性及性能表现
|
6月前
|
SQL 设计模式 Java
Java编码规范与最佳实践
Java编码规范与最佳实践
147 0
|
12月前
|
XML IDE Java
Nutz Java 编码规范 (V1.0)
Nutz Java 编码规范 (V1.0)
103 0
|
架构师 Java 关系型数据库
就这样,进字节了?华为的Java面试题和八股文,真牛批
这是福利文,只喜欢看干货的朋友可以略过。 最近又赶上跳槽的高峰期(金九银十招聘旺季),好多读者都问我要有没有最新面试题,之后我就找华为朋友整理了一份21年金九银十高频Java面试题题库,覆盖范围从应届生一只包含到架构师面试真题; 整个资料包,包括 Spring、Spring Boot/Cloud、Dubbo、JVM、集合、多线程、JPA、MyBatis、MySQL、大数据、Nginx、Git、Docker、GitHub、Servlet、JavaWeb、IDEA、Redis、算法、面试题等几乎覆盖了 Java 基础和阿里巴巴等大厂面试题等、等技术栈!
|
敏捷开发 设计模式 缓存
华为资深架构师耗时十年精心整理:Java高级开发需要的分布式技术
分布式、微服务几乎是现在的技术人员必须要了解的架构方向,从理论上来讲确实解耦了很多结构,但另一方面,又会带来更多衍生的复杂度及难点。 如何保证事物的最终一致性?如何进行性能及容量预估?如何处理分布式系统的日志?如何进行线上应急?如果你 曾有和我一样的困惑,那么相信你一定能从本文中得到非常宝贵的解答。 面对越来越复杂的系统和业务,分布式技术早已成为互联网时代的必学技术 ,然而, 如果没有经历过大公司背景的实践和历练,则我们很难接触到分布式服务的设计和架构 。
|
机器学习/深度学习 Rust 安全
华为OD 2023机试题java python c++ go rust
华为OD 2023机试题java python c++ go rust
233 0
华为OD  2023机试题java python c++ go  rust