【黑马程序员】Java基础总结

2024-05-30 版权声明 我要投稿

【黑马程序员】Java基础总结(共8篇)

【黑马程序员】Java基础总结 篇1

摘要: Java基础—java语句这些是黑马程序员java基础入门的一个很重要的内容。今天主要给大家简单讲解一下Java基础—java语句,以后会慢慢讲解黑马程序员的课程内容!

关键语句介绍

一、while 语句 一般形式:

whi l e(条件表达式){ 语句体 ……… } 执行过程:

条件表达式为真,执行语句体。否则,退出!

二、do while 语句 一般形式: do { 语句体 …….} while(条件表达式);执行过程:

先执行一次语句体,判断 条件表达式是否为真,为真再执行do语句中的语句体。为假,退出。

需要注意:与whi l e语句区别

黑马程序员合肥中心 编著

1.while(条件表达式)后面有分号;2.不管条件表达式是否为真,语句体均会执行一次。

三、for 语句 一般形式:

for(子句 1;子句 2;子句 3){ 语句体 …… } 执行过程:

四、break、cont inue 语句 break 退出所在循环 : int stopHere = 5;for(int i=1;i<8;i++){ if(i == stopHere){ break;} System.out.println(“i = ” + i);

黑马程序员合肥中心 编著

} //打印结果:5,6,7,8均没有打印出来。

需要注意的一个问题: int stopHere = 5;for(int i = 1;i < 8;i + +){ if(i = = stopHere){ / /语句体 } break;System.out.println(“i = ” + i);} 这个时候编译器会报错:无效的 System.out 输出语句。冷静分析一下:

break 语句会结束循环,所以不会再去执行 System.out 输出语句。编译会认为你在多此一举,sorry 报个错!

continue 退出本次循环,不会退出整个循环: int skipHere = 5;for(int i = 1;i < 8;i + +){ if(i = = skipHere){ continue;}

黑马程序员合肥中心 编著

System.out.println(“i = ” + i);} / /打印结果:除了5没有打印出来。

i = 1 i = 2

五、switch 语句 一般形式: switch(常量){ case 表达式1:语句体1;break;case 表达式2:语句体2;break;.....default : 语句体n;break;}

执行过程: 执行过程:

case 根据自己的表达式看是否匹配常量,如果匹配就执行语句体,否则执行 default 语句。

case 执行类似于并行操作,不是顺序操作。所以各个表达式的值不可以相同。

黑马程序员合肥中心 编著

哪个 case 匹配常量就会执行自己的语句体,不会再去寻找其他 case 语句。注意:

<1> case 穿透:省去break关键字

[AppleScript] 纯文本查看 复制代码 ?

01 /**

02 * @author 传智播客 03 */

