scala和java区别_初学Scala和 Java的一些区别

初学scala,和java存在很多不一致,有很多奇葩的语法,在日常使用中,可能自己不会这么写,但是很多存在于源码中,看源码的时候,经常看的一脸懵逼,因此在此总结部门差异点,部分。

文件名

java要求文件名和公共类名必须要求一致,scala不要求。

java: test.java -> public class test{}

scala: test.scala -> class xxx(任意){}

关键字

scala 中没有public关键字,默认访问权限就是public

scala中没有void关键字,因为scala是完全面向对象的语言,所以采用特殊的对象来模拟:Unit

def main(args:Array[String]):Unit ={

}

方法和函数

scala中对函数和方法的联系和区别:

Scala 有函数和方法,二者在语义上的区别很小。Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。

我们可以在任何地方定义函数,甚至可以在函数内定义函数(内嵌函数)。更重要的一点是 Scala 函数名可以有以下特殊字符:+, ++, ~, &,-, – , , /, : 等

方法定义的参数顺序不同,scala把参数类型放在之后

java中定义方法规则

public String test(String param){

}

​scala中定义方法规则

def test(param:String):String = {

}

scala的方法里面也可以声明方法

object test{

def main(args:Array[String]):Unit = {

def test(): Unit={

}

}

}

java中包含方法重载,scala中同一作用域不能有同名函数,即使函数参数不一致

object Test {

def main(arg: Array[String]): Unit = {

def test():Unit={

}

// 会报错,不允许通过

def test(s:String):Unit={

}

}

4.传递多参数的时候,java用 ... scala使用*

public test(String args...){

}

def test(args:String*):Unit={

}

5.scala 在函数定义时,可以给定默认参数。

def test(param1:String = "morenzhi"):Unit={

}

但是默认参数推荐放参数列表后面,否则需要确保后面的无默认值参数从左到右能匹配到,

另外可以使用带名参数传递参数

//声明 默认值在前

def test1(param1:String = "t1",param2:String):Unit={

}

//调用 带名参数

test1(param2="t2")

//从左到右都给了参数

test1("t1","t2")

异常

java的异常和scala的异常大体相同,catch的实现有些小区别

java异常:

try{

}catch(RuntimeException e){

}catch(Exception e){

}finally{

}

scala的异常:

try{

}catch{

case e:RuntimeException

case e:Exception =>

}

类和对象

scala类的定义和java一致,在属性初始化的时候有些区别

java的属性初始化时,若不指定初始值,jvm会补充上

scala初始化用 _ 代替,注意是var变量

var str:String = _

var num:Int = _

scala和java的包声明方式默认方式一致,但是有其他使用方式

在同一个源码文件中,可以多次声明。声明的类在最后的那个包中

java:

package com.lucky.test

package test //会出问题

​ scala: 即源码中的类所在位置不需要和包路径相同

package com.lucky

package test

class Emp{

}

//最终会组合,其中的Emp会在 com.lucky.test 中

scala中的所有语法都可以进行嵌套,package也可以嵌套.

如果有{} ,那么{}中声明的类在这个包中,之外的不在这个包中

package test1{

package test2{

}

}

scala中可以声明父包和子包,父包中的类,子类可以直接访问,不需要引入,和作用域一致

package test1{

class Emp{

}

package test2{

object User{

def main(arg: Array[String]): Unit = {

//可以访问

val emp = new Emp

}

}

}

}

package中可以声明类,但是不能声明变量和函数(方法)

但是scala为了弥补包的不足,加入了包对象概念

package test1{

package object Emp{

val username = "object"

}

package test2{

object User{

def main(arg: Array[String]): Unit = {

//可以访问

println(Emp.username)

}

}

}

}

import

scala也使用import导入类,但也有些区别,在scala中

import可以在任意地方使用

导入一个包中所有的类,采用下划线

//java

import java.lang.*

//scala

import java.lang._

导入同一个包中部分类,用{}和, 组合

//java

import java.util.ArrayList

import java.util.HashMap

//scala

import java.util.{ArrayList,HashMap}

import隐藏指定的类

//隐藏方式 {类名=>_}

import java.util.{Date=>_}

import 可以导包

import java.util

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值