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