分类 - 编程之路

2020-02-18 00:06:17    12    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    20    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    26    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    17    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    21    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. }
2020-01-27 18:42:27    33    0    0

一. 类和实例

  • 一个.java文件只能包含一个public类,但可以包含多个非public类。如果有public类,文件名必须和public类的名字相同。
  • 如果不确定是否需要public,就不声明为public,即尽可能少地暴露对外的字段和方法。
  • 创建新对象时,优先选用静态工厂方法而不是new操作符。
  1. class Person {
  2. public String name;
  3. public int age;
  4. }
  5. Person ming = new Person();
  6. ming.name = "Xiao Ming";
  7. ming.age = 12;
  8. System.out.println(ming.name);


  • 定义为publicclassinterface,可以被当前包,其他包的任何类访问。
2019-12-19 21:46:47    27    0    0

在Java中,如果一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合。很显然,Java的数组可以看作是一种集合

一. List

在集合类中,List是最基础的一种集合:它是一种有序链表。List的行为和数组几乎完全相同:List内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始。

1.1 创建list

我们来比较一下ArrayList和LinkedList:通常情况下,我们总是优先使用ArrayList。

方法ArrayListLinkedList
获取指定元素速度很快需要从头开始查找元素
添加元素到末尾 速度很快速度很快
在指定位置添加/删除需要移动元素不需要移动元素
内存占用较大