Scala基础05:包与引用

Scala通过不同的包能使用很多类型的表达式,而包的引入在Scala中相当灵活。包是用来管理名称的。

包的定义

在文件顶部,使用package定义包,与java一样。

package cn.sjq.scala

嵌套形式的包定义:

package com{
  package horstmann{
    package impatient{
      class Employee{
        // ...
      }
    }
  }
}

Scala的这种写包的方法使用的并不多。Scala写的Play框架使用的较多。

与对象和类的定义不同,同一个包可以定义在多个文件中。

例:

如下代码位于Employee.scala

package com{
  package horstmann{
    package impatient{
      class Employee{
        // ...
      }
    }
  }
}

如下代码位于Manager.scala

package com{
  package horstmann{
    package impatient{
      class Manager{
        // ...
      }
    }
  }
} 

源文件的目录和包没有强制关系。不需要将Employee.class与Manager.scala放在com/horstmann/impatient目录中。

同样的,也可以在同一个文件中定义为多个包:

package com{
  package horstmann{
    package impatient{
      class Employee{
        // ...
      }
    }
  }
}

package com{
  package horstmann{
    package impatient{
      class Manager{
        // ...
      }
    }
  }
}

作用域规则

包声明链com.horstmann.impatient并不使com与com.horstmann可见。

包声明链也不对包含的包进行声明。即声明com.horstmann并不意味着声明com.horstmann.impatient。

包对象

类成员对于包的可见性

在Java中,没有声明为public、private或protected的类成员在包含该类的包中可见。

scala中,对于包的可见性可以任意定义。

例:

package com.horstmann.impatient.people

