java golang_java与golang语法比较(一)

本文对比了Java和Go语言在变量声明、异常处理、参数传递和多态等核心语法上的差异。Java中,变量声明可以分开或同时进行,异常通过try-catch块处理;Go语言使用`var`关键字声明,`:=`符号自动推导类型,并将异常作为函数返回值。在参数传递方面,Go支持传值和传指针,没有引用传递。对于多态,Java通过接口实现,而Go则采用鸭子类型,接口由一组方法签名定义。
摘要由CSDN通过智能技术生成

变量声明与赋值

Java

int i; // 声明

int j = 1; // 声明+赋值

Go

var i int // 声明

i := 1 // 声明+赋值

变量声明:var是关键字,格式:var 变量名称 变量类型

变量声明与赋值: := 符号支持自动推导类型

异常处理

Java

// 声明

int execute(){

throw new RuntimeException(”msg”); // 有错误

return 0; // 无错误

}

// 处理

try{

int code = execute();

}catch(Exception e){

// TODO 异常情况如何处理

}

Go

// 声明

func Execute() (int , error) {

return 1,error.New(“msg”) // 有错误

return 0 // 无错误

}

// 处理

if code,err=c.Execute();err!=nil {

// TODO 异常情况如何处理

}

go的异常是做为函数返回值的,通过判断是否存在error,来判断异常。 (不能够像Java一样抛出异常)

go的if语句支持初始条件,即先执行if之后的语句(分号之前),再执行分号之后的判断语句,此语句经常用于异常处理。

go的大括号必须在行末

go函数或者变量为”公有”,首字母大写,”私有”则小写。

参数传递

Java

略,见Go实现中的注释

Go

package main // 入口必须是main

import "fmt" // 引包

type People struct { // 结构体,类似Java中的class

age int // 变量声明,变量类型放在后面

name string

}

// 类似Java方法的函数

func change(p People){ // func为关键字

p.age = 18

}

// 传递指针

func change2(p *People){

p.age = 18

}

func main(){

p := People{22,"lsq"} // 新建对象并赋值

change(p) // 调用函数change,传递对象

fmt.Println(p) // 控制台打印

change2(&p) // 调用函数change2,传递指针

fmt.Println(p)

}

// 执行结果

{22 'lsq'}

{18 'lsq'}

change函数是传递的对象,函数调用的时候,会拿到对象的拷贝。

change2函数是传递的指针,函数调用的时候,会拿到一个指向改对象的指针。

go没有引用传递

多态

此例有点长,是一个求面积的问题,针对与圆形和矩形两种类型

Java

import java.lang.Math;

public class Polymorphism{

public static class Rectangle implements Areable{ //矩形

double width;

double height;

public Rectangle(double width,double height){

this.width = width;

this.height = height;}

public double area(){

return width * height;}

}

public static class Circle implements Areable{ // 圆形

double radius;

public Circle(double radius){

this.radius = radius;}

public double area(){

return radius * radius * Math.PI;}

}

public static interface Areable{

double area();

}

public static void main(String[] args){

Areable arear = new Rectangle(5.0,5.0);

Areable areac = new Circle(2.5);

System.out.println(arear.area());

System.out.println(areac.area());

}

}

Go

package main

import (

"fmt"

"math"

)

type Rectangle struct { // 矩形

width float64

height float64

}

type Circle struct { // 圆形

radius float64

}

type Areable interface{ // 接口:一组method签名的组合,通过interface来定义对象的一组行为。

// 只要是实现了interface中的所有的method的结构体,就可以认为是这个interface的实例,Duck typing

area() float64

}

func (r Rectangle) /* 函数的接受者Receiver */ area() float64 /* 返回值类型*/ {

return r.width * r.height

}

func (c Circle) /* 函数的另一个接受者Receiver */ area() float64 /* 返回值类型*/{

return c.radius * c.radius * math.Pi

}

func main(){

ra := Rectangle{5,5}

ca := Circle{2.5}

fmt.Println(ra.area())

fmt.Println(ca.area())

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值