04 int i = 10;05 switch(i){ 06 case 10:

07 System.out.println(“ A”);08 //break;09 case 5: System.out.println(“ B”);11 //break;12 case 7: System.out.println(“ C”);14 //break;15 default : System.out.println(“ error”);17 break;18 }//打印结果:A B C error

<2> 在 Java 编程中 switch 括号中的常量的数据类型只可以为 int 类型或者是 byte、char、short(因为 byte、char、short 可以自动提升为 int),常量类型不可以是 long、float 和 double 等数据类型。<3> 多个 case 可以合并 , 相当于 “ 或 ”,例如下面 i 等于 10、5、7 都可以执行打印语句。

[AppleScript] 纯文本查看 复制代码 ?

01 /**

02 * @author 传智播客 03 */

04 int i = 5;05 switch(i){ 06 case 10: 07 case 5: 08 case 7:

09 System.out.println(“ C”);10 break;11 default : System.out.println(“ error”);13 break;

黑马程序员合肥中心 编著 }//打印结果:C <4> default 语句可以省,但是不推荐,他后面的 break 可省 <5> case 或者 default 子句中可以写多条语句 case 7: System.out.println(“ C”);if(i == 5){ System.out.println(“ i = ” +i);} break;<6> case 或者 default 子句中还可以嵌套 switch 或者其他语句

六、return 语句

终止方法的运行并指定要返回的数据。两种形式:

<1> return 表达式;

<2> return ;没有任何数据直接返回,结束函数(方法)的执行。

七、if 语句

一般形式:

1.if(条件表达式){ 语句体} 2.if(条件表达式){ 语句体} else{语句体 } 3. if(条件表达式1){ 语句体} else if(条件表达式2){语句体 } else {语句体 }

特别注意:形式3,else与其最近的上个if 配对。例子:

[AppleScript] 纯文本查看 复制代码 ?

黑马程序员合肥中心 编著

01 /**

02 * @author 传智播客 03 */

04 public class TestIF {

05 public static void main(String[] args){ 06 int i = 30;07 if(i < 20){

08 System.out.println(“<20”);09 } else if(i < 50){ System.out.println(“<50”);11 } else if(i < 80){ System.out.println(“<80”);13 } else System.out.println(“>=80”);15 System.out.println(“黑马程序员!”);16 }

如果大家想学习java基础的知识,欢迎大家可以去传智播客官网http:///去了解java基础知识!

【黑马程序员】Java基础总结 篇2

1 为什么选择Java语言为平台

《程序设计基础》是计算机专业的基础课程, 同时也是一门专业核心课程。作为基础入门课程, 突出的是“基础”两个字。它不要求学生掌握很高深的编程巧与编程技能, 只要求学生掌握程序设计里面最基础的入门语法知识, 如:八大数据类型, 变量定义, 条件选择分支结构, 三大循环结构等。在掌握基本语法同时激发学生对编程的兴趣, 培养学生良好的动手能力。

Java语言主要用于网络编程, 以其开源及跨平台的独特魅力已经成编程领域一门举足轻重的语言。在高职院校的计算机系中越来越多的专业选择与Java语言进行对接对本专业的课程体系进行一点打通。如我院的计算机信息管理、商业网站开发、软件测试等专业。

不同专业, 因核心专业课程不同, 对Java语言的学习, 不可能分配与软件开发专业相当的课时, 但这门语言在各专业课程体系中的位置却不见得比软件开发专业轻。课时相对不足, 课程的核心位置却是不能有根本性的削减, 怎么协调好这个矛盾呢?

按照传统高校的授课模式, 《程序设计基础》这门课程, 是以C语言为平台以老师为主体的方式进行讲授。很多语言都由C语言衍生而来, C语言是很多新语言的老祖宗, 学习了C语言再学习其它语言不会有根本性的障碍, C语言的思想跟其它很多语言的思想基本上是一致的, 学习了C语言的思想也在一定程度上是学习了编程的思想及理念。其次, 多数应用系统的底层结构是由C语言来实现的, C语言的执行效率优于其它的高级语言, 对于侧重于理论研究型的普通高等院校来说, 学习C语言既是通识教育的需要, 也在一定程度上扩大了学生的视野, 拓宽了学生的思维。

但对于高职高专的学生来说, 学习目标非常清晰, 高职院校培养的是掌握技能型的人才, 而不是理论研究型的人才。工学结合, 以市场为导向。社会需要什么样的人才, 高职院校就应该培养什么类型的人才。每个专业学生的能力目标应该都非常明确。

基于以上几点, 选择与Java语言对接, 实行一点打通的专业, 以Java语言为平台讲授《程序设计基础》这门课程, 可以消除平台跨度。Java语言虽然是由C语言衍生而来, 但每一门语言都有自己独特的语法, 况且, C语言是面向过程的语言, Java是一门面向对象的语言, 两门语言存在较大的鸿沟。选择以Java语言为平台讲授《程序设计基础》, 学习完这门课程后直接学习Java语言的程序设计的相关课程, 可以实现无缝对接, 降低学习难度, 自然会提高学习效果。同时, Java语言为平台的《程序设计基础》比C语言为平台的《程序设计基础》更容易掌握上手, 对学生来说也是一件好事。

在本学期自己所带的几个专业班中, 有两个专业班在上一学期学习《程序设计基础》这门课程是以Java为平台, 而另外一个专业班则是以C语言为平台学习这门课程。本学期中学习《Java程序设计》这门课程时可以明显感觉到这一个专业班的学生吃力得多, 这一点可以得到证实。

2 以Java为平台的《程序设计基础》不是《Java程序设计》

《程序设计基础》与《Java程序设计》是两门不同的课程, 这两门课程的教学大纲与教学目标是互相独立的, 不能混为一谈。

《程序设计基础》课程面向的对象的主体是大一的新生。大一的新生, 刚进入大学, 对很多东西都充满了好奇, 这个时候他们的学习热情是相对高涨, 积极主动性也比较强, 只要我们能引导得当, 就能在教学方面取得良好的教学效果。通过《程序设计基础》这门课程, 我们主要是培养学生的编程理念, 激发学生的学习兴趣, 最重要一点是要培养学生的动手能力。

《程序设计基础》是大一新生接触到的第一门专业课程, 因而至关重要, 这门课程的学习效果将对学生日后的学习态度产生决定性的影响。头开好了, 学生有浓厚的兴趣往前走, 能够很好的激励学生学习其它专业课程。计算机系各专业的课程体系当中, 每一门课程都互相紧扣, 那一环掉了都无法链成一体, 无法一点打通。高层专业课程是建筑在基础专业课程的之上, 入门都没找到门道, 自然也就无法深入到高层课程体系之中。学生连基础课程都没掌握好, 就会很快丧失学习的兴趣与主动性。

以Java语言为平台的《程序设计基础》讲授的《程序设计基础》课程的内容, 只是以Java平台作为环境载体。在该课程里面主要讲授的是:八大数据类型、变量、条件选择分支结构、三大循环结构等程序设计里面通用的语法及编程思想, 而不应该过多的涉及到面向对象等其它抽象的内容。

《Java程序设计》则是另一门与《程序设计基础》相关联, 而又相互独立的课程。两门课程都是以Java为平台作为编程授课环境搭建起来, 以Java为平台的《程序设计基础》是新人进入编程世界的入门课程, 《Java程序设计》则是建筑在《程序设计基础》课程之上。没有学习好前者, 学习后者将寸步难行。在《Java程序设计》这门课程中, 主要在《程序设计基础》基础上进一步讲授面向对象的理念、特征、要素, 让学生理解类与对象的概念并能熟练运用, 掌握抽象、继承、多态的使用。

由此可见, 无论是课程大纲、教学目标还是课程体系里面的层接关系, 两门课程都是不相同的, 不能混为一谈。

3 重在培养学生的动手能力

高职高专的教学模式不能照搬普通高校的教学模式, 针对高职院校的校情, 学者专家早就提出了, 工学结合, 能力为主, 学生为主体的教学模式。每一门课程都应该对应有一个能力目标, 即学完该门课程后, 学生应达到的某一个能力水平。

那我们《程序设计基础》这门课程, 应培养那方面的能力目标呢?笔者个人认为, 最重要的一个方面就是培养学生的动手能力。良好的习惯需要在早期加以引导慢慢的养成, 学生的动手能力也需要我们在课堂加以适当的引导来养成。

《程序设计基础》本来就是针对新生的入门课程, 要求新生通过这门课程学习到很强的编程技能不现实, 但通过这门课程来培养学生的动手能力却是现实可行的。学生养成良好的动手能力后, 上课注意力集中, 对老师在课堂上所讲的问题能及时的跟上来, 并在能动手模仿老师的教学案例。这一点是非常好的, 也是非常重要的。对新人来说, 模仿案例, 敲代码是一种非常有效的学习方式。在课堂上听老师讲十遍还不如学生自己动手做一遍, 很多时候, 学生当时是听明白了, 但二三个钟头后可能就忘得一干二净了, 课后作业还是无法完成。

我院是一所笔记本IT院校, 在大一入学的第一学期每个学生即配有笔记本电脑, 因而以学生为主体, 讲做结合的实践教学便成为可能。在课堂上, 先为学生讲解理论知识点, 并配以相应的教学案例, 接下来为学生预留足够的时间让学生完成课堂时训, 同时教师到学生中巡查完成情况, 发现问题, 即时给予纠正和讲解。事实证明, 学生在听课时没有完全吸收消化的问题, 在完成课堂作业过程中都会暴露出来, 这样就能够及时的发现存在问题, 有的放矢, 提高了教学效果, 又培养了学生的动手能力!

4 结语

《程序设计基础》是计算机系所有专业的基础入门课程, 在高职院校中, 依据每个专业的课程体系, 结合实际选择以Java语言为平台进行该课程教学授课, 能在一定程度上降低课程跨度, 提高教学效果, 符合高职高专课程改革思想以及高职院校校情。

参考文献

[1]何成林.Java语言学习方法探讨[J].经济技术协作信息, 2008 (31) :85.

[2]关晓惠, 周志敏.高职高专Java语言程序设计教学与实践[J].浙江水利水电专科学校学报, 2008, 20 (4) :87~89.

【黑马程序员】Java基础总结 篇3

考试宣言: 同学们, 考试考多少分不是我们的目的!排在班级多少的名次也不是我们的初衷!我们考试的目的是要通过考试中的题目,检查大家在这段时间的学习中,是否已经把需要掌握的知识掌握住了,如果哪道题目你不会做,又或者做错了, 那么不用怕, 考完试后, 导师讲解的时候你要注意听!那时候学会了, 记住了, 也一样不影响你高薪就业!

本套题共40道不定项选择题,其中单选30道,多选10道。单选2分/题,多选4分/题。多选题不全对半分,全对满分。

1.所有异常的父类是()A a)Throwable类 b)Error类

