让每个人都插上音乐的翅膀


 

       记得某位作家领奖时曾谦虚地说:其实每个人生活的背后,都有动人的故事,也不乏精彩。我真的没有什么,只不过是花了些时间,把我的故事和感悟写下来了,而你没有,所以我就成了作家。既然每个人都有故事,为什么多数人没有成为作家?原因是多数人对自我表达存有困难,对文字表达工具掌控不好,还不能运用自如。假如这不是技术瓶颈呢?那么应该会有更多的优秀作家存在,更多的优秀作品诞生。

        同样每个人的内心里,也都有过美妙的音乐,应该说每个人都有音乐梦想。但一直以来,音乐技术是个高门槛,记录与表达符号晦涩难懂,音乐语言高深莫测,乐器演奏难以驾驭,这些都令人望而生畏。一个人没经过专业知识学习和技能训练,若想把心里萌生的一段美妙旋律记录下来或展示给别人,是件不可能的事情。因为自己记都记不下来,更别说演奏和表达出来给别人听,因而绝大多数人都选择了放弃,遗憾地让旋律烂在了肚里。但假如前述都不是技术瓶颈呢?那么应该有更多的音乐被珍藏于世,被视为经典,说不定也有你的作品。

      事实上想法归想法,表达归表达,犹如绘画,若你每下一笔都不是你的初衷,那么你所描绘出来的,绝不是你想要表达的。所以问题全部出在你借用的表达工具上,要熟练掌控传统的记录与演奏能力,一般没有几年的刻苦学习,是难以驾驭的。

      音乐是时间的艺术,它与文学、影视一样,需要时间去排布元素(如文字、画面、音符),形成片段(词汇语句、叙事镜头、乐句),组接片段(段落情节、蒙太奇组接、乐句发展)完成描绘过程,从而形成完整作品。它们描述情节、叙说过程、表达思想或者传递情绪,都离不开时间,否则无法达成。因为它不像绘画和图片,即视便可传递信息感受,离开时间瞬间堆砌一些元素,或在时间内只传递单个及几个元素,或都没有实际意义。

      音乐传递的过程,主要是聆听者被感知的过程。在传递的信息中,首要是既定的速度,即在时间内释者必须让受者鲜明感受到同一个节律,即稳定的节奏。其次是在这个稳定节奏下,传递出音色、音的大小、高低、长短与力度,构成鲜明乐句。再次是通过乐句传递动机,让聆听者准确感受到情绪。最后是传递情绪的发展和回归(即动机的启承转合),直到再次回到节奏下动机原点,让聆听者产生完整感和满足感。整个过程都期待聆听者逐步认同或者共鸣,否则信息即为传递失败,聆听者不明就里。

      人类在生产实践中,为使自己的能力达到扩展,学会借助事物某些特别属性转化为便利手段,从而发明工具。工具的出现与运用,是智慧地达成以往所不能达成,是其存在的普遍意义。人类已越来越依赖工具,凡是解决问题,着手的第一步,便是选择和利用好可以找到的工具,一旦离开了工具,许多事情将事倍功半甚至不可能完成。而相约共知的平台和相通的语言,是达成无障碍交流的基础,即为表达交流工具,比如都熟练运用和理解相同的文字、数字、符号等,是工具的一种类型。遇到不同的平台或语言,则需要进行技术转换,是为翻译或转译,才可能让对方听懂和理解。

     从音乐的发展史来看,最早音乐应起源于宗教和宫廷,总是从单一旋律成长起来的,为了能完整记录、重复演奏和相互交流,记录音符的统一性便成为了相约基础,从而形成了一整套记谱工具。

      过去从事音乐创作,从不是件轻松的工作,作曲者首先要熟悉记谱工具,甚至要有深厚的后来逐步形成发展的和声曲式调性等理论知识,还要有丰富的想象判断力。在具体创作过程中,要完全先依靠想象准确记录旋律的每一个音符,要有基本的弹奏能力,借助乐器边弹边修正错误,完稿后要出资邀请乐队歌手进行试奏试唱聆听效果,进行再次修改校正,耗费人力财力较大,过程冗长,最重要的是初期不能立刻“随想即闻”,中后期也难能让乐队歌手“不厌其烦”,所以能从事的只是少数,也是需要众多他人协助才能完成的。

      当前科技,工具类的发明已越来越多,人人交流、人机交互,甚至不同机器交互都已不再是问题,专业交融与科技人性化,使得各类成果应用的门槛不断降低,人们已不再禁锢于对不同领域技术的陌生,不再困扰于先期繁缚的专业学习和专门培训,直至出现了零门槛操作(傻瓜式),浩浩荡荡中,借助电脑从事音乐创作也已成为低门槛。首先是软件工程师编制了诸多宿主软件,把音乐创作移植到了直观的电脑平台上(MIDI),触发的音符与预先采样的乐器演奏片段(音源库)完成了相应链接,使谱写音符与演奏旋律变得即写即得,还可以不停地更改和演奏下去。其次是软件已开始注意模仿真人的各种演奏技巧,各种乐器采样音源的真实性也不断突破,也使得电脑演奏效果越来越逼近真人乐队的现场演奏,一个人独立完成并随意“指挥”一支庞大的乐队演奏交响乐已并非难事,也不怕电脑“不厌其烦”,不产生额外费用。现在许多歌曲伴奏、广告配乐、游戏配乐、影视配乐等都是电脑的杰作,好的作品一般人还真听不出来是电脑演奏的,也基本上是创作者一个人独立在电脑上完成的。

      但是这与人人都乐见参与音乐创作还有相当距离,因为从事电脑音乐创作的人,还是必须至少会弹MIDI键盘,不然靠鼠标一笔笔写音符,灵感扑捉、乐思延展和创作效率均会受到严重制约,只有学过钢琴演奏的专业人士,会较占优势,而不会弹键盘的,还是会望洋兴叹。

      那么什么样的乐器,人人易于掌握和随我所用呢?其实莫过于人体自己的器官—嗓子,就是歌唱。一般而言,只要能正常发声讲话的,就能控制音的高低长短,就能进行所谓歌唱,且不论唱的是否动听,操控它发出音符的自如性、随意性是显而易见的。

      如果说,一个人随意哼唱的旋律,能被电脑软件捕捉、记录并准确转成标准音符串,且能即时用不同乐器演奏出来,是不是件很刺激的事情,是不是大众的福祈?如果真这样做,估计更多风格的音乐作品会不断涌现,层出不穷,所谓原创音乐不过是大众饭后消遣的一种普众娱乐方式,专业音乐人要失业了。

      也许有朋友会说,我不识谱,我唱歌会跑调,我音域窄,唱不了太低或者太高音,这些都是问题其实也不是问题,为什么这样说?因为这些个问题,都会被编程工程师替代解决。首先是软件的识别度和宽容度,只要让电脑了解你的声音,不管你怎么唱,它都可能会快速识别出你的本意并且对应到某个标准化音符,这就需要转化工具或者插件。

     九十年代曾接触过一款很小的语音识别软件,叫“蒙恬听写王”,当时好奇下测试使用了这款软件,发现它的确令人称奇。软件首先要求使用者先期按照提示,用正常的声音朗读几段文字,然后便可正式听写,即听你说话,电脑开始打字,犹如小秘书。开始准确率可能只有八成,随着你手工校正和软件的学习,电脑掌握的特征数据会越来越多,比对分析就越来越准确,后期的准确率基本接近满分,这对大篇幅文字工作者,是个极大地解放。不过它也有缺陷,就是当你换个人,或当你声音明显变化了,它就认不全了,出错率会变高,可能乱打字,它需要重新学习。在原理上,我想电脑通过记录你的朗读,先期建立一个专门针对你的声音数据库,然后在你正式要求电脑听写时,将你发出的声音与数据库特征数据进行比对分析,判断你说的可能是哪些字符,然后调用字库词库,打出文字,从而完成听写。

      道理上讲,鉴别人声的高低与哪个音符相近,远比分析人的语言简单许多。一个人发出一个声音,它本应具有明显的频率特征,如果这个频率与某个音符的特有频率相近,或者换句话说,这个声音频率特征被定义对应某个音符,那么它完全可能被电脑识别认定,并被书写成某个音符,在电脑提示的稳定节奏下,结合发声的长短,连续书写下的音符串,自然会形成旋律,这是完全可行的。但实际上,实现这个功能,软件编程工程师们面临的问题难以想象、困难重重。

