第二节内容概览

循环(for、switch)

多值返回

defer & finally

init(go) 与默认构造函数(java)

常量、静态变量(const 与 static final)

参数或方法访问属性

循环

go go提供了range关键字可以循环各种切片和数组,同时也提供了多参,这点相比较java会灵活不少, 另外switch循环也不同与java,默认仅进入匹配的case内不会往下循环,若需要往下循环需要用到 fallthrough关键字,这个也确实有利于开发,不用像java一样写break结束。 func main() {

arr := []string{"a", "b", "c"}

for val := range arr {

fmt.Println(arr[val])

}

for i := 0; i < 10; i++ {

fmt.Println(i)

}

caseVal := "C"

switch caseVal {

case "A":

fmt.Println("This is A")

case "B":

fmt.Println("This is B")

case "C":

fmt.Println("This is C")

default:

fmt.Println("This is other word!")

}

}

java java 提供了多种循环,分别是for、foreach、Stream foreach(java8提供),while、do while switch ,我就直接展示代码吧。 @Test

public void forTest(){

String[] arr = new String[]{"A","B","C"};

for (String item:arr) {

LOG.info(item);

}

for(int i=0;i

LOG.info(arr[i]);

}

String word = "B";

switch (word){

case "A":

LOG.info("This is A");

break;

case "B":

LOG.info("This is B");

break;

case "C":

LOG.info("This is C");

break;

default:

LOG.info("This is Other word!");

}

}

多值返回

go go提供了多参返回,当参数较少当时候可以一次性返回,不用构造结构体返回 func main() {

a, b, c, err := process(11, "A", true)

fmt.Println(a, b, c, err)

}

func process(aa int32, bb string, cc bool) (int32, string, bool, error) {

var ccReturn bool

if true == cc {

ccReturn = false

} else {

ccReturn = true

}

return aa + 1, bb + "_return", ccReturn, nil

}

java java并没有提供多参返回,若要实现多参返回,一般将返回参数封装入Map、List 这类集合类型中, 或者构造一个新对象放入返回值后返回。 @Test

public void returnObjec(){

Map result = this.processObj();

LOG.info(new JSONObject(result).toString());

}

public Map processObj(){

return new HashMap(){{

put("val1",true);

put("val2","str");

put("val3",999777L);

}};

}

defer & finally

go 首先 defer 和 finally 大多用于资源关闭或异常处理 go中的defer 与 java的finally个人感觉是相似的,但是如果将defer放入到循环内的话可就像 一个反向队列了,若一个处理逻辑内有多个defer的时候 先defer的晚于后defer,很有意思,大家可以试试哈~ func main() {

doSomething()

}

func doSomething() {

fmt.Println("something start")

defer fmt.Println("something defer")

fmt.Println("something end")

arr := []string{"a", "b", "c"}

for val := range arr {

defer fmt.Println(val)

}

}

java java 的finally 大多用于异常处理,尤其是文件流异常处理,同时也不存在类似于defer的倒序处理, 这里就给个简单的例子~ @Test

public void processFinal(){

String[] arr = new String[]{"A","B"};

try{

LOG.info(arr[2]);

}catch (Exception e){

LOG.info("异常了:{}",e);

}finally {

LOG.info("最后进入~");

}

}

init 与默认构造函数

go go不存在默认构造函数,但是提供了init函数;我一开始也想不起来go的init函数如何与java的初始化 对比,灵机一动就有了无参的构造函数,虽然这样对比其实并不恰当,但是功能上是有相似的地方。另外需要 说明的是go的init的函数是在包被引入的时候调用的 若与main函数存在同一代码块 也是init先被调用, 而java的默认构造函数仅在对象被new的时候调用的。 func main() {

fmt.Println("func main()")

}

func init() {

fmt.Println("func init()")

}

java java的默认构造方法其实并不常用,但是在每启一个类的时候都有默认的构造方法,若是定义了就会走默认的构造 方法,若无则在编译为class文件的时候自动为所在类加入一个。 public class ConstructTest {

private static final Logger LOG = LoggerFactory.getLogger(ConstructTest.class);

@Test

public void processConst(){

LOG.info(">>> start");

Person person = new Person();

LOG.info(">>> end");

}

}

class Person{

private static final Logger logger = LoggerFactory.getLogger(Person.class);

private String name;

private Integer age;

public Person() {

logger.info("default Constructor");

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

}

const 与 static final

go go的静态(也可叫静态常量,主要用于基本数据类型),使用关键字const指定。 使用const定义的静态变量是不可用修改或赋值的。 const name int = 11

const (

a = "hello"

b = true

c = 99

)

func main() {

fmt.Println(name)

fmt.Println(a)

fmt.Println(b)

fmt.Println(c)

}

java java的常量需要用两个关键字修饰 static 和 final ,前者表示静态的意思,但这个静态是可以被修改的, 修改的前提是类型不变,而第二个关键字表示最终的意思,一旦变量被这个关键字修饰则不可重新修改变量。 但是对于复合对象,比如List、Map、自定义对象等,又是可以被修改的,对于这点个人觉得 java 的常量的定义 并不够严谨。 public class staticFinalTest {

private static final Logger LOG = LoggerFactory.getLogger(staticFinalTest.class);

private static final String name = "Tom";

private static String item = "first item";

private static final List initArr = new ArrayList(){{

add("A");

add("B");

add("C");

}};

@Test

public void process(){

LOG.info(name);

item = "youth!";

LOG.info(item);

initArr.add("hello");

LOG.info(initArr.toString());

}

}

参数或方法访问属性

go go 的方法或参数需要被外部访问,需要使用大写开头参数名或函数名(go文件大小写是与与否与是否私有无关) // 可被文件外函数访问

var Name string = "John"

func main() {

fmt.Println(Name)

Process()

}

// 可被文件外函数调用

func Process() {

fmt.Println("Process()")

}

java java的参数或方法属性不同于go,大致分为三类:

private 仅当前类内访问

public 可公共访问

protect 仅可同包内访问 public class ObjectTypeTest {

private static final Logger LOG = LoggerFactory.getLogger(ObjectTypeTest.class);

//私有访问(仅可同一类中)

private String name1 = "name01";

// 保护访问(仅可同一包内)

protected String name2 = "name01";

// 公共访问 (任何类均可访问)

public String name3 = "name01";

@Test

public void process(){

LOG.info(this.doSomeThing());

LOG.info(name1);

LOG.info(name2);

LOG.info(name3);

}

public String doSomeThing(){

return "hello";

}

}

原文出处:https://www.cnblogs.com/funnyzpc/p/10801474.html

go与JAVA差异_20190312_浅谈gojava差异(二)相关推荐

