
Java & Scala
文章平均质量分 71
Java和Scala的学习笔记
SuPhoebe
不是我针对谁,我是说在座的诸位都比我强
展开
-
Java中的自定义注解@interface
Java的注解大家用得都挺多的,现在讲解一下它提供的自定义注解语法。自定义注解使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是...原创 2018-03-20 05:03:55 · 1709 阅读 · 1 评论 -
Java中的String、StringBuffer和StringBuilder
Java中的String、StringBuffer和StringBuilder线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。java.lang.String不可变转载 2018-02-02 08:42:51 · 254 阅读 · 0 评论 -
Scala中的文件操作
Scala中的文件操作文件读取在Scala中,如果只是简单的读取文件内容,可以有两种方法,第一是使用Java的API,第二种就是使用scala.io.Source模块。读取行import scala.io.Source;object Demo extends App { val filename = "/Users/Phoebe/Documents/haha...原创 2018-02-18 08:38:40 · 1756 阅读 · 0 评论 -
Scala中的yield
Scala中的yield简介对于for循环的每次迭代,yield都会生成一个将被记住的值。就像有一个你看不见的缓冲区,for循环的每一次迭代都会将另一个新的值添加到该缓冲区。 当for循环结束运行时,它将返回所有已赋值的集合。返回的集合的类型与迭代产生的类型相同,因此Map会生成Map,List将生成List,等等。另外请注意,最初的集合没有改变。for / yield构造根据原创 2018-02-07 05:07:00 · 1250 阅读 · 0 评论 -
Scala中的Option
Scala中的Option避免null使用大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是“无”,在Java,它是null。写Java程序的时候,经常会碰到没有有意义的东西可以返回,我们返回null。在Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的。因此调用方必须检查返回值,不然会有NullPointerException的异常。...原创 2018-02-13 05:20:36 · 3151 阅读 · 0 评论 -
scala中的集合与集合操作
scala中的集合Scala的集合类可以从三个维度进行切分:可变与不可变集合(Immutable and mutable collections)静态与延迟加载集合 (Eager and delayed evaluation )串行与并行计算集合(Sequential and parallel evaluation )可变与不可变集合[1]可变集合可以在适当的地方被更新或扩原创 2018-02-04 01:05:28 · 3412 阅读 · 0 评论 -
scala中的隐式转换与隐式参数
scala中的隐式转换与隐式参数简介在scala语言中,隐式转换是无处不在的,它们存在固有的隐式转换,不需要人工进行干预。这是我们之前说的Scala类的继承情况,虚线标注出了Scala帮我们实现的隐式转化。例如Float在必要情况下自动转换为Double类型在 scala中的泛型编程的视图界定中我们也提到,视图界定可以跨越类层次结构进行,它背后的实现原理就是隐式转换。例原创 2018-02-04 10:15:40 · 401 阅读 · 0 评论 -
Scala中的模式匹配
Scala中的模式匹配前言模式匹配是一种scala中的一种函数式编程概念,也常常用于OOP中的一些多态实现,跟java、C++中的switch case或者正则表达式神似,但是试用范围更广。大家需要记住的是:Scala的模式匹配发生在但绝不仅限于发生在match case语句块中,这是Scala模式匹配之所以重要且有用的一个关键因素!match表达式match表达式始原创 2018-02-03 01:50:10 · 908 阅读 · 0 评论 -
scala中的classOf、isInstanceOf、asInstanceOf
scala中的classOf、isInstanceOf、asInstanceOfScala的三个预定义(predefined)方法,我们经常用到。object PredefineTest{ def main(args: Array[String]): Unit = { val c : Char = 97.asInstanceOf[Char] "hello原创 2018-02-01 12:57:35 · 7103 阅读 · 0 评论 -
Scala中的Any、Nothing、Null、Nil
Scala中的Any、Nothing、Null、NilAny在scala中,Any类是所有类的超类。Any有两个子类:AnyVal和AnyRef。对于直接类型的scala封装类,如Int、Double等,AnyVal是它们的基类;对于引用类型,AnyRef是它们的基类。Any是一个抽象类,它有如下方法:!=()、==()、asInstanceOf()、equals()、hash原创 2018-01-27 10:30:25 · 6608 阅读 · 0 评论 -
Scala和Java中的Infinity和NaN
Scala和Java中的Infinity和NaNInfinityi == i + 1,一个数字永远不会等于它自己加1?Java强制要求使用IEEE 754浮点数算术运算,它可以让你用一个double或float来表示无穷大。正如我们在学校里面学到的,无穷大加1还是无穷大。你可以用任何被计算为无穷大的浮点算术表达式来初始化i,例如:double i = 1.0 / 0.0原创 2018-02-01 10:31:13 · 6030 阅读 · 0 评论 -
scala中的类型擦除的问题
Overcoming type erasure in Scala原文来自Overcoming type erasure in Scala。本文旨在展示一些技术来解决由Scala泛型编程中的类型擦除引起的一些常见问题。介绍Scala有一个非常强大的类型系统,Scala是强类型语言。存在类型,结构类型,嵌套类型,路径依赖类型,抽象和具体类型成员,类型边界((upper, lower,翻译 2018-02-01 00:26:43 · 3140 阅读 · 0 评论 -
scala中的泛型编程
Scala中的泛型编程简介在Java或者C++里面,像列表(List)这些数据结构,在编写的时候,都不需要指定其中元素的类型,而是构造的时候指定,这一特性就称为泛型。同样,Scala中也提供了泛型,而且功能比Java的泛型更加强大。List strList = new ArrayList();strList.add("one");strList.add("two");st原创 2018-01-31 05:17:40 · 1403 阅读 · 0 评论 -
Scala中的抽象类与特征
Scala中的抽象类与特征抽象类Scala的抽象类跟Java的一样,不能被实例化。其中一些特性也与Java的抽象类非常类似。定义抽象类需要使用abstract在抽象类中,变量不使用就无需初始化,可以等到子类继承时再进行初始化。在抽象类中,抽象方法无需使用(也不能)用abstract进行修饰。 一个方法只要是没有它的实现(没有等号或没有方法体),它就是抽象的,在子类中覆写或者原创 2018-01-27 01:28:50 · 1535 阅读 · 0 评论 -
Scala中的override
Scala中的overrideoverride是覆盖的意思,在很多语言中都有,在scala中,override是非常常见的。在类继承方面,它和java不一样,不是可写可不写的了,而是必须写的。如果不写而覆盖了对应的属性或者方法的话,编译器就会报错了。基础用法/*基本的override特性*/object Testclass { class A {原创 2018-01-25 06:53:10 · 3296 阅读 · 0 评论 -
scala中的require和assert
Scala中的require和assertrequire和assert都用于在运行时执行某些检查来验证某些条件。那么他们的差别是什么呢?assert意味着你的程序已经达到了不一致的状态,这可能是目前的方法/函数的一个问题(我喜欢把它想成HTTP 500 InternalServerError)require意味着方法的调用者有问题,应该修复它的调用(我喜欢把它看作HTTP 400原创 2018-01-27 12:57:57 · 7707 阅读 · 0 评论 -
scala中的一切皆对象
scala中的一切皆对象单纯从面向对象的角度来看待scala,可以说scala就是一门纯面向对象的编程语言,因为在scala中,一切都可以看做是对象。这点和java是不同的,java中区分基本数据类型和引用类型。可以说scala比Java的面向对象理念还彻底!数字对象scala> 5210000 + 1 *1024 / 1res0: Int = 5211024scal原创 2018-01-31 12:24:20 · 690 阅读 · 0 评论 -
Scala中的类和构造器
Scala中的类摘要网络上很多资料讲得不清不楚的,有些甚至是片面的错误的,看语言应该是直接用翻译器将英文翻译成中文。所以依照着网上的一些说法和自己的实验重新将一些概念和定义讲解一些。scala编译器会自动为类中的字段添加getter方法和setter方法可以自定义getter/setter方法来替换掉编译器自动产生的方法用@BeanProperty注解来生成JavaBeans原创 2018-01-26 02:44:49 · 5964 阅读 · 3 评论 -
scala中的高阶函数和柯里化
高阶函数在计算机科学中,高阶函数是至少满足下列一个条件的函数:接受至少一个函数作为输入输出一个函数在数学中它们也叫做算子(运算符)或泛函。微积分中的导数就是常见的例子,因为它映射一个函数到另一个函数。高阶函数的例子假设有一个函数对给定两个数区间中的所有整数求和:def sumInts(a: Int, b: Int): Int = if(a > b) 0原创 2018-01-23 22:09:51 · 842 阅读 · 0 评论 -
scala中的尾递归
递归一个函数直接或间接的调用它自己,就是递归了。例如,递归计算阶乘:def factorial(n: Int): Int = { if( n 1 ) 1 else n * factorial(n-1)}以上factorial方法,在n>1时,需要调用它自身,这是一个典型的递归调用。如果n=5,那么该递归调用的过程大致如下: factorial(5)原创 2018-01-20 07:22:14 · 2250 阅读 · 1 评论 -
scala中的方法
scala中的方法在OOP中,方法作用于对象,是对象的行为,在Scala中的方法也是如此。 方法定义定义方法的基本格式是:def 方法名称(参数列表):返回值 = 方法体scala中方法的返回值默认是方法体重的最后一行表达式 的值,当然也可以用return来执行返回值,但scala并不推荐这么做。 def function1(param1: String, para原创 2018-01-20 07:21:38 · 318 阅读 · 0 评论 -
scala中的call-by-name和call-by-value
scala中的call-by-name和call-by-valuevar/def/val/lazy valdef:类似于每一次重新赋值,如果是用def定义函数,则是每一次重新获得一个函数,做call-by-name操作。val:获得一次,并立即执行,且在生命周期内不能再被修改,使用的是call-by-value操作。var:在生命周期内可以被再次赋值lazy val:惰性执行,原创 2018-01-20 05:01:08 · 1490 阅读 · 0 评论 -
函数式编程介绍
历史来源讲述历史来源,不喜欢的可以跳过。但是我个人认为这对理解有帮助。在计算机的世界中,有两位巨擘对问题的可计算性做了模型化描述[4]。一位是阿兰.图灵(Alan Turing),他提出的图灵机。计算机系的各种学科中都充斥着这个概念,假设有一个纸带和一个打孔机,然后有一套指令,能够控制打孔机在纸带上移动、能够读取当前位置是否打了孔、能够在当前位置打一个孔,这就是一个图灵机,假设一个问题原创 2018-01-19 10:44:59 · 32821 阅读 · 23 评论 -
java 线程的基础
java中建立线程可以有两种方式,分别是继承Thread类和实现Runnable接口。继承Threadpublic class MyThread extends Thread{ public MyThread(String name){ super(name); } int i; public void run(){ for(i原创 2017-03-17 20:11:37 · 599 阅读 · 0 评论 -
Java获取当前操作系统的信息
主流有几种方法,一种是用下面的函数 public static String getProperty(String key) 键 相关值的描述 java.version java.version Java 运行时环境版本 java.vendor java.vendor Java 运行时环境供应商 java.vendor.url java.vendor.url J原创 2015-12-29 19:44:56 · 13758 阅读 · 1 评论 -
Java 数据库操作
JDBC基础JDBC是Java应用与数据库管理系统进行交互的标准API,包括两个包:核心API—java.sql和扩展的API—javax.sql。应用程序通过核心API的接口实现数据库连接和数据处理,其主要接口如下: 接口名称 功能 java.sql.Driver 驱动程序,连接应用程序和数据库,用于读取数据库驱动器的信息,提供连接方法,建立访问数据库所用的Connection对象。原创 2015-12-29 15:53:50 · 2597 阅读 · 1 评论 -
Java代码发布,打包成jar文件以及转换为exe可执行文件
之前写QT的时候也遇到过打包发布的问题,写java代码的时候也遇到了,但是一直没有好的解决办法,这一次终于弄明白如何做了。此篇博客教你如何方便快捷地把java代码,打包成jar文件以及转换为exe可执行文件。所需软件eclipse或Myeclipse exe4j(网上有软件和帐号下载)具体步骤Step1:将java项目打包成可执行jar文件首先看一下我的java project结构,Main.j原创 2015-12-28 18:12:12 · 2068 阅读 · 0 评论 -
Java通信过程的中文乱码的解决
在基于Java的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号。 这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题。如果文件一打开就乱码,可以通过修改软件的编码或者修改文件的编码就可以觉得这个问题。而若是在java的通信中,或者数据库操作之类的其他软件进程通信时,就容易产生乱码。1、在网页中输出中文。原创 2015-12-29 14:57:55 · 2779 阅读 · 0 评论 -
操作系统概念 管程Java代码实现
java中利用管程实现同步互斥量其实我关于代码中信号量和管程的具体差别不是特别的清楚。 但是因为用到了Semaphore类(信号量),就是用信号量实现的。程序员们需要自己对信号量的初始化、更新(wait/signal)以及信号量更新逻辑负责。 而管程应该是用到了synchronized的定义方法,如public synchronized void insert(int val),这个时候并不需要原创 2015-11-29 20:43:08 · 3782 阅读 · 0 评论 -
Java随机数总结
随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串、数字。或者随即生成一个不定长度的数字、或者进行一个模拟的随机选择等等。Java提供了最基本的工具,可以帮助开发者来实现这一切。Java随机数的产生方式在Java中,随机数的概念从广义上将,有三种。 1、通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。2、通过Math.random()返回原创 2015-12-27 11:17:02 · 1092 阅读 · 0 评论 -
Java Socket(六) 使用多线程实现多客户端的通信
问题一个服务端可以跟多个客户端通讯基本步骤1.服务器端创建ServerSocket方法,循环调用accept()方法等待客户端连接2.客户端创建socket和服务的请求连接3.服务端接受客户端的请求,建立专线连接4.建立连接的两个socket在一个单独的线程上对话5.服务器端继续等待新的连接创建一个服务器相关的线程类:package com.test;/** * Created by SuPhoe原创 2015-12-27 11:02:20 · 25982 阅读 · 12 评论 -
Java Socket(五) 服务器响应客户端
通过输入流来读取客户端信息,相应的时候通过输出流来实现。服务端类的代码:import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; impor原创 2015-12-27 10:07:45 · 3239 阅读 · 0 评论 -
Java Socket(四)编程实现基于 TCP 的 Socket 通信
服务端1、创建ServerSocket对象,绑定监听端口 2、通过accept()方法监听客户端请求 3、连接建立知乎,通过输入流读取客户端发送的请求信息。 4、通过输出流向客户端发送响应信息。 5、关闭相关资源。服务器段的测试代码import java.io.BufferedReader; import java.io.IOException; import java.io.Inp原创 2015-12-27 10:02:51 · 2830 阅读 · 1 评论 -
Java Socket(三) URL的应用
URL 1. URL(Uniform Resource Locator)统一资源定位符,表示Internet上某一资源的地址。在做Python的爬虫的时候第一次接触这个东西。 2. URL由两部分组成:协议名称和资源名称,中间用冒号隔开。例如http://www.example.com/index.html,表示协议http,主机名www.example.com,文件名index.html。原创 2015-12-12 12:06:35 · 2311 阅读 · 0 评论 -
Java Socket(二) ServerSocket应用
对于即时类应用或者即时类的游戏,HTTP协议很多时候无法满足于我们的需求。这会,Socket对于我们来说就非常实用了。下面是本次学习的笔记。主要分异常类型、交互原理、Socket、ServerSocket、多线程这几个方面阐述。异常类型在了解Socket的内容之前,先要了解一下涉及到的一些异常类型。以下四种类型都是继承于IOException,所以很多之后直接弹出IOException即可。 类原创 2015-12-11 11:39:07 · 1132 阅读 · 0 评论 -
Java Socket(一) InetAddress应用
InetAddress类用于标识网络上的硬件资源,实际主要用来表示IP地址的相关信息。关于该类的方法可以在API帮助文档查看。要获取InetAdress类的实例,由于它没有构造方法,但是它有静态方法可以返回该类的实例,所以,可以这样子来获取。下面简单举一个例子:import java.net.InetAddress;import java.net.UnknownHostException;imp原创 2015-12-11 11:17:34 · 1700 阅读 · 0 评论