先来说说乐器与音高。

        我们猜测,最早的乐器只不过是能发出悦耳音色和简单几个不同音高的玩意,不同乐器发出的音高,开始可能还不在同一个频率上,自定音准五花八门,就是说你发出的1和我发出的1不是同一个频率音,那时乐器也只能独奏或同门齐奏,不同调的乐器混在一起演奏可能会很糟糕。而且我们也猜测,最早的音乐旋律,可能是以委婉温柔忧郁的小调为先期主流,因为这从后来发明的固定音名可以联想,人的命名顺序的天生心理习惯,就是ABCDEFG或1234567或者甲乙丙丁,小调唱名6712345对应在钢琴键盘上就是ABCDEFG,小调曲子独奏清唱是美丽动听的,而大调曲子在没有伴奏烘托下听感上是刮燥和疯狂的,但是随着音乐的发展,后来的大调盛行,大调1234567对应在键盘上就是CDEFGAB,这应该是有历史原因的。为玩齐奏齐唱需要,人们为适应不同音高乐器起调统一并能和谐演奏同一首乐曲,发明了十二平均律,整合规定了不同乐器的音准,还发现音乐有许多规律可寻,发现了调性与和声等。做为最重要的基础,是每个音高都被正式固定在某个频率上并冠以音符,所有乐器调音都以此参照,这就是固定音名。以钢琴为例,88个键,不同而固定音高的每个键,都有着自己的名字。而且都是7白5黑相间为一组的重复,无论你起哪个音为1或者其它音,它都可以推算找到这个调中的另外音高,所以十二平均律的发明是伟大的,它囊括了所有的调,使不同音调音域的乐器或者人声同时演唱演奏成为可能,统一和谐而美丽。

      十二平均律,无非是把每个相邻音阶距离都搞得很相等,即半个音,两个半音为一个全音。遇到大调12345671,你就按照全全半全全全半规律寻找其它音,假如小调67123456,你就可以按照全半全全半全全规则推测寻找到其它音。

      如果说一个人声频率采样,经过比对十分接近某个固定的音高频率采样,是不是很容易被电脑认知为或者被赋予成某个固定音符呢?我想这个不应该很难,这也能基本达到哼唱被翻译成标准MIDI音符的要求,即已完全可以进行音乐创作了。但是难的是一连串人声采样,让电脑按照十二平均律调性规则,分析猜测它是大调还是小调,是首唱音名法则下大调1234567或者小调67123456的哪个音符,并提示出来。这有利于后期的再创作,因为随性吟哼的旋律,多数人是不会唱出1234567音符的。而人总是逐条地哼唱单旋律,进而堆砌完成多乐器或多声部的再创作的,不提示调性和基准参考音而完全凭感觉,则需要很好的音感听觉和音乐素养,不然多条哼唱,会很容易完全不在同一个调上。特别是添加多旋律声部如和声声部,很容易产生错音符,这就需要电脑具备容错并纠正的功能。反之,电脑若捕获并分析出哼唱乐句的大部分音符,在十二平均律规则下,已判断出调性,个别非法音符(调外音)是很容易被发现和纠错的。

      我们再来说说和声。和声理论晦涩难懂,想要理解好它不容易,多数人只是简单地记住它的堆砌规则去应用之,不问为什么,这样反倒简单了,这里我们也不问为什么。我们只要知道和声是几个音按照一定规则堆砌的复合音,有着特定的音响效果,和声有不同类型、不同类型有不同规则,同一和声在不同调性下,功能完全不同,有的非法,这些规则电脑可以记下并设计成可被人声调用即可。我们可以这么理解,一幢大楼在透视下被放置无限远,最后你看到的可能只是一个点。那么和声也可以这么被认识,可以理解为远处的一个单音拉近到你能听得出它很多不同的组成部分,这些犹如保持楼层距离几个不同的组成音,推远了就是一个单音。不信你用你的嘴巴去表现某种雄壮气势,不论你多努力,别人听到的,也不过是你发出的单音旋律,完全是靠意会你的表情动作,去判断和理解你描绘的是何等气势。那么,如果先期设定好电脑规则,是不是只要捕捉到人声某个单音音高,就直接把它赋予成某个和弦,打出和弦的几个组成音,这样写和声是不是很便捷呢?这样的好处,是在二期创作中,为旋律附加上和声伴奏雏形可以十分方便,这是一个思路。

