[Java技术分享]

简介: Java技术er集合啦!大家可分享关于Java技术知识,包括但不限于微服务,分布式等前沿技术,快来沉淀自己的技术,一起写出未来吧!你可以从以下几个方面着手(不强制),或者根据自己对话题主题的理解进行创作,参考如下:

final代码实践

package com.thinkingjava.chapter8;
class People{
    private Double a;
    People(Double a){
        this.a = a;
    }
    public Double getA() {
        return a;
    }
}
public class Theeg1 {
    private final Double j = 0.000;
    private final People p;
    public Theeg1(Double x){
//        j = x;
        p = new People(x);
        System.out.println(p.getA());
        System.out.println("this is " + x + " million US dollars for the car");
    }
    public static void main(String[] args) {
        Theeg1 d = new Theeg1(23.00);
        System.out.println(d.toString());
    }
    @Override
    public String toString() {
        Theeg1 f = new Theeg1(24.00);
        return null;
    }
}

结果:

23.0
this is 23.0 million US dollars for the car
24.0
this is 24.0 million US dollars for the car
null

Java写程序提高代码质量教程

写程序提高代码质量

1、提高运行效率

这是最重要的目的

利用if else减少要进行对同一张多表做相同工作的事

如一个插入功能

不要写成先插入后查询,能一步解决一步OK

另一方面运行效率也体现在sql方面,往往优化sql语句可以很大程度提高运行效率

    @Override
    public Boolean updateBrandHotConfig(AdminJoinBrandHotConfigUpdateReq updateReq) {
        String brandCode = updateReq.getBrandCode();
        //检查brandCode在join_brand_hot_config中是否存在
        JoinBrandHotConfigResp byBrandCode = joinBrandHotConfigMapper.getByBrandCode(brandCode);
        //如果不存在,则插入
        if (null == byBrandCode) {
            JoinBrandHotConfig hotConfig = getJoinBrandHotConfig(updateReq);
            hotConfig.setType(BrandHotConstant.BRAND_HOT_CONFIG_TYPE_REMEN);
            hotConfig.setGmtCreate(DateUtils.getNow());
            hotConfig.setStatus(BrandHotConstant.JOIN_BRAND_HOT_CONFIG_STATUS_DEF);
            hotConfig.setSort(BrandHotConstant.JOIN_BRAND_HOT_CONFIG_SORT_DEF);
            hotConfig.setIndex(BrandHotConstant.JOIN_BRAND_HOT_CONFIG_INDEX_DEF);
            joinBrandHotConfigMapper.addBrandHotConfig(hotConfig);
        } else {
            //如果存在,则更新
            JoinBrandHotConfig hotConfig = getJoinBrandHotConfig(updateReq);
            joinBrandHotConfigMapper.updateBrandHotConfig(hotConfig);
        }
        return true;
    }
    private JoinBrandHotConfig getJoinBrandHotConfig(AdminJoinBrandHotConfigUpdateReq updateReq) {
        JoinBrandHotConfig hotConfig = new JoinBrandHotConfig();
        hotConfig.setBrandCode(updateReq.getBrandCode());
        hotConfig.setShowStartTime(updateReq.getShowStartTime());
        hotConfig.setShowEndTime(updateReq.getShowEndTime());
        hotConfig.setBrandLogo(updateReq.getBrandLogo());
        hotConfig.setGmtModified(DateUtils.getNow());
        return hotConfig;
    }

2、提高代码可读性

前提是公共接口不要影响代码运行

那么可以抽出相同的方法进行封装,一般这样的方法只维护相同属性,而不会去做很大变化。

命名规范。

整洁性,不要把两件事的步骤重合在一起,东一下,西一下

最后,向规范致敬,学习规范,如果没有合适的规范代码,可以参考阿里巴巴规范代码,这样可以提高代码可读性,不关是要别人看得懂你的代码,一段时间后,你要迅速看懂你以前写的代码

常量好用

BrandHotConstant.JOIN_BRAND_HOT_CONFIG_SORT_DEF
public interface BrandHotConstant {
    int JOIN_BRAND_HOT_CONFIG_SORT_DEF = 0;
}

