初识scala(上)

scala中HelloWorld样例

/**
  * object: 是scala中的单例对象,object的方法可以直接调用
  *
  */
object Demo1Helloworld {

  /**
    * main方法需要放在object中才能运行
    *
    * def: 定义方法的关键字
    * main: 方法名
    * args: 方法参数名
    * Array[String]: 参数类型 (String类型的数组),[] 在scala代表泛型
    * Unit: 没有返回值,相当于java中的void
    * {}  中是代码体
    */
  def main(args: Array[String]): Unit = {
    //java的方式
    System.out.println("java")
    //scala的方式,  底层和java是完全一样的,只是将代码简化了
    println("scala")
  }
}

scala与Java的区别

在这里插入图片描述

变量

val :不可变的变量— 常量
var : 可变的变量 — 变量
如果后面不会对变量进行修改使用val
scala 变量的类型可以自动推断,根据等号右边的值,自动推断变量的类型
也可以显示指定变量的类型

方法(函数)

java 中只能在类中定义方法
scala 可以在任何位置定义方法

函数的简写

1、return可以省略,最后一行会作为返回值
2、如果函数只有一行代码,{}可以省略
3、返回值类型可以自动推断, 根据返回值自动推断返回值类型
4、如果参数列表为空,()可以省略

函数参数的默认值

def add(i: Int = 100, j: Int): Int = {
      i * j
    }
    
    //使用参数的名传值
    val i1: Int = add(j = 100)

    println(i1)//10000

可变参数

def test(i: Int*): Unit = {
      for (a <- i) {
        println(a)
      }
    }

    test(1, 2, 3, 4, 6, 7)

运行结果

1
2
3
4
6
7

Process finished with exit code 0

循环判断

//增强for循环
    for (i <- array) {
      println(i)
    }

    println("=" * 100)


    //通过下表遍历
    var i = 0
    while (i < array.length) {
      //通过下标获取元素
      val j = array(i)
      println(j)

      //递增下标
      i += 1
    }

    println("=" * 100)
    //scala中独有的方式,foreach函数
    array.foreach(println)

if

比较简单,和Java的语法一样

    val age = 19

    if (age >= 18) {
      println("已经成年")
    } else if (age < 18 & age > 0) {
      println("未成年")
    } else {
      println("其它")
    }

IO流

//底层还是java的io流
    val bufferedSource: BufferedSource = Source.fromFile("data/students.txt")

    //读取所有行,得到一个迭代器
    val lines: Iterator[String] = bufferedSource.getLines()

    for (line <- lines) {
      println(line)
    }

Exception(异常)

object Demo7Exactpion {
  def main(args: Array[String]): Unit = {
    try {
      //val i: Int = 100 / 0
      //抛出异常
      throw new RuntimeException("运行时异常")
    } catch {
      //匹配异常类型
      case e: ArithmeticException =>
        println("除0异常")
        //打印异常的堆栈信息
        e.printStackTrace()
      case e: RuntimeException =>
        println("运行时异常")
        e.printStackTrace()
    } finally {
      println("都会执行")
    }
    println("代码结束")
  }
}

JDBC

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


    //1、加载驱动
    Class.forName("com.mysql.jdbc.Driver")

    //2、建立链接
    val con: Connection = DriverManager.getConnection("jdbc:mysql://192.168.200.201:3306/student", "root", "123456")

    //3、写sql查数据
    val stat: PreparedStatement = con.prepareStatement("select * from students")

    //4、执行查询
    val resultSet: ResultSet = stat.executeQuery()

    //5、解析数据
    while (resultSet.next()) {
      //通过列名取数据
      val id: Long = resultSet.getLong("id")
      val name: String = resultSet.getString("name")
      val age: Long = resultSet.getLong("age")
      val gender: String = resultSet.getString("gender")
      val clazz: String = resultSet.getString("clazz")

      println(id + "\t" + name + "\t" + age + "\t" + gender + "\t" + clazz)
    }
    //关闭链接
    stat.close()
    con.close()
  }
}

读取Json

object Demo9Json {
  def main(args: Array[String]): Unit = {
    val str = "{\"id\":\"001\",\"name\":\"张三\",\"item\":[1,2,3,4]}"

    //解析json数据
    val nObject: JSONObject = JSON.parseObject(str)

    //使用key获取value
    //需要明确类型
    val id: String = nObject.getString("id")

    val name: String = nObject.getString("name")

    val item: JSONArray = nObject.getJSONArray("item")
    println(id)
    println(name)
    println(item)


  }
}

class(类)

可以在类中定义方法,属性,构造函数,可以创建类的对象
在scala的类中有一默认的构造函数

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

    //创建类的对象,调用类的构造函数
    val student = new Student("001", "张三")
    //调用对象的方法
    student.print()

    val student1 = new Student("002", "李四", 24)

    println(student1)


  }
}

class Student(id: String, name: String) {
  println("默认构造函数")
  //定义属性, 定义及赋值
  var _id: String = id
  var _name: String = name
  //定义一个未赋值的变量,  下划线的作用是占位符
  var _age: Int = _
  /**
    * 重载构造函数
    * 在重载构造函数的第一行需要先调用默认的构造函数
    *
    */
  def this(id: String, name: String, age: Int) {
    //调用默认构造函数
    this(id, name)

    //给成员变量赋值
    this._age = age
  }


  //在类中定义普通的方法
  def print(): Unit = {
    println("student")
  }


  //重写父类的方法
  override def toString: String = {
    s"Student(" + _id + "\t" + _name + "\t" + _age + ")"
  }
}

case class (样例类)

样例类:帮助我们简化写代码的类

scala在编译的过程中会自动的给样例类增加额外的属性,方法和构造函数

样例类属性默认不支持修改,需要增加var才能修改

样例类可以不通过new创建对象

case class User(id: String, var name: String, age: Int = 20)

调用

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

    //创建类的对象
    val user = new User("001", "张三")
    println(user.id)
    println(user)
    //修改属性的值
    user.name = "李四"
    println(user)
    /**
      * 样例类可以不通过new创建对象
      *
      */
    val user2 = User("003", "王五")
    println(user2)
  }
}

Apply方法

apply:是scala中一个特征的方法,可以直接使用object名调用

object Demo12Apply {
  def main(args: Array[String]): Unit = {
    Test.print()
    Test.apply()
    //调用对象的apply方法
    Test()
    //不通过new创建对象
    val test: Test = Test()
  }
}

/**
  * object: 是一个特殊的类(类和对象绑定了,只一个一个对象)
  * object中的方法可以直接调用,不需要创建对象
  *
  */
object Test {
  def print(): Unit = {
    println("test")
  }
  /**
    * apply:是scala中一个特征的方法,可以直接使用object名调用
    *
    */
  /*  def apply(): Unit = {
      println("apply")
    }*/

  def apply(): Test = new Test()
}

class Test {

}

字符串拼接

    val s = "java"
    val i = 1000
    val d = 3.14
    //底层还是StringBuilder
    val str = s"$s\t${i}java\t$d"
    println(str)

运行结果

java	1000,scala,	3.14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值