再来说说人声的复杂特性。

       电脑首先要克服人声特性所带来的障碍。第一是人发声的频率具有复合性。人发出的单音十分复杂,多数是多种复杂频率的叠加,不像人的大脑先天具有选择性,在噪杂环境下仍能选择辨别某些声音,电脑不行,要它选择哪个频率、同时又忽略哪些频率进行辨识,恐怕是一个重大难题。第二是人发声具有不稳定性。除非进行过专门训练,绝大多数人发不出频率稳定不变的单音,同样的一个音符,这一秒唱的和在下一秒回头唱的,频率可能相差甚远。第三是人发声会出现音头音尾,而音头音尾的频率基本是飘忽变化的。第四是人发声的音域相对狭窄,虽然最低音到最高音各人不同,但在2个最多3个八度内辨识频率差异,这与在多个八度内辨别音高相比,困难会更多。第五是首调音准问题。即每个人唱出的1,或者同一个人不同时间唱出的1,都很可能会不一样,那电脑会认为哪个是1呢?五音俱全的人还可能唱出音阶的逻辑关系差异,供电脑判断推测,那么五音不全(跑音)的人呢?一句旋律,很多个音符都不在一个调上,结果会是怎样可想而知。第六是每个人哼唱发声习惯不同。专业点的会唱1234567,不会唱的可能五花八门,最常见的就有“啊”“啦”“嗯”“噹”“咣”“哒”“嘟”“吧”“噜”“咚”“棒”……不胜枚举。这就需要电脑按节奏计算音符时长的同时,又要对人声掐头去尾同步分析出音符的音高,不然人哼唱一个音,转换出来的会是乱转弯的一堆音符。