传多个参数的时候,可以用对象进行封装

            JoinBrandHotConfig hotConfig = getJoinBrandHotConfig(updateReq);
            hotConfig.setType(BrandHotConstant.BRAND_HOT_CONFIG_TYPE_REMEN);
            hotConfig.setGmtCreate(DateUtils.getNow());
            hotConfig.setStatus(BrandHotConstant.JOIN_BRAND_HOT_CONFIG_STATUS_DEF);
            hotConfig.setSort(BrandHotConstant.JOIN_BRAND_HOT_CONFIG_SORT_DEF);
            hotConfig.setIndex(BrandHotConstant.JOIN_BRAND_HOT_CONFIG_INDEX_DEF);
            joinBrandHotConfigMapper.addBrandHotConfig(hotConfig);

代码规范

    @Override
    public Boolean setSort(String brandCode, Integer sort) {
        Date gmtModified = DateUtils.getNow();
        log.info("修改排序 brandCode:{}, sort:{}, gmtModified:{}", brandCode, sort, gmtModified);
        JoinBrandHotConfigResp byBrandCode = joinBrandHotConfigMapper.getByBrandCode(brandCode);
        //如果不存在,则插入
        if (null == byBrandCode) {
            JoinBrandHotConfig hotConfig = getJoinBrandHotConfig(brandCode);
            hotConfig.setIndex(BrandHotConstant.JOIN_BRAND_HOT_CONFIG_INDEX_DEF);
            hotConfig.setStatus(BrandHotConstant.JOIN_BRAND_HOT_CONFIG_STATUS_DEF);
            hotConfig.setSort(sort);
            joinBrandHotConfigMapper.addBrandHotConfig(hotConfig);
        } else {
            //如果存在,则更新
            //排序
            joinBrandHotConfigMapper.setSort(brandCode, sort, gmtModified);
        }
        return true;
    }

3、代码严谨,思路逻辑有序并且清晰

需要进行各种空判断,考虑多种情况

if 。。。。else

考虑可能发生的错误

少写全局变量,不能简单为了方便使用全局变量,多个方法调用,可能导致影响值结果的后果

请求参数和实体类分开来写,看似啰嗦,实则严谨,可维护性高

    private JoinBrandHotConfig getJoinBrandHotConfig(AdminJoinBrandHotConfigUpdateReq updateReq) {}

4、坚持,你一定可以提高代码质量

每天进步

IO流

IO流


1、File能对文件和目录进行增删改查,但不能访问文件内容本身


所以要用到输入/输出流的这个概念。、


File部分常用的方法


public String getAbsolutePath() 获取绝对路径


public String getParent () 获取上层文件目录路径


public boolean renameTo(File dest) 把文件重命名给指定的路径


public boolean isDirectory() 判断是否为文件目录


public boolean isFile() 判断是否是文件


public boolean exists() 判断是否存在


public boolean createNewFile 创建文件


public boolean mkdirs() 创建文件目录


public boolean delete() 删除文件或者文件夹/2、


2、java IO原理


I/O-----》Input/Output


—》处理设备之间的数据传输


输入Input 读取外部数据(磁盘等)到内存中


输出Output 将程序(内存)数据输出到磁盘等存储设备


3、流的分类


数据单位=========字节流,字符流


流向=============输入流,输出流


角色========节点流,处理流


节点流:之间从数据源或者目的地读写数据


处理流:不直接连接到输急眼或者目的地,而是“连接”在已存 在的流(节点流或处理流)之上,通过对数据的处理为程序提 供更为强大的读写功能。


4、抽象基类 节点流(文件流) 缓冲流


字节流


InputStream FileInputStream BufferedInputStream


OutputStream FileOutputStream BufferedOutputStream


字符流


Reader FileReader BufferedReader


Writer FileWriter BuffereWriter


5、对象的序列化


允许吧内存的Java对象转换成平台无关的二进制,从而允许把这种二进制保存在磁盘上。

堆、栈、方法区(3.0)

0、上面比较形象可以看出堆、栈、方法区之间的区别,栈存的是局部变量、堆一般是对象等等,而方法区存在的事一些信息加载出来等等,他们互相分工。


1、String a=new String(“fdsdfs”);


堆 存放的是new出来的对象 jvm中只有一个堆区 被所有的线程共享


栈 是变量a 每个栈中的数据私有的 其他栈不能访问。栈中分配的是基本类型和自定义对象的引用。


方法区 是“fdsdfs”;被所有的线程共享,方法区包含所有的class static变量。方法区存放的是类信息和static变量。


2、也可以这么理解:堆是用来存放对象的,栈是用来运行程序的。堆:java的垃圾回收器会自动的回收这些不用的数据。缺点是由于要动态的分配内存,存储效率会比较的慢。


