Scala和Java的区别点总结
文件名
java要求文件名和公共类名必须要求一致,scala不要求。
java:test.java -> public class test{}
scala: test.scala -> class xxx(任意){}
关键字
1 scala 中没有public关键字,默认访问权限就是public
2 scala中没有void关键字,因为scala是完全面向对象的语言,所以采用特殊的对象来模拟:Unit
def main(args:Array[String]):Unit ={...}
方法和函数
scala中对函数和方法的联系和区别:
Scala 有函数和方法,二者在语义上的区别很小。Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。
我们可以在任何地方定义函数,甚至可以在函数内定义函数(内嵌函数)。更重要的一点是 Scala 函数名可以有以下特殊字符:+, ++, ~, &,-, – , , /, : 等
1 方法定义的参数顺序不同,scala把参数类型放在之后
java, scala中定义方法规则:
public String test(String param){
}
def test(param:String):String = {
}
2 scala的方法里面也可以声明方法
object test{
def main(args:Array[String]):Unit = {
def test(): Unit={
}
}
}
3 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={
}
5scala 在函数定义时,可以给定默认参数。
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 =>
}
类和对象
1 scala类的定义和java一致,在属性初始化的时候有些区别。java的属性初始化时,若不指定初始值,jvm会补充上。scala初始化用 _ 代替,注意是var变量。
var str:String = _
var num:Int = _
2 scala和java的包声明方式默认方式一致,但是有其他使用方式。
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)
}
}
}
}
在同一个源码文件中,可以多次声明。声明的类在最后的那个包中
java:
package com.lucky.test
package test //会出问题
3 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
推荐阅读
(点击标题可跳转阅读)
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
扫码二维码
获取更多精彩
长按图片关注
点个
在看
你最好看