1.Scala怎样声明变量与常量?
var val
2.Scala数据类型有哪些?
Byte,Short,Int,Long,Float,Double,Char,String,Boolean,Unit,Null,Nothing,Any,AnyRef
3.String 对象是可变还是不可变?假如要创建一个可以修改的字符串,应该使用哪个类?
String 对象是不可变的,如果你需要创建一个可以修改的字符串,可以使用 String Builder 类
4.转义字符用什么符号?
\
5.IF...ELSE 语法是什么?
if(布尔表达式){
// 如果布尔表达式为 true 则执行该语句块
}else{
// 如果布尔表达式为 false 则执行该语句块
}
6.循环语句哪三种,分别语法是什么?怎样退出循环?
while(condition)
{
statement(s);
}
在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。
condition 可以是任意的表达式,当为任意非零值时都为 true。当条件为 true 时执行循环。 当条件为 false 时,退出循环,程序流将继续执行紧接着循环的下一条语句。
do {
statement(s);
} while( condition );
for( var x <- Range ){
statement(s);
}
以上语法中,Range 可以是一个数字区间表示 i to j ,或者 i until j。左箭头 <- 用于为变量 x 赋值。
for( var x <- List ){
statement(s);
}
以上语法中, List 变量是一个集合,for 循环会迭代所有集合的元素。
for( var x <- List
if condition1; if condition2...
){
statement(s);
}
以上是在 for 循环中使用过滤器的语法。
var retVal = for{ var x <- List
if condition1; if condition2...
}yield x
你可以将 for 循环的返回值作为一个变量存储。
大括号中用于保存变量和条件,retVal 是变量, 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。
当在循环中使用 break 语句,在执行到该语句时,就会中断循环并执行循环体之后的代码块。
// 导入以下包
import scala.util.control._
// 创建 Breaks 对象
val loop = new Breaks;
// 在 breakable 中循环
loop.breakable{
// 循环
for(...){
....
// 循环中断
loop.break;
}
}
7.函数中 Unit是什么意思?
Scala中的Unit类型类似于java中的void,无返回值。主要的不同是在Scala中可以有一个Unit类型值,也就是(),然而java中是没有void类型的值的。除了这一点,Unit和void是等效的。一般来说每一个返回void的java方法对应一个返回Unit的Scala方法。
8.Scala怎样定义一个不带入参,不返回值的函数
def functionName = {
function body
return [expr]
}
9.Scala怎样定义一个带入参,返回值的函数
def functionName ([参数列表]) : [return type] = {
function body
return [expr]
}
10.什么是闭包?
闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。
var factor = 3
val multiplier = (i:Int) => i * factor
11.val a = 10,怎样将a转为double类型、String类型?
a.toString a.toDouble
12.Scala函数中是把方法体的最后一行作为返回值,需不需要显示调用return?
不需要
13.怎样定义一个字符串数组?下标是从1开始的吗?
var z:Array[String] = new Array[String](3)或var z = new Array[String](3)或val z = Array(1,2,3)
下标从0开始
14.1 to 10 ==> 1.to(10),10包含不包含?
包含
15.Range(1, 10),10包含不包含?for( a <- 1 until 10){ println( "Value of a: " + a ); },10包含不包含?
都不包含
16.Scala 模式匹配语法是什么?
object Test {
def main(args: Array[String]) {
println(matchTest(3))
}
def matchTest(x: Int): String = x match {
case 1 => "one"
case 2 => "two"
case _ => "many"
}
}
17.异常报错的语法?
import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException
object Test {
def main(args: Array[String]) {
try {
val f = new FileReader("input.txt")
} catch {
case ex: FileNotFoundException => {
println("Missing file exception")
}
case ex: IOException => {
println("IO Exception")
}
} finally {
println("Exiting finally...")
}
}
}
18.Array、ArrayBuffer,谁是定长?谁是变长?
Array是定长、ArrayBuffer是变长
19.什么是隐式转换函数?什么场景下用?怎样定义?
我们经常引入第三方库,但当我们想要扩展新功能的时候通常是很不方便的,因为我们不能直接修改其代码。scala提供了隐式转换机制和隐式参数帮我们解决诸如这样的问题。
implicit def file2Array(file: File): Array[String] = file.lines
https://www.jianshu.com/p/a344914de895
20.Scala面向对象,三大特性是什么?什么区别?
继承:父和子的关系
封装:属性、方法
多态:父类引用指向子类对象
21.Scala 基本语法需要注意点?
1.类名 - 对于所有的类名的第一个字母要大写吗?
是的 class MyFirstScalaClass
2.方法名称 - 所有的方法名称的第一个字母用小写吗?
是的 def myMethodName()
22.对象是什么?类是什么?怎样在IDEA创建文件?
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
new->scala class
23.变长数组ArrayBuffer的系列问题
import scala.collection.mutable.ArrayBuffer
var c = new ArrayBuffer[Int]();
1. 在尾部添加一个元素
c += 2
2. 在尾部添加多个元素
c += (3,4,5)
3. 追加集合
c ++= Array(6,7,8,9)
4. 指定位置添加元素
c.insert(3, 33) //在下标3之前插入元素
5. 移除尾部n个元素
c.trimEnd(n)
6. 移除开头n个元素
c.trimStart(n)
7. 移除某个位置的元素
c.remove(3)
8. 移除从下标为n开始(包括n)的count个元素
c.remove(n, count)
9. ArrayBuffer 转 Array
c.toArray
10. Array 转 ArrayBuffer
c.toBuffer
【来自@若泽大数据】