最后说说当前技术现状。

      随性哼唱作曲,是很多人的梦想,它的原理设想无非是电脑先提供一个节拍,人开始哼唱,哼唱的旋律被电脑记录并识别,同时被翻译成标准MIDI格式文件,继而调用触发音源,发出乐音。再次播放触发音源的旋律,同步记录哼唱第二条旋律,同样又被翻译和触发另外音源,再次形成一条不同乐器旋律。如此往复聆听、哼唱、转换和记录,便完全可以一个人创作出庞大乐队演奏的交响乐。

       为了实现这个梦,肯定已有很多人进行过努力探索,目前市场上自称已成功实现此功能的软件插件有很多,其代表一个是imitone,另一个是Melodyne,他们都可以当做现今诸多编曲宿主软件(Cubase等)的插件(vst)配合使用,但是在实际应用中,还是不尽人意。前者虽实现了同步转换并触发音源功能,但是由于前面提到的人声特性所障碍,识别的音符错误频发,往往杂乱而非人的主观本意。后者虽比前者精确些,但是它需要先记录,再行分析,最后转化,整个过程需要时间,同步可能不能实现,便利性和可玩性大打折扣。

      当前科技,工具已今非昔比,缺少的是一种创意,一个想法。这种进步趋势,在未来甚可能会放飞人的思想。因为从一个想法萌发,到设想完美表达,到实物具体实现,产品方案正逐步地走向自由订制,完全得益于人性化科技已奠定的保障基础。同样,人人都创造出完全属于自己的音乐,并分享给他人,并非是个遥远的梦,我们翘首以待。

                                          

 2018.03.02

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值