作业点评|学习笔记

简介: 快速学习作业点评。

开发者学堂课程【Scala 核心编程-基础:作业点评】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/8965


作业点评

 

内容简介

一、类

二、包的引入

 

一、类

1、编写一个 Time 类,加入只读属性 hours 和 minutes,和一个检查某一时刻是否早于另一时刻的方法 before(other: Time);Boolean。Time 对象应该以 new Time(hrs, min)方式构建。(以24小时制)

题目详解:

加入只读属性的话,这个地方就需要用 val 来进行修饰,方法中传进去的类型也是 time 类型,题目中所提到的“Time对象应该以 new Time(hrs, min)方式构建”说明我们需要提供构造器,构造器可以以主构造器的方式给,也可以以辅助构造器的方式给。

代码设置:

class Time(hrs: Int min: Int){//构造器

val hours: Int = hrs //属性

val minutes: Int = min //属性

def before(other :Time):Boolean ={//方法

if (hours < other. hours){//如果当前的小时数小于other true

else if (hours > other .hours){//如果当前的小时数大于other false

}else{//小时数相等,判断分钟

if (minutes < other. minutes) true else false}

}//这里做了嵌套的分支,如果当前分钟小于其他分钟,还是意味着当前分钟早;否则就变成两个逻辑,大于或者相等,这两种结果都意味着当前分钟晚

val time1 = new Time(11,30)

val time2 = new Time(10,30)

print ln(time1.before(time2))// false

接下来新建包来测试运行代码

代码如下:

package com.atguigu.chapter07.homework

object Exercise01 {

def main(args: Array[string]): unit = {

//测试

val cur = new Time(10,10)

val other = new Time(10,20)

print Ln( cur .before(other)) //执行结果根据输入的对象不同而定

}

class Time(hrs : Int, min: Int) {//构造器

val hours : Int = hrs //属性

val minutes : Int = min //属性

def before(other: Time): Boolean = {//方法

if (hours < other .hours) {//如果当前的小时数小于other true

}

else if (hours > other .hours) {//如果当前的小时数大于other false

}

else {//小时数相等,判断分钟

if (minutes < other .minutes) true else false

}

执行结果:

true

当改变代码如下时:

val cur = new Time(10,21)

val other = new Time(10,20)

执行结果:

false

当两个时间相同时,执行结果也是 false,代表着前面的时间段还是小于后面的时间段。

2、创建一个 Student 类,加入可读写的 JavaBeans 属性 name(类型为 string)和 id(类型为 Long)。有哪些方法被生产?(用java p查看。)可以在 Scala 中调用 JavaBeans 的 getter 和 setter 方法吗?

(1)题目详解:

JavaBeans 最重要的属性就是 getter 和 setter 方法;用 Java p 查看该指令可以查看.class 文件的反编译的方法声明,还可以看到反汇编代码。

(2)案例代码如下:

package com.atguigu.chapter07 .homework

import scala. beans.

object Exercise02{

def main(args: Array[string]): unit = {

print ln( "ok")

}

class student {

//读写属性

@BeanProperty var name: string =_

@Bean Property var id: Long -_

}

3)打开 Show in Explorer,现在用此指令跑一下,在输入框中搜索 cmd,在目录下面有刚刚编写的 Exercise02,首先需要进行编译,输入 Scala c Exercise02 Scala 之后,再输入 dir,此时生成了如下图的文件夹

image.png

4)在此文件夹中,才有对应的 scala 文件,因为已经打包了,这样看不是很方便,为了方便先把代码 package com.atguigu.chapter07 .homework 注销,可以把包注销,反编译之后的 class student 文件在当前目录下就比较好找,再进行编译,可以看到 student. class 文件,如图:

image.png

5)接下来用 Java p 指令来跑程序,可以看到Java在底层生成了一系列的方法,输入 Java p student .class,再点击回车键,便可看到当前的 Java 如图:

image.png

name()方法是默认生成的,跟注解无关;name-也是默认生成的,因为是 var 类型;set name、set id、get name和get id 是因为注解生成的;student 是默认的构造器,此指令把所有当前 class 反编译后的方法都展现出来了。

6)除此之外,还可以看反汇编代码

在框中输入 Java p-c student .class,再回车,可以看到一些反汇编的代码,此作为了解。

 

二、包的引入

1、练习使用包的各种声明方式,并查看不同

这个不进行细讲,引入方式很多 import 指令

2、编写一段程序,将 Java 哈希映射中的所有元素拷贝到 Scala 哈希映射。用引入语句重命名这两个类。

(1)题目详解:

暂时是有难度的,因为关于集合的知识并未讲到。哈希映射就是 Hash Map, “用引入语句重命名这两个类”是说需要对类进行重命名,涉及到这个知识点。

(2)代码设置:

object Q6 extends App{

import java. util.{HashMap => Java Hash Map}//重命名,把 Java Hash Map 命名为 Java Hash Map,因为题目当中有要求

import collection. Mutable//可变的意思.{HashMap =>Scala HashMap,-}

val java Map = new Java Hash Map[Int ,String]// [Int ,String]泛型,在Scala中泛型用“[ ]”表示,在Java中泛型用“< >”表示

java Map .put(1, "One");//加入了四对key-val

java Map. put(2,"Two ");

java Map. put(3, "Three"');

java Map. put(4, "Four"');

val scala Map = new Scala  Hash  Map[Int ,String]//创建了Scala的hash map

for(key <- java Map. key Set(.to Array){

scala Map +=(key. as Instance Of[Int] -> java Map. get(key))

print ln(scala Map. mk String(""))

(3)对代码 java Map. key Set(.to Array详解

代码设置:

package com.atguigu.chapter07.homework

//说明

①//当我们继承了 App 后,就可以直接在这个类中执行代码,不需要在写 main 入口

object Exercise04 extends App {//这里没有继续使用主函数,而是用了继承

import java. util.{HashMap => Java Hash Map}//重命名

import collection. Mutable{HashMap =>Scala HashMap,-}

val java Map = new Java Hash Map[Int ,String]// [Int ,String]泛型

java Map .put(1, "One");//加入了四对key-val

java Map. put(2,"Two ");

java Map. put(3, "Three"');

java Map. put(4, "Four"');

val scala Map = new Scala  Hash  Map[Int ,String]//创建了Scala的hash map

//说明

//Java map. key Set( ).to Array,这里是讲Java map的key转成数组

for(key <- java Map. key Set(.to Array){

print ln(“key==key

执行结果:

Key=1

Key=2

Key=3

Key=4

// key. as Instance Of[Int]:将 key 强制转成 int 类型

// java Map. get(key),得到 key 对应的 value

//(key. as Instance Of[Int] -> java Map. get(key))是 key->value

//+=:将 key->value 加入(拷贝)到 Scala map

// print ln(scala Map. mk String("")):mk String 是说把 map 的内容取出之后,用空格间隔,形成字符串,返回的是 string 字符串

scala Map +=(key. as Instance Of[Int] -> java Map. get(key))

print ln(scala Map. mk String(""))

APP 的深入理解

点开 APP 看看,是 trait APP,trait 是特制,在 Scala 里面兼顾 Java 的接口和抽象类的特点,换句话说,在Scala中trait 等价于 Java 的两个角色,这两个角色就是接口和抽象类,在 trait APP 中有一个方法直接把主函数放在里面了。

比如直接写代码进去,还是会执行的;代码如下:

object Exercise04 extends App {

print ln( "ok~~~")

执行结果:

ok~~~

因为"ok~~~"这句话被包含到了主函数当中,接下来看一下这段话的反编译代码,里面其实是生成了很多东西的,根本原因是在代码中加上了 APP,当继承了 APP,就会把 APP 里面的方法全都组进去,其中有一个方法便是主方法。

点击 Exercise04,进去之后可看到主函数,会用反射去调用 APP 当中的主函数,在主函数中,会加入所传的参数,最终进行调用和执行,大概逻辑是如此的。

相关文章
|
6月前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用合集之任务执行一周后,TaskManagers挂掉,是什么原因导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
运维 关系型数据库 MySQL
极客时间架构实战营作业三
极客时间架构实战营作业三
133 0
|
消息中间件 Java 中间件
极客时间架构实战营作业六
极客时间架构实战营作业六
119 0
|
消息中间件 存储 关系型数据库
极客时间架构实战营作业八
极客时间架构实战营作业八
160 0
|
数据可视化 开发者
《支付宝地推的设计故事-商服作业 CRM 设计-梦宛》演讲视频&文字版
《支付宝地推的设计故事-商服作业 CRM 设计-梦宛》演讲视频&文字版
140 0
|
存储 缓存 负载均衡
极客时间架构实战营作业五
极客时间架构实战营作业五
128 0
|
JavaScript 前端开发 Java
极客时间架构实战营作业一
极客时间架构实战营作业一
162 0
|
存储 JSON NoSQL
极客时间架构实战营作业四
极客时间架构实战营作业四
112 0
极客时间架构实战营作业二
极客时间架构实战营作业二
91 0
|
容灾 网络协议
极客时间架构实战营模块 7 作业
极客时间架构实战营模块 7 作业
85 0
下一篇
无影云桌面