c)Exception类

d)RuntimeException类

2.下列关键字能和try一起使用的有()CD a)final b)finalize c)finally d)catch

3.实现下列哪个接口,可以启用序列化功能()b a)Runnable接口

b)Serializable接口 c)Comparable接口 d)Comparator接口

4.当方法遇到异常(编译时异常)又不知如何处理时,下列哪种说法是正确的()C a)捕获异常(try{…}catch{…})b)抛出异常(throw 异常对象)c)声明异常(throws 异常类型)d)嵌套异常

5.如何自定义一个异常类()AB a)让这个类继承Exception b)让这个类继承RuntimeException c)让这个类继承Comparator d)让这个类继承Comparable

6.可以用来操作路径的类是()a a)File b)FileStream c)OutputStream d)FileReader

7.File类中,创建多级目录,可以通过以下那个方法()d a)create()b)createNewFile()c)mkdir()d)mkdirs()

8.下列哪一个import命令可以使我们在程序中创建输入/输出流对象()B a)import java.sql.*;b)import java.io.*;c)import java.net.*;d)import java.util.*;

9.下列关于Java中文件输入输出的说法正确的是()A a)在Java中,文件的输入输出功能是通过流来实现的

b)如果要把数据写入一个文件中,需要创建一个输入流对象 c)字符流在某些方面比如图片的处理,比字节流更方便x d)可以通过Reader r = new Reader(“c:java.txt”);创建一个输入流对象

10.获取指定目录下所有的文件,可以通过哪个方法实现:()D a)b)c)d)

list()getDir();listFile()listFiles()11.下面用字符流能成功拷贝的文件有()BC a)java基础自测题.doc b)学生考试答案.xml c)Student.java d)学生信息表.xlsx

12.看下面程序,加入xxx.txt里面有一个文字”a”,请问该程序输出结果是()D public static void demo1()throws FileNotFoundException, IOException {

InputStream is = new InputStream(“xxx.txt”);

int x = is.read();

System.out.println(x);} a)A b)a c)97 d)编译报错

13.如果我想保留a.txt中原有的内容,在后面追加写入数据,下面创建输出流对象写法正确的是()B a)FileOutputStream fos = new FileOutputStream(“a.txt”);

b)FileOutputStream fos = new FileOutputStream(“a.txt”,true);c)BufferedOutputStream bos = new BufferedOutputStream(“a.txt”,true);d)OutputStreamWriter osw = new OutputStreamWriter(new InputStream(“a.txt”,true),”gbk”);

14.下面关于字节流说法不正确的是()BC a)字节流拷贝文件时一次读取一个字节 b)字节流拷贝文件时一次读取两个字节

c)字节流使用完后需要关,内存输出流使用完后也必须要关闭 d)FileOutputStream没有缓冲区,而FileWriter有缓冲区

15.判断一个文件的大小我们可以使用哪个方法(AD)

a)File类的length()方法

b)File类的available()方法

c)FileInputStream类的length()方法 d)FileInputStream类的available()方法

16.已知 海贼王全集.avi 这个文件有20Gb 的大小,复制该文件最快的方式是()D a)

FileInputStream fis = new FileInputStream(“双元.jpg”);

FileOutputStream fos = new FileOutputStream(“copy.jpg”);

int b;

while((b = fis.read())!=-1){

fos.write(b);

}

fis.close();

fos.close();b)

c)

d)

FileInputStream fis = new FileInputStream(“致青春.mp3”);FileOutputStream fos = new FileOutputStream(“copy.mp3”);byte[] arr = new byte[fis.available()];

fis.read(arr);

fos.write(arr);

fis.close();fos.close();

FileInputStream fis = new FileInputStream(“xxx.txt”);FileOutputStream fos = new FileOutputStream(“yyy.txt”);

byte[] arr = new byte[1024];int len;while((len = fis.read(arr))!=-1){ fos.write(arr,0,len);}

fis.close();fos.close();

FileInputStream fis = new FileInputStream(“xxx.txt”);FileOutputStream fos = new FileOutputStream(“yyy.txt”);

byte[] arr = new byte[1024*8];int len;while((len = fis.read(arr))!=-1){

fos.write(arr,0,len);}

fis.close();fos.close();17.BufferedInputStream这个类是哪个设计模式的体现()B a)单例设计模式 b)装饰设计模式 c)工厂设计模式 d)适配器模式

18.下面说法正确的是()D a)OutputStream是个接口 b)Writer是个接口

c)BufferedOutputStream是FileOutputStream的父类x d)Reader是InputStreamReader的父类

19.下列关于Java I/O中字符输入流Reader类中的read方法描述错误的是?(A)

a)read()方法的返回值类型为char类型 b)read()方法的返回值类型为int类型

c)read()方法的返回值如果为-1,表示到流的末尾