class Person{

private [people] def description = “A person with name” +

description对于people包是可见的。

people包下的所有成员,可以使用这个类成员。

也可以将成员的可见度延展到上层包。

package com.horstmann.impatient.people

class Person{

private [impatient] def description = “A person with name” + name

}

例:一个更复杂的示例。

package com{

package python{

private[com] class List{

protected[python] def get(i:Int){}

class ArrayList{

private[ArrayList] def size{}

}

private[this] var size = 0

}

}

package csharp{

import com.python._

object Obj{

private[csharp] val pythonList = new List;

}

}

}

Scala包的引入

Scala使用包,可以在任何地方引入。

例:

class Manager{

import scala.collection.mutable._

val subordinates = new ArrayBuffer[Employee]

}

直接使用

直接在使用该名称时引入:

val Y= scala.collection.mutable.Map( (a1, b1) , (a2, b2) , (a3, b3))

利用import语句引入

import scala.collection.mutable.ArrayBuffer

val C= new ArrayBuffer[T]()

利用import语句引入包的全部成员:

import scala.collection._

这里的“_”相当于Java中的“*”。

引入同一个包中的几个成员:

import scala.collection.{Map,Set}

重命名

当需要引入不同的包中同名的成员时,可以对成员进行重命名。

import scala.collection.mutable.HashMap

import java.util.{ HashMap => JavaHashMap}

隐藏引入

隐藏引入的对象

import java.util.{ HashMap => _, _}

该语句表示,java.util.HashMap 将被隐藏,无法被使用。而java.util中其他的全部成员,都被引入。

自动引入

Scala默认引入以下三个包:

import  java.lang._

import  scala._

import  Predef._

在适当的地方引入适当的包

可以在脚本开头引入。

可以在具体使用前引入。

包的引入是有作用范围的,且跟函数与声明的作用范围是一致的。

例:

import scala.math._

这样就可以使用

sqrt(2)

pow(2,4)

min(3,pi)

Scala没有静态方法。但有单例对象。

通常,一个类对应一个伴生对象。方法与Java的静态方法一样。

Scala文件访问

scala中访问文件需要使用scala.io.Source对象。

例:读取本地文件。

def main(args: Array[String]) {

// 访问文件

val file = Source.fromFile("D:\\scala-test.txt")

for(line <- file.getLines){

println(line)

}

}

若使用:

for(line <- file){

println(line)

}

则不会一行一行的读取数据,而是一个字一个字的读取并输出。

例:读取网络文件。

def main(args: Array[String]) {

// 访问网络URL

val file = Source.fromURL("http://www.baidu.com")

for(line <- file.getLines){

println(line)

}

}

时间: 2024-10-02 05:22:00

Scala基础05:包与引用的相关文章

Scala详解---------包和引用

包和引入 摘要: 在本篇中,你将会了解到Scala中的包和引入语句是如何工作的.相比Java不论是包还是引入都更加符合常规,也更灵活一些.本篇的要点包括: 1. 包也可以像内部类那样嵌套 2. 包路径不是绝对路径 3. 包声明链x.y.z并不自动将中间包x和x.y变成可见 4. 位于文件顶部不带花括号的包声明在整个文件范围内有效 5. 包对象可以持有函数和变量 6. 引入语句可以引入包.类和对象 7. 引入语句可以出现在任何位置 8. 引入语句可以重命名和隐藏特定成员 9. java.lang.

Scala基础语法 (一)

如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我们可以认为 Scala 程序是对象的集合,通过调用彼此的方法来实现消息传递.接下来我们来理解下,类,对象,方法,实例变量的概念: 对象 - 对象有属性和行为.例如:一只狗的状属性有:颜色,名字,行为有:叫.跑.吃等.对象是一个类的实例. 类 - 类是对象的抽象,而对象是类的具体实例. 方法 - 方法

scala 基础知识总结

在最开始处引入 log 相关的 包 import org.apache.log4j.{Logger,Level} 在需要屏蔽日志输出的地方加上这两行代码 // 屏蔽不必要的日志显示在终端上 Logger.getLogger("org.apache.spark").setLevel(Level.ERROR) Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF) // scala io Case

Scala系统学习(三):Scala基础语法

如果您熟悉Java语言语法和编程,那么学习Scala将会很容易.Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的. 当编写Scala程序时,它可以被定义为通过调用彼此的方法进行通信的对象的集合.现在我们简单地看一下类,对象,方法和实例变量的含义. 对象 - 对象有状态和行为.一个对象是类的一个实例.例如 - 狗有状态:颜色,名称,品种,它行为有:摇摆,吠叫和吃东西. 类 - 可以将类定义为描述与该类相关的行为/状态的模板/蓝图. 方法 - 一个方法基本上是一种行为.一个

第一章 Scala基础篇

目录 一.Scala基础语法 (一) 变量.类型.操作符 1.变量申明 2.字符串 3.数据类型 4.操作符 (二)循环判断 1.块表达式 2.条件表达式 3.循环表达式 (三)方法和函数 1.方法 2.函数 3.方法和函数的区别 4.总结 二.Scala常用数据结构/集合 (一)Scala集合分类和继承体系 1.分类 2.继承体系 (二)数组 (三)元组 (四)List (五)队列 (六)Set (七)Map 一.Scala基础语法 === (一) 变量.类型.操作符 1.变量申明 ●Java

Scala基础

REPL 在Scala中的书籍中会提及REPL,REPL(Read-Eval-Print Loop):这被称为"读取-求值-打印"循环. 不带参数的Scala方法通常不使用圆括号,例如,StringOps类的API显示它有一个distinct方法,不带(),其作用是获取字符串中不重复的字符.调用如下: print("hello".distinct); Scaladoc 阅读Scaladoc的一些小窍门: 如果想使用数值类型,记得看看RichInt.RichDoubl

大数据系列修炼-Scala课程05

Scala多重继承.构造器的执行顺序.AOP实现 多重继承的trait实现:Scala中接口可以继承具体的类,trait接口可以实现多重继承,并且某个类也可以继承特定的类,在继承后面可以混入,接口的实现 多重继承构造器执行顺序:多重继承构造器执行顺序是从左到右按次序执行,如果前面类以及被继承实现了,后面的类就没有必要去实现,父类只需执行一次 object triatScala { def main(args: Array[String]): Unit = { val t1 = new Piano

Scala基础入门-1

首先需要Scala开发环境的搭建,网上自己找教程. 声明常量与变量 val foo = 0 // 常量 var bar = 0 // 变量 在Scala中,更加鼓励使用val来进行声明,也就是推荐使用常量.在大部分时候不需要分号,看自己便好…虽然是强静态类型的语言,但是却并没有写出类型——这就是类型推断. 也可以指定类型: val spark: String = "Hello Scala" 多个的同时声明: val xInt, yInt = 100 // xInt, yInt都声明为1

Scala学习(七)---包和引入

包和引入 摘要: 在本篇中,你将会了解到Scala中的包和引入语句是如何工作的.相比Java不论是包还是引入都更加符合常规,也更灵活一些.本篇的要点包括: 1. 包也可以像内部类那样嵌套 2. 包路径不是绝对路径 3. 包声明链x.y.z并不自动将中间包x和x.y变成可见 4. 位于文件顶部不带花括号的包声明在整个文件范围内有效 5. 包对象可以持有函数和变量 6. 引入语句可以引入包.类和对象 7. 引入语句可以出现在任何位置 8. 引入语句可以重命名和隐藏特定成员 9. java.lang.