分类 - 编程之路

2020-02-20 23:54:44    11    0    0

赋值语句返回值

在Java中,赋值语句的结果是被赋上的值(在本例中就是从标准输入读取的一行文本),而在Scala中赋值语句的结果永远是单元值()。因此,赋值语句"line=readLine()"将永远返回(),而不是""。这样一来,while循环的条件检查永远都不会为false,循环将无法终止。

while ((line=readLine()) != "")
    println("go
2020-02-19 13:37:23    8    0    0

Rational类的规格定义

有理数(rational number)是可以用比例表示的数,比如 1/2 4/5等等,其中包含了分子(numerator)分母(denominator)。跟浮点数相比,有理数的优势是小数是精确展现的,而不会舍入或取近似值。本章节会设计一个有理数的对象,它包括了一些常用的功能。

 

Rational对象是不可变的,每一个有理数都会有一个Rational对象来表示。当你把两个Rational对象相加时,你将会创建一个新的Rational对象来持有它们的和。

Class Rational(n: Int, d: Int){
    require(d != 0)
    private val g = gcd(n.abs, d.abs)
    val numer = n / g
    val denom = d / g
    def this(n: Int) = this(n, 1)
    def + (that: Rational): Rational = new Rational(
        numer * that.denom + that.numer * denom,
        denom * that.denom
    )
    def + (i: Int): Rational = new Rational(numer + i * denom, denom)
    
    def - (that: Rational): Rational = new Rational(
        numer * that.denom - that.numer * denom,
        denom * that.denom
    )
    def - (i: Int): Rational = new Rational(numer - i * denom, denom)
    
    def * (that: Rational): Rational =
        new Rational(numer * that.numer, denom * that.denom)
    def * (i: Int): Rational = new Rational(numer * i, denom)
    
    
2020-02-18 00:06:17    13    0    0

Scala基础类型 

Scala中以 0x 或者 0X开头的是十六进制,可以包含0到9以及大写或小写的A到F表示的数字,注意:Scala的shell总是以十进制打印整数。

 

Scala的3引号和Python的类似,但是Scala可以去除开始的空格,用法如下:

scala> """
     | where are you
     | hahahaha
     | 
2020-02-17 00:11:44    21    0    0

 类、字段、方法

在类中,通过 val 或者 var 定义的字段是指向对象的变量,def 定义的方法包含可执行代码。标记私有防止外部直接访问字段:private var sum = 0  。在 Scala 中 默认就是public的,比如ChecksumAccumulator.scala

class ChecksumAccumulator {
    private var sum = 0
2020-02-16 19:23:24    21    0    0


Scala的解释器执行结果被存在了类似 res0 的val值里面,可以再次调用 res0。

 

定义函数

def max(x: Int, y:Int): Int = {
    if (x > y) x
    else y
}

 Scala方法参数的一个重要特征是它们都是 val 而不是 var。

 

Scala脚本

在Scala 脚本中,args是一个字符串类型的

2020-01-30 22:37:44    29    0    0

Java从8开始,不但引入了Lambda表达式,还引入了一个全新的流式API:Stream API。它位于java.util.stream包中。这个Stream不同于java.io的InputStream和OutputStream,它代表的是任意Java对象的序列,它类似Python中的迭代器。

一. 创建Stream

1.1 Stream.of()

创建Stream最简单的方式是直接用Stream.of()静态方法,传入可变参数即创建了一个能输出确定元素的Stream,虽然这种方式基本上没啥实质性用途,但测试的时候很方便。

  1. import java.util.stream.Stream;
  2. public class Main {
  3. public static void main(String[] args) {
  4. Stream<String> stream = Stream.of("A", "B", "C", "D");
  5. stream.forEach(System.out::println);
  6. }
  7. }


2020-01-29 19:37:04    24    0    0

反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息。


一. 类的加载

1.1 加载的流程

class是由JVM在执行过程中动态加载的。JVM在第一次读取到一种class类型时,将其加载进内存。Java的所有类都是一个叫做Class的类的一个实例,Class类大概如下所示。每加载一种classJVM就为其创建一个Class类型的实例,并关联起来。注意:这里的Class类型是一个名叫Classclass

  1. public final class Class {
  2. private Class() {}
  3. }

注意JVM在执行Java程序的时候,并不是一次性把所有用到的class全部加载到内存,而是第一次需要用到class时才加载。

2020-01-29 01:02:52    19    0    0

一. 定义枚举类

通过enum关键字来定义枚举类,enum定义的类型就是class,只不过它有以下几个特点:

  • 定义的enum类型总是继承自java.lang.Enum,且无法被继承;
  • 只能定义出enum的实例,而无法通过new操作符创建enum的实例;
  • 定义的每个实例都是引用类型的唯一实例;
  • 可以将enum类型用于switch语句。
  1. enum Weekday {
  2. MON(1, "星期一"), TUE(2, "星期二"), WED(3, "星期三"), THU(4, "星期四"), FRI(5, "星期五"), SAT(6, "星期六"), SUN(0, "星期日");
  3. public final int dayValue;
  4. private final String chinese;
  5. private Weekday(int dayValue, String chinese) {
  6. this.dayValue = dayValue;
  7. this.chinese = chinese;
  8. }
  9. @Override
  10. public String toString() {
  11. return this.chinese;
  12. }
  13. }
2020-01-29 00:38:39    18    0    0

一. 数据类型

Java的数据类型分如下两种,引用类型可以赋值为null,表示空,但基本类型不能赋值为null

  • 基本类型:byte,short,int,long,boolean,float,double,char
  • 引用类型:所有classinterface类型


Java核心库为每种基本类型都提供了对应的包装类型:

基本类型对应的引用类型
booleanjava.lang.Boolean
bytejava.lang.Byte
shortjava.lang.Short
intjava.lang.Integer
longjava.lang.Long
floatjava.lang.Float
doublejava.lang.Double
charjava.lang.Character

2020-01-29 00:10:14    23    0    0

一. 字符串原理

  • 概要说明
    Java中,String是一个引用类型,它本身也是一个class,实际上字符串在String内部是通过一个char[]数组表示的,因此,按下面的写法也是可以的String s2 = new String(new char[] {'H', 'e', 'l', 'l', 'o', '!'}); 因为String太常用了,所以Java提供了"..."这种字符串字面量表示方法。Java字符串的一个重要特点就是字符串不可变。这种不可变性是通过内部的private final char[]字段,以及没有任何修改char[]的方法实现的。

  • 早期JDK版本的String
    总是以char[]存储,它的定义如下:

  1. public final class String {
  2. private final char[] value;
  3. private final int offset;
  4. private final int count;
  5. }