d)read(char[] cbuf)方法表示将读到的多个字符存入字符数组cbuf中

20.下列哪些选项是Java I/O中字符输出流FileWriter类中的write方法?()ABCD a)write(char[] cbuf)写入字符数组

b)write(char[] cbuf, int off, int len)写入字符数组的某一部分 c)write(int c)写入单个字符 d)write(String str)写入字符串

21.假设存在xxx.txt文件,内容为”大家好”,以下代码运行的结果为?(A)public class Test { public static void main(String[] args)throws IOException {

FileReader fr = new FileReader(“xxx.txt”);

FileWriter fw = new FileWriter(“zzz.txt”);

int c;

while((c = fr.read())!=-1){

fw.write();

}

fr.close();

fw.close();} } a)b)c)d)

编译报错

程序正常运行,zzz.txt文件中的内容为”大家好” 程序正常运行,但是没有生成zzz.txt文件 程序正常运行,但是zzz.txt文件中是乱码

22.FileWriter类直接继承哪个类?(A)

a)OutputStreamWriter b)Writer c)BufferedWriter d)InputStreamReader

23.关于自定义字符数组拷贝文件的说法错误的是?()AC a)自定义的数组越大越好

b)自定义的数组既不能太大,也不能太小

c)可以使用FileReader类的available()方法的返回值作为数组的大小

d)建议定义为1024的整数倍,但不能太大,防止内存溢出

24.假设xxx.txt文件中存了2000个汉字,下列程序运行后输出的结果是?(B)

public class Test { public static void main(String[] args)throws IOException {

FileReader fr = new FileReader(“xxx.txt”);

FileWriter fw = new FileWriter(“yyy.txt”);

int count = 0;

char[] arr = new char[1024];

int len;

while((len = fr.read(arr))!=-1){

count++;

fw.write(arr,0,len);

}

fr.close();

fw.close();

System.out.println(count);} }

a)1 b)2 c)3 d)4

25.下面的哪个类代表字节输入流到字符输入流转换的桥梁?()A a)InputStreamReader b)OutputStreamWriter c)FileReader d)BufferedReader

26.BufferedReader读取一行时,判断该行是否结束的标志是什么?()AD a)

r b)

null c)

-1 d)

rn

27.缓冲流是否需要关闭()B a)否 b)是

c)以上答案都不对 d)关不关都可以

28.以下代码运行后输出的结果是?(A)

public class Test { public static void main(String[] args)throws IOException {

System.out.println(fun(5));} public static int fun(int num){

if(num == 1){

return 1;

}else {

return num * fun(num2)+ fun(num-1);

} } } a)34 b)13 c)21 d)5

30.为了提高读写性能,用下面的哪些流?()ABCD a)BufferedInputStream b)BufferedOutputStream c)BufferedReader d)BufferedWriter

31.下列关于Java I/O中哪个流可以将多个文件中的内容合并到一个文件中(序列流)?(cC a)SequenceOutputStream b)InputStreamReader c)SequenceInputStream d)OutputStreamWriter

32.下面的哪个流表示内存输出流?()A a)ByteArrayOutputStream b)ByteArrayInputStream c)ObjectInputStream d)ObjectOutputStream

33.下面说法正确的是?()b a)可以通过ByteArrayOutputStream和ByteArrayInputStream实现文件的复制)b)不可以通过ByteArrayOutputStream和ByteArrayInputStream实现文件的复制 c)用ByteArrayOutputStream和ByteArrayInputStream实现文件的复制,会出现乱码 d)用ByteArrayOutputStream和ByteArrayInputStream实现文件的复制,不会出现乱码

34.下面说法错误的是?()D a)ByteArrayOutputStream内部封装了字节数组

b)new ByteArrayOutputStream()利用空参构造创建对象时,内部的数组的大小为32 c)toByteArray()以字节数组的形式返回数据 d)以上说法都不对

35.关于对象操作流的描述正确的是?()A a)ObjectOutputStream流是将对象以Object类型写入到文件中 b)ObjectOutputStream流是将内容写入到Object对象中 c)ObjectInputStream流是读取Object对象里的内容

d)ObjectInputStream是从文件中读取一个对象出来,读出来是Object类型的,需要进行强制类型转换

36.ObjectOputStream类中的哪个方法可以将对象写入到文件中?()C a)write(Object obj)b)append(Object obj)c)writeObject(Object obj)d)objectWrite(Object obj)

37.下列选项中哪个不属于I/O流?()C a)FileWriter b)FileReader c)Properties d)PrintStream

38.下列说法不正确的是()D a)Properties 类表示了一个持久的属性集L b)Properties 可保存在流中或从流中加载L c)属性列表中每个键及其对应值都是一个字符串L d)以上说法都不对

39.以下代码运行后输出的结果是?()C public class Test { public static void main(String[] args)throws IOException {

Properties prop = new Properties();

prop.setProperty(“name”, “张三”);

prop.setProperty(“tel”, “***”);

Enumeration en =(Enumeration)prop.propertyNames();

while(en.hasMoreElements()){

String key = en.nextElement();

String value = prop.getProperty(key);

System.out.print(value + “:”);

} } } a)b)c)d)name:tel tel:name 张三:***: ***:张三

40.关于Properties类中的load和store方法说法正确的是?()AB a)load方法从流中读取属性列表,键值对,加载到Properties对象中 b)store方法将Properties对象中的键值对,写入到流中

c)load方法将Properties(Properties)对象中的内容加载到文件中

【黑马程序员】Java基础总结 篇4

(二)刚开始观看毕老师的视屏的时候,感觉一会儿输出流,一会儿输入流的,一会儿System.out,一会儿又转换流的。很晕。

最后毕老师给了一个总结,归纳出了IO操作的规律。感觉总结的非常好,虽然刚看第一遍的时候还是很晕,不过现在终于融汇贯通。

下面我就用自己的理解,总结一下IO流操作的一般规律:

在使用IO操作流之前,我们要问自己一下四个问题:

A.源和目的都有吗?(初步确定体系)

B.源和目的操作的是字符吗?(确定体系)

C.源和目的的设备都是些什么?(辅助确定具体对象)

