| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> scala基础篇 -> 正文阅读 |
|
[Java知识库]scala基础篇 |
标识符 ???? 有新增关键字,如yield成为scala新关键字,则在scala调用时,则应由Thread.yield()改成Thread.`yield`来使用 引用 引入单个类:import java.util.Date; 引入包下所有类:import java.util._; 引入包下若干类(选择器)importjava.util.{Date,HashSet,HashMap} 引入类后重命名:import java.util.{Date => OldDate} 隐藏包下的部分成员:import java.util.{Date=>_,_} 不引入括号的 默认包引入为:java.lang._、scala._、Predef._,默认引入的包的情况下其内类的使用均不需要加上包名。 差异 ? AnyRef:是所有引用类的基础,即除了值类型之外 AnyVal:是所有值类型的基类,包括9个值类型 scala.Double? scala.Float? scala.Long? scala.Int? scala.Char? scala.Short? scala.Byte? scala.Unit scala.Boolean 变量 常量 使用val来声明常量 val constString:String="hero"; val constString="new_hero"; ????????? 变量 使用var来声明变量 var varString:String="name"; var varString="new_name"; ? 变量类型声明 显式声明类型 var?variableName : DataType [= Initial Value] 或 val constName: DataType [= Initial Value] 隐式声明类型 var myString="HelloWorld"; var myInt=1; 批量变量声明 var a,b=10; println(a+b);? 访问修饰符?? ???? scala访问修饰符包括private,protected,public,对象的访问级别默认都是public private 仅在包含了成员定义的类或对象内部可见 在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员 protected 比java的protected更严格,除了子类可以访问,同包下的类是不能访问的 作用域保护 ????? 通过private[x]或protected[x]来实现,可以修饰包、类、单例对象。 private[x],即为"这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是private。 protected[x],即为"这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是protected。 运算符 a++ 在scala中不能使用,只能用 a=a+1 for形式定义 for(x <- Range ){ ?? ??? ?statement(s); } 以上语法中,Range?可以是一个数字区间表示?i to j?,或者?i until j。左箭头 <- 用于为变量 x 赋值。 i to j? [i,j] i until j? [i,j) 这里只能从小到大,不能倒着排
object TestControlSentence { ? def main(args: Array[String]): Unit = { ??? val stringList = List("one","two","three","four","five","six"); ??? for(str <- stringList){ ????? println(str) ??? } ? } }
object TestControlSentence { ? def main(args: Array[String]): Unit = { ??? val stringList = List("one","two","three","four","five","six"); ??? for(str <- stringList if(str!="two" && str!="three")){ ????? println(str) ??? } ? } }
var retValList?= for{ var x <- List ?? ??? ?if condition1; if condition2... } yield x 注意大括号中用于保存变量和条件,retValList?是变量, 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。 object TestControlSentence { ? def main(args: Array[String]): Unit = { ??? val stringList = List("one", "two", "three", "four", "five", "six"); ??? var resultList = for { ????? str <- stringList if (str != "two" && str != "three") ??? } yield str; ??? for (temp <- resultList) { ????? println(temp) ??? } ? } } 将str 放入resultlist中,
object TestCloseFunction { ? var factor = 1000 ? def salaryMoney(i: Int): Int = { ??? return i * factor ? } ? def main(args: Array[String]) { ??? println("月薪salaryMoney(8) value = " + salaryMoney(8)) ??? println("月薪salaryMoney(10) value = " + salaryMoney(10)) ??? TestCloseFunction.factor = 10000; ??? println("年薪salaryMoney(8) value = " + salaryMoney(8)) ??? println("年薪salaryMoney(10) value = " + salaryMoney(10)) ? } }
object TestString { ? var message = "过年好!"; ? var messageV2: String = "过年好!"; ? def main(args: Array[String]): Unit = { ??? println(message); ??? println(messageV2); ? } }
def main(args: Array[String]) { ? val stringBuilder = new StringBuilder; ??? stringBuilder += '1' ??? stringBuilder ++= "234" ??? stringBuilder.append("567") ??? stringBuilder.append('8') ? println("stringBuilder is : " + stringBuilder.toString); }
object TestStringBuilder { ? def main(args: Array[String]) { ??? val stringBuilder = new StringBuilder; ??? stringBuilder += '1' ??? stringBuilder ++= "234" ??? stringBuilder.append("567") ??? stringBuilder.append('8') ??? println("stringBuilder is : " + stringBuilder.toString); ? } }
?def main(args: Array[String]) { ??? var str = "12345678"; ??? var str2 = "9"; ??? println("str.concat(str2)=" + str.concat(str2)); ??? println("str.concat(str2)=" + str + str2); ? }
?def main(args: Array[String]) { ??? var str="12345678"; ??? println("str length()="+str.length()); ? }
?def main(args: Array[String]) { ??? var name = "天亮教育"; ??? var location = "石家庄"; ??? var work = "大数据技能培训"; ??? var age=21; ??? printf("我是%s,我在%s,我做%s,我今年%d岁了",name,location,work,age); ? }
def main(args: Array[String]): Unit = { ??? var programLanguageArray = Array("java", "python", "c++", "c", "php") ??? for (program <- programLanguageArray) { ????? println(program); ??? } ? }
def main(args: Array[String]): Unit = { ??? var programLanguageArray = new Array[String](5) ??? //??? var programLanguageArray:Array[String] = new Array[String](5) ??? programLanguageArray(0) = "java"; ??? programLanguageArray(1) = "python"; ??? programLanguageArray(2) = "c++"; ??? programLanguageArray(3) = "c"; ??? programLanguageArray(4) = "php"; ??? for (program <- programLanguageArray) { ????? println(program); ??? } ? }
import Array.ofDim; object TestMultiArray{ ? def main(args: Array[String]): Unit = { ??? var myMatrix = ofDim[Int](4, 4) ??? // 创建二维方阵 ??? for (i <- 0 to myMatrix.length - 1) { ????? for (j <- 0 to myMatrix(i).length - 1) { ??????? myMatrix(i)(j) = (i + 1) * (j + 1); ????? } ??? } ?? ? ??? // 输出二维方阵 ??? for (i <- 0 to myMatrix.length - 1) { ????? for (j <- 0 to myMatrix(i).length - 1) { ??????? print(" " + myMatrix(i)(j)); ????? } ????? println(); ??? } ? } } 1 2 3 4 ?2 4 6 8 ?3 6 9 12 ?4 8 12 16
import Array.concat; object TestArray { ? def main(args: Array[String]): Unit = { ??? var numberList1 = Array(1, 2, 3, 4) ??? var numberList2 = Array(5, 6, 7, 8) ??? var mergeList = concat(numberList1, numberList2) ??? // 输出所有数组元素 ??? for (x <- mergeList) { ????? println(x) ??? } ? } }
import Array.range; object TestArrayRange { ? def main(args: Array[String]): Unit = { ??? var numberList1 = range(1, 5, 2) ??? var numberList2 = range(1, 5) ?? ? ??? println("手动设置步长为2") ??? // 输出所有数组元素-numberList1 ??? for (x <- numberList1) { ????? println(x) ??? } ??? println("采用默认步长值,即为1") ??? // 输出所有数组元素-numberList2 ??? for (x <- numberList2) { ????? println(x) ??? } ? } } 函数传名调用
object TestCallByValue { ? def main(args: Array[String]) { ??? delayedCalculator(transmitMe()); ? } ? def transmitMe(): String = { ??? println("我在transmitMe方法中!") ??? return "transmitMe返回值"; ? } ? def delayedCalculator(t: String): Unit = { println("在 delayedCalculator方法--开始") println("正式调用传过来的函数: " + t) ??? println("在 delayedCalculator方法--结束") ? } } ?先是完成了里面的方法,然后再完成外面的
object TestCallByName { ? def main(args: Array[String]) { ??? delayedCalculator(transmitMe()); ? } ? def transmitMe(): String = { ??? println("我在transmitMe方法中!") ??? return "transmitMe返回值"; ? } ? def delayedCalculator(t: => String): Unit = {????? ??? println("在 delayedCalculator方法--开始") ??? println("正式调用传过来的函数: " + t) ??? println("在 delayedCalculator方法--结束") ? } } 什么时候用到什么时候再传结果,注意println第二行括号内的t,这里会用到前面 就是delayedCalculator(t: => String) 中的 =>, 指定函数名调用 指定名字就行 可变(不定长)参数的函数 ?? Java? ????? Public static void test(String... args){ For(String arg:args){ ?? System.out.println(arg); } } Public static void main(String[] args){ Test(“one”,”two”,”three”); } Scala ? object TestNonFixParas { ? def main(args: Array[String]) { ??? printAllParasValue("one", "two", "three", "four"); ? } ? def printAllParasValue(paras: String*): Unit = { ??? for (temp <- paras) { ????? println(temp); ??? } ? } } 使用String*来解决
object TestDefaultParaFunction { ? def main(args: Array[String]) { ??? println("完全使用默认值的返回值 : " + salaryMoney()); ??? println("部分使用默认值的返回值 : " + salaryMoney(10)); ??? println("部分使用默认值的返回值 : " + salaryMoney(10,10000)); ? } ? def salaryMoney(a: Int = 5, unit: Int = 1000): Int = { ??? return a * unit ? } } A 和unit都是默认的 如果不传,则是按默认计算,传一个则是将值传给a
object TestRecusive { ? def main(args: Array[String]) { ??? var n=4 ??? println(n+"的阶乘为="+myFactorial(n)) ? } ? def myFactorial(n: Int): Int = { ??? if (n <= 1) ????? return 1 ??? else ????? return n * myFactorial(n - 1) ? } }
object TestHighFunctionByTransmitFunctionPara { ? def main(args: Array[String]) { ??? delayedCalculator(transmitMe()); ? } ? def transmitMe(): String = { ??? println("我在transmitMe方法中!") ??? return "transmitMe返回值"; ? } ? def delayedCalculator(t: => String): Unit = { ??? println("在 delayedCalculator方法--开始") ??? println("正式调用传过来的函数: " + t) ??? println("在 delayedCalculator方法--结束") ? } }
object TestHighFunctionByRetFunction { ? def main(args: Array[String]) { ??? var mySalaryFun=multiplyBy(1000); ??? println(mySalaryFun(10)); ? } ? def multiplyBy(salaryUnit:Int)=(x:Int)=>salaryUnit*x } 这里salaryUnit会得到首先传入的参数1000,然后再进行mySalaryFun(10),也就是乘10的操作 内嵌函数
object TestEmbedFunction { ? def main(args: Array[String]) { ??? var msg="HelloWorld"; ??? printMessage(msg); ? } ? def printMessage(msg: String): Unit = { ??? def printMessageInner(msg: String): Unit = { ????? println(msg); ??? } ??? printMessageInner(msg); ? } } 匿名函数
函数定义: var inc = (x:Int) => x+1 函数使用: var x = inc(8)+1
正常定义: def incFunction(x: Int): Int = { ??? return x + 1; } 函数使用: var x=incFunction(8)+1 这个结果为10
import java.util.Date object TestPartialParasFunction { ? def main(args: Array[String]) { ??? val name="张三" ??? sayHello(name, "上午好") ??? Thread.sleep(1000) ??? sayHello(name, "中午好") ??? Thread.sleep(1000) ??? sayHello(name, "晚上好") ? } ? def sayHello(name: String, message: String) = { ??? println(name + "----" + message) ? } }
def main(args: Array[String]) { ??? val name="张三" ??? val partialSay=sayHello(name,_:String); ??? partialSay("上午好") ??? Thread.sleep(1000) ??? partialSay("中午好") ??? Thread.sleep(1000) ??? partialSay("晚上好") ? } ? def sayHello(name: String, message: String) = { ??? println(name + "----" + message) ? }
def add(x: Int, y: Int) = x + y;
def main(args: Array[String]) { ??? println(add(3,4)); ? } def add(x: Int, y: Int) = x + y;
def add(x:Int)(y:Int) = x + y
object TestCurryingFunction { ? def main(args: Array[String]) { ??? //对应柯里化形式1的使用 ??? var curryingAdd1 = add1(3) ??? //对应柯里化形式2的使用 ??? var curryingAdd2 = add2(3)(_) ??? ??? println(curryingAdd1(4)); ??? println(curryingAdd2(4)); ? } ? //柯里化形式1 ? def add1(x: Int) = (y: Int) => x + y; ? //柯里化形式2 ? def add2(x: Int)(y: Int) = x + y; } |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 1:32:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |