main方法和def 函数

package scala_01

/**
* main方法只能放在object中运行
* object 修饰的类 就相当于静态类 也相当于代码加载到虚拟机中的 “类对象”
* 类中的方法及属性 相当于自动加上了 static
* 可以直接通过 “类对象”(类名)直接进行调用
* 单例模式
*/ object ScalaDemo1 { /**
* Scala中的main方法
* 在scala中方法不可以用static修饰
* def 定义一个函数的关键字
* main 方法名
* args: Array[String] 参数名:参数类型
* Unit 返回值类型 相当于java中的void
* {} 方法体
*/ def main(args: Array[String]): Unit = {
println("Hello World!~") // 在scala中使用java中的类
val stu: StudentJava = new StudentJava(1,"zs",18)
println(stu.id)
println(stu.name)
println(stu.getAge)
println(stu getAge)
println(stu) // 通过类名直接调用方法
ScalaDemo1.print()
println(ScalaDemo1.print()) ScalaDemo1.print2("hahah")
} def print():String={
println("scala")
return "0"
} def print2(s:String): Unit ={
println("scala2")
println(s)
} } /**
* 输出结果
* Hello World!~
* 1
* zs
* 18
* 18
* StudentJava{id=1, name='zs', age=18}
* scala
* scala
* 0
* scala2
* hahah
*/

变量,类型转换,字符串分割拼接

package scala_01

object ScalaDemo2 {

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

    /**
* 变量
* 可以用val 和 var修饰,定义的时候不需要指定类型
* 用val修饰的变量 不能进行修改 相当于常量
* 用var修饰的变量 可以进行修改
* 能使用val就用val
*/ val i = 100
var j = 200 println(i)
println(j) j = 300
println(j) /**
* 类型推断
*/ // 自动推断
val k = 100
// 手动加上类型 √
val kk: Int = 200 println(k + kk) // Java中的类型转换
// Scala中的String就是Java中的String
val str1: String = "123"
println(Integer.valueOf(str1)) // Scala 中的类型转换
//只要数据符合要求就可以直接to+类型
// 隐式转换 动态增加方法
val str2: String = "321"
println(str2.toInt) // 字符串分隔
val str3: String = "Hello,World"
println(str3.split(",")) // 字符串拼接
val builder: StringBuilder = new StringBuilder()
builder.append("a")
builder.append("pple")
println(builder) // scala中更好的字符串拼接
val str4: String = "bana"
val str5: String = "na"
// s"$变量名" ,底层也是StringBuilder
println(s"$str4,$str5") // java中不行
println("-" * 50)
}
} /**
* 100
* 200
* 300
* 300
* 123
* 321
* [Ljava.lang.String;@45c8e616
* apple
* bana,na
* --------------------------------------------------
*/

文件读写和JDBC

package scala_01

import java.sql.DriverManager

import scala.io.{BufferedSource, Source}

object ScalaDemo3 {

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

    // 文件读写
val source: BufferedSource = Source.fromFile("scala/data/students.txt")
val it: Iterator[String] = source.getLines()
for (elem <- it) {
println(elem)
} println("-"*50) // 第一种简化方式
// Source.fromFile.getLines.for
for (elem <- Source.fromFile("scala/data/students.txt")
.getLines()) {
println(elem)
}
println("-"*50) // 第二种简化
Source.fromFile("scala/data/students.txt")
.getLines()
.foreach(println) // JDBC
Class.forName("com.mysql.jdbc.Driver")
val conn =
DriverManager.getConnection("jdbc:mysql://master:3306/student?useSSL=false", "root", "123456") val statement = conn
.prepareStatement("select * from student where age=?") statement.setString(1,"22")
val rs = statement.executeQuery()
while (rs.next()){
val name = rs.getString("name")
val age = rs.getString("age")
println(s"$name,$age")
}
conn.close()
}
}

面向对象编程

/**
* 面向对象编程
* 类中可以定义属性、方法、构造函数
*/ /**
* {}就是scala中类默认的构造函数
* id: String, name: String, age: Int 构造函数的参数
*/ class Student(id: String, name: String, age: Int) {
println("默认的构造函数")
val _id = id
val _name = name
val _age = age
var _clazz: String = _ // 重载构造方法 需要重新实现this方法
// 第一行代码必须调用默认的构造方法
def this(id: String, name: String, age: Int, clazz: String) {
// 调用默认的构造方法
this(id, name, age)
_clazz=clazz
println("重载构造方法") } // 重写了父类的toString方法
override def toString(): String = {
// 如果变量名以下划线开头 需要用花括号括起来
// 如果想调用变量的某个方法 也需要用花括号括起来
// return 可以省略 最后一行代码默认是返回的值
s"Student(_id=${_id}, _name=${_name}, _age=${_age},_clazz=${_clazz})"
} } object ScalaDemo4 {
def main(args: Array[String]): Unit = {
val stu: Student = new Student("1001", "zs", 18)
println(stu._id)
println(stu._name)
println(stu._age)
println(stu) println("-" * 50) val stu2: Student = new Student("001", "张三", 21, "文科一班")
println(stu2._id)
println(stu2._name)
println(stu2._clazz)
println(stu2)
} } /**
* 默认的构造函数
* 1001
* zs
* 18
* Student(_id=1001, _name=zs, _age=18,_clazz=null)
* --------------------------------------------------
* 默认的构造函数
* 重载构造方法
* 001
* 张三
* 文科一班
* Student(_id=001, _name=张三, _age=21,_clazz=文科一班)
*/

继承


object ScalaDemo5 {
def main(args: Array[String]): Unit = {
//这里A也可以使用B,A更加体现出多态
val b:A = new B("002","ls",22)
println(b)
} } class A(id:String,name:String){
println("A的构造方法") val _id=id
val _name =name override def toString = s"A(_id=${_id}, _name=${_name})"
} /**
* 继承还是使用extends关键字
* 但是在继承就需要调用父类的构造方法
*/
class B(id:String,name:String,age:Int) extends A(id,name){
println("B中的构造方法") val _age=age
override def toString = s"B(${_id}, ${_name}, ${_age})"
} /**
A的构造方法
B中的构造方法
B(002, ls, 22)
*/

case类,最常用的

object ScalaCaseDemo6 {
def main(args: Array[String]): Unit = {
// 创建样例类的对象时 new关键字可以省略
val ss:Stu = Stu("0003","ww",21,"男","理科八班")
println(ss.id)
println(ss.name)
println(ss.age)
println(ss.gender)
println(ss.clazz) // 样例类中的参数 就是该类的属性
// 默认以val修饰 如果想要重新赋值 则需要手动指定为var
ss.age=88
println(ss.age) }
} case class Stu(id:String,name:String,var age:Int,gender:String,clazz:String)