D.需要提高输入和输出的效率吗?

补充:源的设备:内存,硬盘,键盘

目的的设备:内存,硬盘,控制台

当明确了以上几点之后我们就可以确定到底应该使用那一个流对象。

Demo1:拷贝一个文本文件的副本。

分析:

A.源和目的都有。

所以,源可以选择:Reader或者InputStream

目的可以选择:Writer 或者 OutputStream

B.操作的都是字符数据。

所以,源应该选择:Reader

目的应该选择:Writer

C.源的设备是:硬盘。目的的设备是:硬盘。

所以:源应该使用:FileReader

目的应该使用:FileWriter

D.需要提高输入和输出效率。

所以可以使用相应的装饰类。

源使用:BufferedReader

目的使用:BufferedWriter

具体代码如下:

BufferedReader bufr = new BufferedReader(new FileReader(“1.txt”));BufferedWriter bufw = new BufferedWriter(new FileWriter(“copy_1.txt”));

Demo2:将从键盘输入的数据存储到文件中。

分析:

A.源和目的都有。

所以,源可以选择:Reader或者InputStream

目的可以选择:Writer 或者 OutputStream

B.操作的都是字符数据。

所以,源应该选择:Reader

目的应该选择:Writer

C.源的设备是:键盘。目的的设备是:硬盘。

因为源是键盘所以应该使用System.in,但是键盘是字节流,但是我们使用的体系应该是Reader(字符)体系的。所以要使用InputSreamReader(转换流)将字节流转换为字符流在进行操作。目的应该使用:FileWriter

D.需要提高输入和输出效率。

所以可以使用相应的装饰类。

源使用:BufferedReader

目的使用:BufferedWriter

具体代码如下:

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

BufferedWriter bufw = new BufferedWriter(new FileWriter(“copy_1.txt”));

转换流详解:

查阅api我们知道转换流是定义在字符体系中的,那么我们什么时候应该使用转换流呢?

InputStreamReader:是字节数据通向字符数据的桥梁。

当我们要将字节数据转换成字符数据时使用,在转换成字符数据时,我们必须指定字符编码方式,如GB2312、UTF-8等

如果我们转化的时候使用的编码是系统默认编码,那么我们可以使用FileReader。其实,FileReader就是对编码方式为系统默认的转换流(public InputStreamReader(InputStream in):创建一个使用默认字符集的 InputStreamReader。)的一个封装,这样使用起来比较简单。

OutputStreamWriter:是字符数据通向字节数据的桥梁。

当创建使用指定字符集的 OutputStreamWriter 时使用。

简单说就是,我们如果要输出一些文本到控制台上,那么我们知道控制台的标准输出流是System.out,是字节流,我们在操作时,就要将字符数据转化成字节数据,这样控制台才能正确显示,所以就用到了OutputStreamWriter。但是这个地方要注意,如果我们拿到一个文本他的编码方式是UTF-8,但是你的电脑是简体中文的。如果你在使用OutputStreamWriter的时候没有指明转换时使用的码表,那么系统就会按照系统默认的码表转换(一般是GBK)。这样肯定会出问题了,所以,记住了!当我们要指定编码方式的时候就使用转换流InputStreamReader和OutputStreamWriter。

Demo3:将从键盘输入字符的数据显示在屏幕上。

快速分析:

A.使用键盘,输入流就是System.in,但是输入的是字符,所以用到转换流:InputStreamReader(System.in)

B.输出到屏幕上,顾名思义就是控制台。所以输出流是System.out,因为是文本输出,所以使用OutputStreamWriter(System.out)

C.如果要提高输入输出效率,就得使用装饰类。

所以最终代码如下:

BufferedReaderbufr=

newBufferedReader(new InputStreamReader(System.in));

BufferedWriterbufw=

newBufferedWriter(new OutputStreamWriter(System.out));

如果要求改为将键盘输入的数据存入一个文件中,并按照UTF-8的编码形式。

BufferedReaderbufr=

newBufferedReader(new InputStreamReader(System.in));

BufferedWriterbufw=

newBufferedWriter(new OutputStreamWriter

JAVA程序设计课程总结 篇5

专业:计算机科学与技术 学号: 姓名:

JAVA程序设计课程总结

经过一学期的java学习,我在老师的上课讲解以及自己的课下学习中对java编程有了一定的了解,我深深喜欢上了这种语言。培养了我正确应用面向对象的思维方法分析问题和解决问题的能力。

学习的内容主要分为以下几个部分:(1)java程序的编辑,编译,运行环境

(2)java语言程序设计中最基本的问题,即标识符,关键字,数据类型,常量,变量,表达式,声明语句,赋值语句,数据的输入与输出等。(3)流程控制语句,即分支语句,循环语句,转移语句。

(4)控制研究对象复杂性的原则,即分类,抽象,封装和继承,多态等。(5)数组的定义。(6)高级GUI组件的应用。

其中我对类与继承了解较多。一.类

在Java中,类文件是以.java为后缀的代码文件,在每个类文件中最多只许出现一个public类,当有public类的时候,类文件的名称必须和public类的名称相同,若不存在public,泽类文件的名称可以为任意的名称,但不能是数字开头的名称。在类内部对于成员变量,如果在定义的时候没有进行显示的赋值初始化,则java会保证类的每个成员变量都得到恰当的初始化:

1)对于char、short、byte、int、long、float、double等基本数据类型的变量来说会默认初始化为0,bolean变量默认会被初始化为false; 2)对于引用类型的变量,会默认初始化为null。

3)如果没有显示地定义构造器,则编译器会自动创建一个无参构造器,注意:如果显示地定义了构造器,编译器就不会自动添加构造器,所有的构造器默认为static的。

初始化顺序为:当程序执行时,需要生成某个类的对象,Java执行引擎会先检查是否加载了这个类,如果没有加载,则先执行类的加载再生成对象,如果已经加载,则直接生成对象。在类的加载过程中,类的static成员变量会被初始化,另外,如果类中有static语句块,则会执行static语句块。static成员变量和static语句块的执行顺序同代码中的顺序一致。在Java中,类是按需加载,只有当需要用到这个类的时候,才会加载这个类,并且只会加载一次。例如:

运行这段代码就会发现“欧阳”只会被打印一次。在生成对象的过程中,会先初始化对象的成员变量,然后再执行构造器。也就是说类中的变量会在任何方法调用之前得到初始化,即使变量散步于方法定义之间。

二.继承

在java中使用extends关键字来表示继承关系,当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式的从根类Object进行继承。例如:

类Number继承于Student类,Student类称为父类(基类),Number类称为子类(导出类)。如果两个类存在继承关系,则子类会自动继承父类的方法和变量,在子类中可以调用父类的方法和变量。在java中,只允许单继承,也就是说 一个类最多只能显示地继承于一个父类。但是一个类却可以被多个类继承,也就是说一个类可以拥有多个子类。1.子类继承父类的成员变量

当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下: 1)能够继承父类的public和protected成员变量;不能够继承父类的private成员变量; 2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承; 3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。

2.子类继承父类的方法

子类也并不是完全继承父类的所有方法。1)能够继承父类的public和protected成员方法;不能够继承父类的private成员方法; 2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。

注意:隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的。

3.构造器

子类是不能够继承父类的构造器,如果父类的构造器都是带有参数的,则必须在子类的构造器中显示地通过super关键字调用父类的构造器并配以适当的参数列表。如果父类有无参构造器,则在子类的构造器中用super关键字调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。例如:

这样的代码是没有问题的,如果把父类的无参构造器去掉,则下面的代码必然会出错:

改成下面这样就行了:

4.Super super主要有两种用法: 1)2)super.成员变量/super.成员方法;super(parameter1,parameter2....)第一种用法主要用来在子类中调用父类的同名成员变量或者方法;第二种主要用在子类的构造器中显示地调用父类的构造器,要注意的是,如果是用在子类构造器中,则必须是子类构造器的第一个语句。

Java基础总结 篇6

 变量单元直接存放数据

 赋值和传参的方式:传值,即传递副本

 比较相等使用关系运算符“==”

 引用数据类型

 变量单元存放引用即对象地址,而数据(对象)在另一内存区域存放。

 赋值和传参的方式:传引用(传递对象的地址),即传递对象本身。

 使用关系运算符“==”比较两个引用类型变量,比较的是地址,如果比较结果为

真,说明两个变量引用了同一对象。

 比较两个对象是否相等应使用equals方法

 Java是面向对象的语言,开发Java程序就是开发Java类,Java的变量定义、方法(函

数)和语句都必须在类中书写,“无类即无Java”。

 类的实例成员

属性(成员变量):直接定义在类体中的变量(注:在方法或语句块中定义的变量不是属性)

方法:直接定义在类体中的方法。

类成员:直接定义在类体中的内部类,即类成员。

注:对象的成员是从属于对象的,必须通过对象访问,在Java中不存在脱离对象和类而独立存在的属性和方法。

 类、方法、语句三者的关系:

类中包含方法,方法中包含语句;方法中不能嵌套方法;语句不能直接写在类体中。

 变量的作用域

 局部变量-方法的参数、方法体中定义的变量、语句块中定义的变量,仅在所定义的方法体或语句块中有效。

 属性-在整个类体中有效。

 公有的属性-其它类可以本类对象访问。

 私有的属性-仅限本类内访问

 局部变量(无论基本类型还是引用类型)在栈内存中,对象在堆内存中。注:引用类型的局部变量内存放是对象的引用(即地址),而对象在堆内存中。

 方法的重载-在同一类中多个方法同名的语法现象,方法重载应符合以下条件:

 方法同名

 参数有所不同(即类型、个数和顺序三者至少有一个不同)

注:方法是否重载不考虑返回类型等其它方面。

 包和访问修饰符

 包-类的目录结构,主要用途是方便类的管理。

 类的简称:不含包名的类名

 类的全限定名称(类的全称):带包名的类名。

 访问修饰符

 private-仅限本类内访问

 public-任何类都能够访问

 默认-限本包的类访问

 protected--限本包的类访问和子类的访问

 类的成员(属性、方法和成员内部类)可以使用四种访问修饰符,顶级外部类仅能