  1. 猿来小课Java视频教程讲师浅谈JAVA体系结构

    猿来小课Java视频教程讲师:Java体系结构中不仅定义了Java的开发编译环境,也定义了Java的运行环境.为运行Java应用程序和applet,计算机上应安装JVM和Java运行时解释器,这两个部 ...

  2. catia三维轴承_浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文

    浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文 一.概述 单排四点接触球转盘轴承是一种能够同时承受较大轴向负荷.径向负荷和倾覆力矩等综合载荷,集支承.旋转.传动.固定等多种功能于一身的特殊 ...

  3. java的throw_浅谈Java的throw与throws

    浅谈Java异常 以前虽然知道一些异常的处理,也用过一些,但是对throw和throws区别还是有不太清楚.今天用实例测试一下 异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被 ...

  4. java反射机制浅谈

    一.Java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动, ...

  5. scale和java比较_浅谈java中BigDecimal的equals与compareTo的区别

    这两天在处理支付金额校验的时候出现了点问题,有个金额比较我用了BigDecimal的equals方法来比较两个金额是否相等,结果导致金额比较出现错误(比如3.0与3.00的比较等). [注:以下所讲都 ...

  6. java 小偷_浅谈小偷程序之Java

    浅谈小偷程序之Java 题外话:如果用EditPlus作为编辑器的话如果保存的格式默认为unicode的话那么在里面写中文用resin作为应用服务器的话就可能出现报500 Servlet错误哦!主要是 ...

  7. java 线程aba,浅谈Java中ABA问题及避免,浅谈javaaba避免

    浅谈Java中ABA问题及避免,浅谈javaaba避免 本文主要研究的是关于Java中ABA问题及避免的相关内容,具体如下. 在<Java并发实战>一书的第15章中有一个用原子变量实现的并 ...

  8. c语言实现md5比java难_浅谈md5弱类型比较和强碰撞

    前言 在CTF中,md5的题目太常见了,虽然有很多这方面的文章,但相对来说比较零散,这里主要将自己学习和比赛时遇到的md5弱类型和强碰撞的题目从浅到深地梳理一下. 本文涉及知识点实操练习:浅谈md5弱 ...

  9. 浅谈领导力之二 - 授权与放权

    前文回顾 浅谈关于领导力之一 - 识人之能 我见过非常多优秀的草根创业者,能力极为出众,自己可以搞定很多事情,但是做公司却很难做大,很多人卡在这个环节上,经常抱怨,没有人才啊,你看招来的都笨死了,是的 ...

最新文章

  1. linux查询关键词上下行_【已解决】Linux下通过关键字模糊查找搜索文件
  2. 参考资料学习APR库
  3. 11月18日站立会议
  4. SAP Netweaver和Hybris的数据库层
  5. 排序算法四:归并排序基本原理以及Python实现
  6. 软件包管理器前端工具yum的使用
  7. z=rand()%i c语言,C语言关于产生随机数文章转载两篇(一)
  8. 手把手教你学习汇编语言——从入门到起飞
  9. NumberFormat去掉千分位
  10. python二次开发ug_CAD二次开发(UG/Proe/其他) - 随笔分类 - 白途思 - 博客园
  11. [战略]Fans未来战略--第3篇--以文会友
  12. c语言大作业俄罗斯方块,C语言自己写俄罗斯方块(完整版)
  13. 快应用上架时,你最关心的问题都在这里!
  14. Hash的简介与hashlib模块的使用、模拟撞库与密码加盐
  15. java实现zigzag扫描
  16. TEB局部轨迹规划代码解读
  17. 一年赚上亿的生意_甩过梅艳芳,做生意一年赚几亿,他竟然火了快四十年
  18. mysql勒索_记一次mysql数据库被勒索(下)
  19. PyQt+Opencv-python多线程显示摄像头信息至QLabel,摄像头显示区域自由拉伸尺寸
  20. 安全性测试应该从那几个方面进行?

热门文章

  1. Pyqt5 多标签_ESL电子货架标签方案
  2. 排队机叫号系统服务器安装设置,易达办事大厅排队叫号系统
  3. gorm 密码字段隐藏_非常专业且免费的密码管理工具
  4. 神经网络 测试集loss不下降_【NLP高频面试题】神经网络及其优化
  5. android aar项目_介绍如何调试Xamarin.Android的binding项目
  6. 5g空分复用技术_5G十大关键技术之三的空分复用
  7. linux 修改ssh banner
  8. 【JSP EL表达式】动态表达式/表达式拼接
  9. 在批处理脚本所在目录下打开cmd
  10. 文件夹配置文件服务器,服务器文件夹配置文件