Scala语法1的更多相关文章

  1. scala语法在spark withScope上的应用

    withSpout在spark中是用来做DAG可视化的,它在代码里的用法如下(以map为例,spark 2.0.0版本) def map[U: ClassTag](f: T => U): RDD ...

  2. scala语法解析(解码指环)

    看惯了JAVA的语法,再看scala的语法,有的晦涩难懂.正好遇到一个介绍scala语法的文章,就直接截图留念.省的再临时抱佛脚了.

  3. 1.scala语法

    对象的apply方法 (1)对象调用apply()方法,可省略成() (2)string对象的apply方法返回第n个字符 "hello"(4) //'o' if语句的返回值 ja ...

  4. Scala语法笔记

    JAVA中,举例你S是一个字符串,那么s(i)就是该字符串的第i个字符(s.charAt(i)).Scala中使用apply的方法 JAVA与C++的?:操作符 等同于Scala的 if ( x &g ...

  5. Java和Scala语法比较

    类型推断 挑逗指数: 四星 我们知道,Scala一向以强大的类型推断闻名于世.很多时候,我们无须关心Scala类型推断系统的存在,因为很多时候它推断的结果跟直觉是一致的. Java在2016 年也新增 ...

  6. Spark记录-Scala语法基础

    参考:http://docs.scala-lang.org/cheatsheets/index.html.http://docs.scala-lang.org/.http://www.scala-la ...

  7. Scala 语法基础

    一 简介 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性.Scala 运行在Java虚拟机上,并兼容现有的Java程序.Scal ...

  8. Scala 语法(一)

    (1)基本语法 变量 val var(可变变量): 数据类型 Byte,Char,Int,Short,Long,String(字符),Float,Double,Boolean(true,flase). ...

  9. scala语法

    1:双重for循环(相当于j是i的内存循环):for (i <-0 to n; j <-10 to 20){ println(i);println(j)} 2:单层for循环:for (i ...

  10. Scala语法(二)

    (1)类,对象 //定义类(属性.方法),实例化对象 class counter{ *//主构造器 class counter(name:String,mode:Int){ ... } 实例化:val ...

随机推荐

  1. Git使用教程(超全,看一篇就够了)

    目录 Git介绍 Git安装 Git使用 问题与解决 推荐学习网址 Git介绍 Git是什么? Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别? SVN是集中式版本控制系 ...

  2. 013 Linux 搞懂「文件所属者更改及权限的赋予」从未如此简单(chmod、chgrp、chown)

    目录 01 一图详解「ls -l」 02 两种符号区分表示文件和目录 03 三种访问权限及表示 04 四种符号表示文件所属者用户 05 三个变更文件所属者及修改所属者权限的命令 06 工作实践命令举例 ...

  3. Atcoder ARC-068

    A 不难发现从 \(5\) 开始一直往 \(6\) 转再转回来是最优的,直接模拟即可. B 不难发现可以将多余部分直接贪心消去,最后必然会剩下两个或 \(1\) 个多余的数. 如果剩下两个,此时多余的 ...

  4. uniapp 小程序全屏的实现

    通过设置navigationStyle, 即自定义导航实现背景全屏 参考文章:  微信小程序 自定义头部导航栏 navigationStyle 代码部分 在page.json中, 加入 "n ...

  5. js 用 void 0 替代 undefined

    underscore 源码没有出现 undefined,而用 void 0 代替之.为什么要这么做?我们可以从两部分解读,其一是 undefined 哪里不好了,你非得找个替代品?其二就是替代品为毛要 ...

  6. Maven多环境配置实战 filter

    目前在开发一个wap项目,主要有开发.测试和最终部署上线几个阶段,每个阶段对配置(数据库.日志)都有不同的设置.以前都是以开发环境为主,在测试和部署上线时由部署工程师负责修改配置并上线.但是公司并非都 ...

  7. Spring中@Autowired 注解的注入规则

    默认根据类型,匹配不到则根据bean名字 1.声明一个service接口 public interface HelloService { void sayHello(); } 2.service接口的 ...

  8. ASP.NET与.NET Framework和C#的关系

    你好,是我琉忆. 今天我们讲一讲ASP.NET与.NET Framework和C#的关系. 在开始介绍ASP.NET之前,我们需要先了解以下运行ASP.NET的开发平台.NET框架.如果你之前学过C# ...

  9. JavaScript的原生Ajax解析

    通过JavaScript的Ajax进行详细的解析过程,从而更好的了解Jquery的Ajax. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百 ...

  10. 北京太速科技-6U VPX 6槽 Full Mesh结构背板机箱

    一.产品概述 Ori6UVPX6SlotFullMesh264背板机箱 为 6U VPX 6槽 Full Mesh结构,用于实现PCIE.RapidIO IO 4X Full Mesh 高速数据互联, ...