栈:栈的优势是存取效率比较快,仅次于寄存器,栈数据可以共享。但缺点是栈中的数据大小和生存期的固定的,缺乏灵活性。


3、堆和栈的区别可以用如下的比喻来看出:(来自csdn/weixin_41254254)

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就

走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自

由度小。

使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

final代码实践2

package com.thinkingjava.chapter8;
class Post{
    public final void writecode(){
        System.out.println("I am writing code");
    }
}
final class FinalClass{
    int c1 = 1;
    void f3(){
        System.out.println("hi,this if FinalClass-f3 " + c1);
    }
}
public class Finalall {
    void IParameter(final Post a){
//        a = new Post();
        a.writecode();
    }
    public static void main(String[] args) {
        Post b = new Post();
        b.writecode();
        FinalClass b2 = new FinalClass();
        b2.f3();
        b2.c1 = 10;
        b2.f3();
    }
}

结果

I am writing code
hi,this if FinalClass-f3 1
hi,this if FinalClass-f3 10

throw和throws的区别

class Student{
  private int id;
  public void dognji(int id) throws java.lang.Exception{
    if(id > 0){
      this.id = id;
    }else{
      throw new java.lang.Exception("你的输入非法");
    }
  }
}

throws与throw都是异常处理这块内容的,再来回顾一下异常处理的好处,异常处理是对可能发生的异常进行预测处理,以防止程序因为异常的原因无法进行下面的功能或者说卡在异常处理这块


try…catch是捕捉异常,而throws与throw是抛出异常,throw是语句抛出一个异常。


throws是方法可能抛出异常的声明。

JavaScript中对象的方法被访问

<body>
<p id="demo"></p>
<p id="demo2"></p>
<script>
    var username = {
        id : 1,
        name : "xiaoming",
        age : 18,
        mymethod : function(){
        return this.id + " " + this.name + " " + this.age;
        },
        zhognhua : function () {
            return this.id;
        }
    };
    document.getElementById("demo").innerHTML = username.mymethod();
    document.getElementById("demo2").innerHTML = username.zhognhua();
</script>
</body>


结果
1 xiaoming 18
1
结果 1 xiaoming 18
1
相关文章
|
3月前
|
Java 数据处理
技术分享:高效与灵活并存——Java版通用树形结构转换工具的实现与应用
在软件开发中,树形结构的数据表现形式无处不在,从文件系统的目录树到组织架构的部门树,再到各类产品的分类结构。处理这些具有层级关系的数据时,将其转换为树形结构以便展示和操作显得尤为重要。Java作为一门成熟的编程语言,虽然提供了强大的集合框架,但并未直接提供树形结构转换的内置工具。因此,开发一个高效且灵活的通用树形结构转换工具成为许多项目中的必备需求。
102 2
|
4月前
|
存储 安全 算法
Java中防止压缩炸弹的技术分享
【8月更文挑战第17天】在软件开发和数据处理的日常工作中,我们经常会遇到各种压缩文件。然而,一种被称为“压缩炸弹”的恶意文件却给开发者带来了不小的困扰。压缩炸弹通过特殊设计的压缩算法,使得极小的文件在解压后能膨胀到异常巨大的体积,从而消耗大量系统资源甚至导致系统崩溃。本文将围绕“如何在Java中防止压缩炸弹”这一主题,分享一些实用的技术干货。
149 0
|
7月前
|
运维 监控 Java
Java在运维中的稳定性与性能优势技术分享
Java在运维中的稳定性与性能优势技术分享
141 0
|
人工智能 Java BI
|
算法 Java
【技术分享-真题实战】求最长无重复字符子串 (Java)
【题目来源:Leetcode-3】字符串、哈希表、字串
|
存储 Java
【技术分享-真题实战】两数相加(Java)
【题目来源:leetcode-2】链表存储、数学、循环
|
Java 关系型数据库 MySQL
|
Java iOS开发 MacOS
【技术分享】MacOS卸载JDK环境/JAVA
【技术分享】MacOS卸载JDK环境/JAVA
641 0
技术分享 | 跨平台API对接(Java)
本章介绍基于 Jenkins API 调用的跨平台 API 对接。 ## 基于Jenkins实现跨平台API对接 Jenkins 提供了远程访问应用编程接口(Remote Access API),能够通过 Http 协议远程调用相关命令操作 Jenkins 进行 Jenkins 视图、任务、插件、构建信息、任务日志信息、统计信息等,非常容易与其配合更好的完成 CI/CD 工作。 Jenkin