使用public和默认两种修饰符。

 数组

 基本类型的数组的元素放的是数据

 对象数据的元素放的是对象的引用

 二维数组实际上是一个维数组,而其每个元素又是一个一维数组。

 构造方法-与类名同名并且无返回类型的方法

 构造方法的作用是创建对象,仅能通过new关键字调用。

 类中未显式定义构造方法时,类中会有默认的构造方法(即一个public、无参的构

造方法);类中一旦定义显式定义构造方法,将不再产生默认的构造方法。

 构造方法可以重载

 构造方法只能可以使用四个访问修饰符,不可以使用其它修饰符(如static、final

等)。

 this关键字

 this表示本对象或对象自身的引用

 通过this可以调用本类的成员方法和属性

 通过this可以调用本类的构造方法,this调用构造方法的语句必须写在构造方法的第一句。

 实例成员和静态成员

 类的成员(属性、方法和成员类)可划分为静态成员和实例成员。

 实例成员是属于对象的,随着对象的创建而存在,随着对象的销毁而销毁。 静态成员是属于类的,随着类的加载而存在,随着类的销毁而销毁。

 使用static修饰的成员是静态成员,未使用static修饰的成员是实例成员。 静态成员内不能使用this关键字。

 this表示当前对象的引用。

 对象的初始化

 第一:实例属性赋默认值

 第二:实例属性赋初值

 第三:执行对象初始化块

 第四:执行构造方法

 类的初始化

 第一:静态属性赋默认值

 第二:静态属性赋初值

 第三:执行静态块

 继承的基本概念

 Java仅支持单继承

  如果一个类没有显式继承任何类,则隐式继承java.lang.Object类  子类拥有父类的一切,子类对象由两部分构成:父类对象部分和子类个性化的部分。 子类并不能访问父类的一切:  子类可以访问父类的public成员和protected成员  子类不可以访问父类的private成员  仅当子类与父类同在一包时,子类方可以访问父类的默认访问控制的成员。继承与类和对象的初始化  构造子类对象时,首先构造父类对象,其次构造子类个性化部分,两者共同构成完整的子类对象,即首先进行父类对象的初始化,在初始化子类对象(个性化)部分。 子类构造方法的执行首先调用父类的构造方法。 若在子类构造方法中无显式调用父类构造方法的语句,则系统默认调用父类中可访问的无参的构造方法,如果这时候父类中恰好没有这样的构造方法,则编译出错。 在子类的构造方法中可以通过super关键字调用父类构造方法。这样的调用语句只能出现在子类构造方法的第一句。 关于初始化的顺序  初始化父类  初始化子类  初始化父类对象  初始化子类对象 继承与类型转换  子类型对象可以自动转型为父类型  父类型引用某个子类型对象时,可以强制转化为这个具体的子类型 方法重写  在继承的情况下,子类的实例方法与父类的实例方法的方法名称、参数、返回类型、throws声明完全一致,并且该子类方法的访问权限不低于父类方法的访问权限,即方法重写(子类方法重写了父类方法),也称方法覆盖。 方法重写仅存在于父子类中的实例方法,静态方法没有重写的概念。 当通过子类型对象执行重写方法时,将始终表现为子类的行为,而且无论引用对象的变量是父类型还是子类型,也无论是直接调用还是通过父类型其它方法间接调用,都将如此。 final修饰的方法不可以被重写  final修饰的类不可以被继承 隐藏成员变量  如果子类和父类中定义了同名称的成员变量,则称子类隐藏了父类的成员变量  通过父类方法访问隐藏的成员变量时,将获得父类成员变量  通过子类方法访问隐藏的成员变量时,将获得子类成员变量  通过父类型的引用直接访问隐藏的成员变量时,将获得父类成员变量  通过子类型的引用直接访问隐藏的成员变量时,将获得子类成员变量 super关键字

 super仅能用于子类中表示本对象的父对象部分

 super可以调用父类型的构造方法

 Super可以调用父类的成员

 Super不可以使用在静态上下文中

 Super不可以做为参数传递,不可以做为返回值返回。

 当方法重写时,或父类成员变量被隐藏时,子类中只能通过super访问父类方法和

父类成员变量

 final关键字

 用于变量,表示变量的值不可改变

 用于类,表示类不可被继承

 用于方法,表示方法不可以被重写

 关于final变量的初始化时机

 局部变量:声明的时候初始化

 实例成员变量:声明、对象初始化块和构造方法三处之一

 静态成员变量:声明、静态块两处之一

 抽象类

 抽象类可以包含抽象方法,也可以不包含抽象方法

 含有抽象方法的类必须定义为抽象类

 抽象类有构造方法

 抽象类不能够实例化

 通过抽象类可以调用其静态成员

 抽象类是需要由子类继承的,因此抽象类不允许是final类

 抽象方法

 抽象方法没有方法体,包括一对空的大括号也不允许有

 抽象方法必须是实例方法,抽象方法不允许是final的 抽象类与继承

 抽象类可以被继承

 若抽象类的子类是非抽象类,则该子类必须实现(重写)其父类的所有抽象方法  若抽象类的子类也是抽象类,则该子类可以不实现(重写)其父类的全部或部分抽象

方法。

 接口

 接口也是数据类型,可以将其理解为“纯”抽象类

 接口不是类,也没有构造方法,不能够实例化

 接口中的属性一律是public、static、final的,并可以省略这三个关键字

 接口的方法一律是public、abstract的,并且可以省略这两个关键字

 接口中可以不包含任何属性和方法

 接口与实现

 接口不是类,因此接口与类的关系不是“继承”关系,而是“实现”关系,我们可

以将实现理解为继承(尽管这并不恰当)

 如果接口的实现类是抽象类,则该实现类可以不实现接口的全部或部分方法  如果接口的实现类是非抽象类,则该实现类必须实现接口的全部方法

 一个类可以实现多个接口

 接口与继承

 接口之间可以相互继承

 一个接口可以继承多个接口

 接口与类型转换

 接口的的子类型对象可以自动向上转型为接口类型

 接口的子类型指:是接口的实现类或者接口的子接口

 如果变量引用的对象实际是某个接口的实现类对象,而变量的类型不是这个接口的子类型,那么则可以强制转换为这个接口类型。

 异常的类层次结构

 Throwable错误类,表示不可恢复的致命错误

 Exception运行时异常,此类异常可以不做显式处理

 非运行时异常catch

 声明抛出 在方法头通过throws声明可能抛出的异常类型

 异常机制的五个关键字

 try catch finally throw throws

 如何使用

 try-catch

 try-catch-finally注:只要try执行,其对应的finally块才必然执行

 try-finally注:只要try执行,其对应的finally块才必然执行

 throw 主动抛出一个异常

 throws 用在方法声明头部,声明方法可能抛出异常

 finally代码块多用于书写资源回收代码

 Java集合类(集合框架)

 Collection接口

 List接口 允许重复元素,元素有索引序号,并按放入元素的次序编号

 ArrayList 线性表结构,查找快,增删慢

 LinkedList 链表结构,查找慢,增删快

 Vector 同步,查找、增删性能都不高。

 Set接口 不允许重复元素,元素无索引编号

 HashSet 元素散列存放

 TreeSet元素按自然顺序排序(即从小到大排序)

 Map接口

 HashMap

 允许null值和null键

 不同步

 Hashtable <--Properties

 不允许null值和null键

 同步

Java基础总结 篇7

(1)通配符的上界

? extends myClass其中“?”就是通配符,其上界为myClass,这句话代表myClass或其子类。List apples = new ArrayList;Listfruits = apples;

(2)通配符的下界

? super myClass表示通配符的下界为myClass,这句话代表myClass的超类型直至Object。Listfruits = new ArrayList();List= fruits;

(3)无界通配符

?等价于Object。

Java基础语法总结2 篇8

三、运算符

Java基 本 的 运 算 符 按功能分有 下 面 几 类 : 1.算 术 运 算 符(+,-,*,/,%,++,--)Java对 加 运 算 符 进 行 了 扩 展 ,使 它 能 够 进 行 字 符 串 的连 接,如 “abc”+“de”,得到 串 “abcde”。与 C、C++不 同 ,对 取 模 运 算 符 %来 说 ,其 操 作 数 可 以为浮点 数 , 如37.2%10=7.2。i++与 ++i的 区 别:i++在 使 用 i之 后 ,使 i的 值 加 1,因 此 执 行 完 i++后 ,整 个 表达式的 值 为 i,而 i的 值变 为 i+1;++i在 使 用 i之 前 ,使 i的 值 加 1,因 此 执 行 完 ++i后 ,整 个 表达式和 i的 值 均 为 i+1。

2.关 系 运 算 符(>,<,>=,<=,==,!=)该运算符的特点是:运算完的结果,要么是true,要么是false。Java中 ,任 何 数 据 类 型 的 数 据(包 括 基 本 类 型 和 组 合 类 型)都可 以 通 过 ==或!=来 比 较 是 否 相 等(这 与 C、C++不 同)。关 系 运 算 符 用 来 比 较 两 个 值 ,返 回 布 尔 类 型 的值true或 false,而不是C、C++中 的 1或 0。

3.布 尔 逻 辑 运 算 符(& | ^!&& ||)逻辑运算符除了!外都是用于连接两个boolean类型表达式。&: 只有两边都为true结果是true。否则就是false。|:只要两边都为false结果是false,否则就是true ^:异或:和或有点不一样。两边结果一样,就为false。两边结果不一样,就为true.& 和 &&区别: & :无论左边结果是什么,右边都参与运算。&&:短路与,如果左边为false,那么右边不参数与运算。| 和|| 区别:|:两边都运算。

||:短路或,如果左边为true,那么右边不参与运算。

4.位 运 算 符(>>,<<,>>>,&,|,^,~)用于操作二进制位的运算符,如2*8 = 2<<3。>>>(无符号右移)5.赋 值 运 算 符(= +=-= *= /= %=)6.条 件 运 算 符(?:)7.其 它(包 括 分 量 运 算 符 · ,下 标 运 算 符 [],实 例 运 算 符 instanc eof,内 存 分 配运 算 符 new,强 制 类 型 转 换 运 算 符(类 型), 方 法调 用 运 算 符()等)例子:对两个变量的数据进行互换。不需要第三方变量。int a = 3,b = 5;-->b = 3,a = 5;a = a + b;a = 8;b = ab;a = 5;a = a ^ b;//

b = a ^ b;//b = a ^ b ^ b = a a = a ^ b;//a = a ^ b ^ a = b;

Java 中共有 54 种运算符,按优先级可以分为 14 级:

优先级 操作符 含义 关联性 用法

--1 [ ] 数组下标 左 array_name[expr].成员选择 左 object.member

()方法参数 左 method_name(expr_list)()实例构造 左 class_name(expr_list)++ 后缀自增 左 lvalue++--后缀自减 左 lvalue--2 ++ 前缀自增 右 ++rvalue--前缀自减 右--lvalue ~ 按位取反 右 ~expr!逻辑非 右!expr + 一元加 右 +expr 减 左 expr-expr

+ 字符串连接 左 strExpr + strExpr 6 >> 有符号右移 左 expr >> distance >>> 无符号右移 左 expr >>> distance 7 < 小于 左 expr < expr <= 小于等于 左 expr <= expr > 大于 左 expr > expr >= 大于等于 左 expr >= expr

instanceof 类型比较 左 ref instanceof refType == 等于 左 expr == expr!= 不等于 左 expr!= expr & 整数按位与 左 integralExpr & integralExpr & 布尔与 左 booleanExpr & booleanExpr 9 ^ 整数按位异或 左 integralExpr ^ integralExpr ^ 布尔异或 左 booleanExpr ^ booleanExpr 10 | 整数按位或 左 integralExpr | integralExpr | 布尔或 左 booleanExpr | booleanExpr 11 && 逻辑与 左 booleanExpr && booleanExpr 12 || 逻辑或 左 booleanExpr || booleanExpr 13 ? : 条件运算 右 booleanExpr ? expr : expr 14 = 赋值 右 lvalue = expr *= 乘赋值 右 lvalue *= expr /= 除赋值 右 lvalue /= expr %= 模赋值 右 lvalue %= expr += 加赋值 右 lvalue += expr += 字符串连接赋值 右 lvalue += expr-= 减赋值 右 lvalue-= expr <<= 左移赋值 右 lvalue <<= expr >>= 有符号右移赋值 右 lvalue >>= expr >>>= 无符号右移赋值 右 lvalue >>>= expr &= 整数按位与赋值 右 lvalue &= expr &= 布尔与赋值 右 lvalue &= expr |= 整数按位或赋值 右 lvalue |= expr |= 布尔或赋值 右 lvalue |= expr ^= 整数按位异或赋值 右 lvalue ^= expr ^= 布尔异或赋值 右 lvalue ^= expr

运算符不但有优先级,还有关联性。上表中关联性为“左”表示该表达式从左边开始进行运算;关联性为“右”表示该表达式从右边开始进行运算。

四、流程控制语句(If、switch、do while、while、for、break、continue)1.当判断数据范围,获取判断运算结果boolean类型时,需要使用if;当判断固定个数的值的时候,可以使用if,也可以使用switch。但是建议使用switch,效率相对较高。switch(变量){ case 值:要执行的语句;break;…

default:要执行的语句;} 工作原理:用小括号中的变量的值依次和case后面的值进行对比,和哪个case后面的值相同了就执行哪个case后面的语句,如果没有相同的则执行default后面的语句; 细节:1):break是可以省略的,如果省略了就一直执行到遇到break 为止; 2):switch 后面的小括号中的变量应该是byte,char,short,int四种类型中的一种; 3):default可以写在switch结构中的任意位置;如果将default语句放在了第一行,则不管expression与case中的value是否匹配,程序会从default开始执行直到第一个break出现。

2.当某些语句需要执行很多次时,就用循环结构。

while和for可以进行互换。区别在于:如果需要定义变量控制循环次数。建议使用for。因为for循环完毕,变量在内存中释放。

上一篇:师范类专业个人职业生涯规划书下一篇:中语教研组工作计划