【黑马程序员】Java基础 : Java语句笔记

2024-04-27

【黑马程序员】Java基础 : Java语句笔记(共9篇)

篇1:【黑马程序员】Java基础 : Java语句笔记

【黑马程序员】Java基础 : Java语句笔记

摘要: 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基础知识!

黑马程序员合肥中心 编著

篇2:【黑马程序员】Java基础 : Java语句笔记

1、二维数组 格式:

Int[][] arr=new int[2][3];[2]代表1维数组的个数; [3]代表1维数组有三个元素; 内存图:

分析:

通过对内存图分布可知,首先在栈内存中加载main函数,开辟空间,定义一个变量arr,在堆内存中通过New创建一个数组实体int[2],并分配其地址值为0x0045,数组元素值进行默认初始化为Null;然后把地址值赋值给栈内存中的arr.在堆内存中开辟两块空间,分别用来存放二维数组中的数组元素,分配其地址值分别为0x0056、0x0089,然后对将地址值传给二维数组中的元素,所以说对内存中二维数组存储的是一维数组的地址值。最后变量通过二维数组的地址0x0045指向二维数组。

注意:二维数组中必须指定长度、以及实体没有对二维数组进行初始化时默认为null;

2、对二维数组的遍历(大圈套小圈思想)For(int x=0;x

3、面向对象的理解:

特点:

1、面向对象就是更符合人们思考习惯的一种思想。

2、从面向过程的执行者,转变成了面向对象的指挥者

3、面向对象将复杂的事情简单化了。

其实面向对象是一种思想,是面向过程而言,将复杂的事情变的更简单了。通过把大象放到冰箱里这个列子来理解面向对象的概念

面向过程:把冰箱门打开、存储大象、关闭冰箱;强调的过程注重行为; 面向对象:冰箱.打开、冰箱.存储、冰箱.关闭;强调的是冰箱这个对象。

面试题:你怎么理解面向对象?

首先说面向对象的特点:它是一种思想,它让复杂的问题简单化,它把执行者变成了指挥者。

然后举例子来说明,最牛的就是结合实际场景来说:其实面试官你就是在用面向对象的思想在思考问题,为什么这么说?因为公司业务蒸蒸日上,需要招更多的人来完成项目,所以才在这里招聘人员,你需要找一些具备专业编程经验的人,来帮公司完成工作,那么我就是那个对象,因为我具备专业编程能力,你就是那个指挥者,指挥我来做事,至于我怎么去完成编程任务,你是不需要去知道,你只要结果了就可以了,这其实就是把你之前的工作简化了,你不必再事必躬亲了。这就是面向对象思想的体现。

同时可以结合去饭店吃饭,在家做事等等列子来说明面向对象的思想。

扩展:OOP:面向对象编程。

OOA面向对象分析。

OOD:面向设计。还有面向接口、面向框架、面向对象的语言:C++、JAVA、C#

4、在实现功能,先找java当中是不是提供好了相关的对象,没有对象自己造一个对象。比如说公司招聘人员找不到人的时,这时公司就需要自己在公司内部培养人,也就是自己造对象。

5、类和对象关系:

a)类到底是什么?

类就是对现实生活中事物的描述,描述中包含了该类事物的共性内容。Class Car(){ Int num;String color;Void run(){} } 在类中定义的变量和函数都称为类中的成员。成员:

成员变量---属性 成员函数---行为

b)什么是对象?

对象就是该类事物实实在在存在的个体。

Eg:现实生活中的对象:张

三、李四

想要描述:提取对象中的共性内容,对具体的抽象。

描述时:这些对象的共性有姓名年龄性别学习java的功能。对象也可以理解为其实就是个容器,用来存储更多的数据,存储的都是每一个对象特有的数据,而类就是这些数据所属的属性。

用java语言来描述一个小汽车

描述事物:无非就是描述事物的属性和行为 属性:轮胎数、颜色 行为:运行 Eg: Class Car { String color=“red”;Int num=4;Run(){ System.out.println(color+“"+num);} } Class CarDemo { Public static void main(String[] args){ Car c=new Car();C.color=”bule“;C.num=5;C.run();m

Car c1=new Car();C1.num=8;C1.color=”green“;C1.run();} } 重点:分析上述代码在内存中的分布:

复习的时候写内存分析:

6、成员变量和局部变量的区别:

1、源代码中定义位置不同:

成员变量:定义在类中,在整个类中有效。局部变量:定义在函数中,在局部范围内有效。简单一句话:作用范围不一样,成员变量作用于整个类中,局部变量作用于函数中,或者语句中。

2、在内存中的位置和事件不同:

生命周期不同:

成员变量:随着对象的创建的而出现在堆内存中,随着对象被回收而消失。

局部变量:随着变量所属局部区域的运行,而出现在栈内存中,随着所属区域运行结束而释放。

3、变量使用的初始化:

成员变量:因为堆内存中都有默认初始化值,对于引用型变量默认值就是null;局部变量:因为在栈内存中都没有默认初始化值,必须手动初始化后才可以参与运算。

7、匿名对象:

即没有名字的对象,简化书写用的。基本使用:

1、当对对象的方法只调用一次时,可以用匿名对象来完成

这样写比较简化,如果对一个对象进行这个成员的调用,必须给这个对象起个名字

2、可以将匿名对象作为实际参数进行传递。一旦对对对进行多个成员操作时。必须要对对象起个名字。

Eg: Main(){ Show(new Car())} Public static void show(Car c)

{ C.num=3; C.color=”back";C.run();}

8、面向对象三个特征:

封装:

是指隐藏对象的属性和实现细节,仅对外提供公共访问方式,凡是面向对象必须有封装性。

特点: 将变化隔离 便于使用 提高复用性 提高安全性

原则:

1、将不需要对外提供的内容都隐藏起来。

2、把属性都隐藏,提供公共方法对其访问。在代码中的体现:

1、将成员变量都私有化,并通过共有的方法对其进行访问,这两个方法是:setXxxgetXxx

2、只要不准备对外提供的全部都封装起来,3、私有仅仅是封装的一种表现形式,函数是最小的封装体。方法需要私有吗?

Public static void selectSort(){ Swap();} Private void swap()//此处私有是因为位置置换不用提供给用户。{ } 代码实现: Class Person { Private int age;//为了不让其他程序直接访问age属性,避免错误的数据,可以使用一个关键字来完成private私有,它是一个权限修饰符。

Public void setAge()//对外提供函数是可以控制你输入的参数。//一个成员变量通常对应的两个方法、{ If(a>130||a<0){ Age=a;

Speak();} Else System.out.println();} Public void getAge(){ Return age;}

篇3:Java开发目录同步程序

Java语言是一种十分流行的程序开发语言。由SUN公司推出, 具有简易性、健壮性、安全性、可移值性等许多特性。可以用它开发各种应用程序, 是目前主流的开发语言。这里使用Java语言开发一个实用的目录同步程序, 通过实例讲解基本的Java程序开发技术。

2 开发思路

在网络环境中, 往往存在这样的需求。网络中的一台或几台计算机需要和网络中的某一台计算机中的目录文件保持一致。也就要同步的目录名和文件名以及文件内容要完全一样。如果文件发生变化, 变化后的文件将被实时更新。要实现这样的功能, 可以设置有目录同步要求的计算机为服务器, 要进行同步的计算机设置为客户端。双方通过套接字传递数据, 完成同步的功能。

服务器端设置要进行同步的目录名, 然后扫描该目录下的文件, 将要同步的文件名、文件校验码、文件时间、文件大小信息传给客户端;客户端检查要同步的文件, 如发现文件不一致, 就进行文件同步, 如果一致, 就确认同步完成。

3 程序代码

程序中有如下类, 用于搜索目录, 并将搜索到的文件放到一个Array List中:

服务端和客户端按以下规则传递数据, 如表1所示。

使用如下类, 用于读写服务端套接字:

使用如下类, 用于读写客户端套接字:

使用如下类, 用于进行文件校验, 以保证文件可靠传输:

4 结语

程序经过测试, 完成了目录同步的功能, 可以在实际环境中使用。希望本开发实例对从事Java语言开发的读者有所帮助。

参考文献

篇4:Java程序混淆技术综述

关键词:Java程序;混淆技术;软件水印;防篡改;软件版权保护

中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 09-0000-02

人们对于计算机的依赖性随着软件技术的不断给人们带来便利和乐趣,使工作更富有主动性和操作性,但是任何事物在发展过程中都会有其负面效应与之相对,随着计算机软件应用量和种类的不断扩展,其使用安全问题便开始影响到人们的正确使用,并开始逐渐打击使用计算机的积极性,以及对于安全问题的无奈。主要攻击形式是通过对软件备份的破坏而直接将软件彻底摧毁,根据现有问题,当前的软件已经经过改良,重新调试,但是攻击则换角度也将攻击破解方式进行重组,使改良的部分无法发挥其作用,这样软件就不会得到应有的保护,依旧能够以非正规途径得到软件的任何数据,从而进行大面积的传播,这也就是为何当今软件盗版现象严重的途径之一。Java程序的出现,首先能够在网络上加快传播速度并且无客观條件可以轻松普及,但同时却能够通过无关性对产权进行有效的保护,不会轻易的被人盗用。

一、软件混淆技术基本原理

(一)基本释义

软件混淆技术是为了能够在软件受到侵害或是盗用时可以被保护的一种现代技术,软件技术首先咋1977年新西兰首次被提出,其实是将原有的程序的语言转换成一种密码语言,不能被一般的软件所识破的一种转换,并且研制出能够对这种转换进行评估的理论计算。转换的形式未变,只是在形式上保留原有的运行根组成,添加一些其他能够扰乱破坏和读取的程序代码。如今混淆技术开始不断的发展,诸多的被应用于产权的保护中,所谓的混淆就是通过语词的转变但保持其语义依然与之前相同,这就能保证软件在使用时功能是不变的,却能够防止逆向工程攻击和被静态分析。

(二)软件混淆技术的分类

当Java文件经过处理,在原有的基础上添加了其他程序代码成为类文件,这种类文件包括魔数( magic number) 、版本( version) 、常量池( constant pool ) 、访问标识( access flag s) 、(this)类、(super)类、接口( interfaces) 、域( fields) 、方法(methods) 和属性(attributes) 。

软件混淆主要通过类内混淆和类间混淆来根据不同的使用对象进行划分,类内混淆主要是克服(methods)中的code字段,而类间混淆却是针对多种类文件的综合体进行混淆处理,其主要的方式是合并和拆分相对的过程处理。

下面分别介绍两种混淆。

(1)、类内混淆

能够支持类内混淆的途径有数据混淆、控制混淆、切片混淆以及针对特定工具混淆四种。数据混淆是对数据的结构组成元素原有的书写方式进行修改,使其不再成为能够被认知的程序。主要有:变量存储和编码混淆、变量聚合混淆、顺序调整混淆、词法混淆以及移除注释和调试信息混淆。控制混淆是在信息传输过程中的保护,主要采取追踪定位等方式实时监测信息的状态,从而对其他袭击系统进行抵御。切片混淆,正常在一般的软件中问了能够让计算机更好的识读软件,所以增加了切片以帮助更好的理解,降低难度,而混淆了切片则能够使其首先无法有助于难度的下降,另外会造成对于程序的误导可能降低了或是更改了某些其他的程序,达到了增加难度混淆的目的。针对特定工具混淆软件为了能够起到保护作用,本身具有一定的反编译和反混淆的功能,会在一定的紧急时刻自动启动,而针对特定工具就是抑制了自动的传导,对于能够使软件本身内部之间的反编译都可以正常的进行,但是对于外部的反编译就不会在自动启动,这就是混淆的高级之处。相区别与前三者人的行为,针对特定工具混淆具有自动的功能针对的是自动化。如果能够与以上三种任意搭配就能够达到防住人机的共同目的。

(2)、类间混淆

类间混淆是合并拆分类文件而造成混淆的目的其中又有三种表现形式:类合并、类拆分、隐形类间混淆。类合并是要面对多个文件的自身组成的函数变量,通过将函数、变量的名称进行更改,注意在更改过程中一定不能同时出现两个或以上的名子,如果在合并中有参数同系统提示无法进行更改,则要为其中一个虚拟一个参数。另外如果合并文件中有继承关系的则需要在合并成功后加入一个布尔型的私有变量用于区分标识符相同的函数。类拆分则是观察现有的文件是否进行拆分,同时并作出相应的调整。对于结果是可拆分的类就是将A拆分为A1与A2,为了能够使A的要素都能够实现所以应该是A2处于继承A1关系。类型隐藏是通过接口来实现混淆,并且能够保证原文件并不需要改变接口,所以被称为隐形。相比类合并,类拆分和隐形类间混淆所用的时间相对较短。

二、软件混淆算法的攻击模式

(一)混淆算法的理论研究

混淆技术的提出者曾经试图将整个运行过程当做是一个虚拟黑箱来看,也就是说对于其他程序来说这就完全是另外一个软件和原软件无任何联系,从它的输入和输出的方式内容和代码都不同,这种在理论中是可以站的住的,但是在实际操作中会受到很多因素的限制,但在相对宽松的要求下还是可以实现混淆技术的使用。后来又根据该理论研究通过点函数来实现虚拟黑箱,总而言之其未来的研究空间还有很大,期待它的日益成熟。

(二)混淆算法的攻击模式

1.针对数据混淆算法的攻击

假定T 是对程序P 的一个单向的混淆变换,当且仅当从原始程序P 除去某些信息后,无法通过混淆后的程序Pc恢复出P。词法变换是最典型的不可逆混淆算法。虽然对于经过词法变换的程序进行攻击不可能恢复程序的原貌,但只要理解程序各个模块的含义就可能对程序产生威胁。例如根据无法被混淆的系统API 名称等关键字,攻击者可以推测出该模块的大致功能。

2.针对控制流混淆算法的攻击

目前,针对控制流混淆算法的主要攻击方法是动态分析。动态分析对大部分混淆算法的攻击作用,并阐述攻击模型. 对于控制流混淆而言, 变换后生成的程序中若存在始终不执行的分支,通过动态分析就能找到对破解程序有用的信息.针对控制流混淆,还有黑盒测试攻击, 该方法通过对程序进行黑盒测试,了解各个类及其函数的功能, 从而获取攻击者需要的信息. 这种方法对大多数的混淆变换均能加以攻击。同时,该方法也存在着一定的局限性: 黑盒测试缺乏自动分析工具,需要依靠大量的人力来完成分析工作。

三、对于混淆技术的未来预估

混淆技术是一种可用于抵制逆向工程和重组工程、对软件知识产权进行保护的程序变换技术。使用混淆技术虽然会使代码的效率有一定程度的降低,但是它的实现代价相对较小, 因而在近年引起了广泛的关注.由于混淆技术不改变程序功能的特性, 并且有些词法混淆算法甚至可以减小原程序的体积, 因此混淆技术得以在保护移动代码方面得到广泛的应用. 受移动平台资源的限制,今后混淆技术的研究方向一方面要加大混淆的力度,增加攻击者反编译的难度,另一方面也要考虑降低混淆算法对目标程序的运行负担。文献探讨了混淆技术在移动代理上的应用。目前保护软件知识产权的新技术主要有3种:混淆技术、软件水印技术和防篡改技术。这3种技术各有特长,将它们互相结合使用,可以给予目标软件更为可靠的保护,这也是目前研究的一个重要方向。对于混淆算法的评估、正确性验证以及如何研制高效可靠的混淆算法, 也是将来的发展方向之一。

四、总结

混淆技术是对软件进行的基础产权保护,为了能够增加破译的难度和代价,从而使产权盗版的情况发生率降低,同时还能提高软件水银的鲁棒性,有人提出将程序的编译混淆, 而不是混淆程序本身。但是该方法还有若干问题需要考虑。使软件的安全度进一步提升,给人们的使用带来了更多的福音,虽然该技术已经广泛运用也颇收到好评,在技术上依旧有大的发展前景,需要投入更多的研究力量。

参考文献:

[1]霍建雷,范训礼,房鼎益.Java标识符重命名混淆算法及其实现[J].计算机工程,2010,第1期

[2]咸星海.面向对象代码混淆技术研究及软件实现[J].中国科技博览,2010,第19期

[3]刁俊峰.软件安全中的若干关键技术研究[D],北京:北京邮电大学,2007

[4]李新良,罗戈夕.基于Java的代码混淆算法研究[J].湖南文理学院学报:自然科学版,2010,第3期

[5]霍建雷,范训礼.房鼎益,Java标识符重命名混淆算法及其实现[J].计算机工程,2010,第1期

[6]李婧.基于控制流混淆轉换的代码保护技术[J].计算机安全,2009,第8期

[7]袁征,冯雁,温巧燕,张华.构造一种新的混淆Java程序的不透明谓词[J].北京邮电大学学报,2007,第6期

篇5:【黑马程序员】Java基础 : Java语句笔记

1、计算机常识:包括了软件的简单划分:系统软件 windos等和应用软件 QQ、迅雷等

2、人机交互方式:图形化界面GUI、命令行方式CLI:

3、常用的命令:cd:进入目标路径、cd..退出当前路径、mk:创建文件、rd:删除文件,dir:列出当前目录、cls:清屏、exit:退出dos窗口 cd回到根目录 rds删除根目录下所有的文件(这里是比较牛的地方,因为windos都是从里到外的删除,在dos命令下必须首先删除里面的文件保证没有任何文件下才能删除当前的文件目录)*:代表通配符、notepad:记事本;

4、Help/?为dos中寻找帮助的工具,可以帮助列出所有的dos命令

5、Java的三种技术架构:javaSE:标准版:是为了开发桌面和商务应用程序提供的解决方案 javaEE:企业版:为了开发企业环境下的应用程序而提供的一套解决方案;javaME:小型版:是为了开发电子消费品和嵌入式设备提供的解决方案;

6、Java的简单特性:跨平台性(平台在此所指的是操作系统,而操作系统指的是平台)怎么做到跨平台?因为有jVM的出现,只要计算机上安装上虚拟机就可以运行不同的程序 jVM作用:能解释java语言的程序;

正是因为有了JVM才使java语言具备了良好的移植性;

7、java语言的开发环境:

JRE:java Runtime Enviroment Java运行环境:包括javaJVM和核心类库 简单:JRE=JVM+核心类库

JDK:java Development kit java 开发工具:包括java工具包 比如:javac 编译器 java 运行 总的说来就是一句话:使用JDK开发完的程序交给JRE运行;

8、下载JDk和安装JDK 详细见:下载JDK和安装JDK专题 下午:

1、环境变量的配置: 三个步骤:下载安装、配置环境变量、javac编译运行(如果dos窗口显示出javaJVM中所有的参数信息代表已经配置成功)

2、path环境变量有什么作用?用于记录应用程序所在的路径;

3、配置Path环境变量目的:为了方便任何情况下都能执行应用程序

4、区别:不用找路径了,windos找路径

5、临时配置环境变量:Set path:

6、在原有的基础上添加新的参数值:set path=E:javaJDKjdk1.7_0_3bin%path%:注意后面的部分(注意:配置时要尽量配置在前端,否则JDK会优先运行其他程序)

7、Java程序:

Class Demo { Public static void main(String[] args){ System.out.println(“HelloWorld!”);} } 从上面的程序中可得:

1、java文件的扩展名为:.java

2、javac 对该java文件进行编译;

3、java对生成的class文件进行运行;

类就是存储代码的地方; 关键字:class

类名的书写规范:英文和数字的组合,英文单词第一个字母大写 如果有几个组成,每个英文字母的首字母大写(回忆变量名书写规范----已经忘记了)

------自己写好的文件称之为源代码或者源文件,必须翻译成计算机能识别的文件

NoSuchMethodError:main ;没有main方法(缺少主函数)

回忆最常见的几个异常(已经忘记,java面试中这么一道题:说出你经常遇到的异常,至少五个)----------------public static void main(String[] args)main函数可以保证该类独立运行; 它是程序的入口; 它会被JVM所调用; argments:args;参数

作用:可以让一个类可以独立运行;

java程序的主函数,程序的开始;执行的起始点;

面试题:一个java程序中是否只能有一个main函数?(自己查找--已经忘记)可以重载main()函数(重载和覆盖知识点已经忘记,晚上补齐)补习:

重载:什么是重载:Overload表示同一个类中可以有多个名称相同的方法,重载的特点:参数列表的方法各不相同(参数个数和参数列表)

为什么用重载:是静态多态性,即同名不同参,好比一个人可以用不同的餐具一样; 重写:override覆盖一个方法,并且对其重写,以求达到不同的作用,-------------System.out.println("");println与print的区别:前者换行也就是回车,后者没有回车; 作用:显示效果不一样;

java的输出语句:输出在控制台上;

java对应的程序就是java虚拟机

弄清楚编译时期和运行时期出现的机制和错误:(后期的异常机制中涉及到)------------初学者在初学的时候遇到的问题:

1、文件名保存错误;

2、目录不对 eg:只进入了盘符,没有进入文件中;

3、扩展名保存不对;eg:123.java.txt扩展名隐藏; 解决方法,用dir查看文件详细信息,显示其扩展名;

4、主函数找不到;

5、编译失败;

8、classpath:类文件路径 set classpath=c:myclass 将java的类文件告诉系统,java虚拟机在执行时就会制定的目录下查找; 作用:简单一句话:告诉java虚拟机要运行类文件的位置; 没告诉位置就在当前文件下找,告诉位置就去告诉位置查找!

set classpath=c:mycalss;多了一个分号,表示告诉虚拟机按照所指定的目录下查找的java程序,如果没找到会在当前目录下再次查找;

一般情况下不加分号;如果加分号和自己指定的意愿有悖; set calsspath=.;c:myclass表示当前路径和指定的目录;

9、path与classpath的区别?

path是用于定义系统中的可执行程序的所在路径。方便于执行系统中的执行文件,比如 exe bat。

classpath用于定义java的类文件class文件的所在路径。是为了让jvm去classpath路径下查找要运行的java程序。

10、明明看到类名,但是运行时找不到类文件,只有两种情况:

1、类名写错,只要源文件和类名相同可以避免此错误;

篇6:【黑马程序员】Java基础 : Java语句笔记

之前写了“Java之debug总结一”,“Java之debug总结二”共总结了5种debug方式,现在简绍第6种,不足之处,敬请指正:(源码在文章末尾处)本文以chrome浏览器为例

六.前台debug 主要:debug js代码(1.jsp中嵌入的js代码 2.js文件中的js代码)第一步:首先创建一个web项目,需要有一个jsp页面和js,如下图:

第二步:在test.js,index.jsp中填充内容,如图示: index.jsp

黑马程序员济南中心 编著

test.js

第三步:把项目发布到tomcat服务器中,并启动tomcat服务器

第四步:在浏览器上访问index.jsp,使用“F12”打开chrome开发者工具,如下图:

黑马程序员济南中心 编著

选中“Source”,点击,出现如下界面

黑马程序员济南中心 编著

点击“[url=]encode测试[/url]”按钮进行测试

以上为外部js代码测试,测试过程中可以修改js的内容,“Ctrl+s”保存后,可以立马生效,断点会从第一行从新开始.黑马程序员济南中心 编著

内部js测试步骤类似于上面的步骤,只是在选择资源的时候不是选择“test.js”,而是选择“index”,选择后页面如下图:

测试步骤和外部js一样

比较外部js和内部js的区别: 外部js,可以进行动态的修改, 修改之后立马生效,并且可以立马进行测试.内部js,不可以动态修改,用起来有点不方便

以上以我用过的所有debug方式,希望对大家有所帮助

篇7:【黑马程序员】Java基础 : Java语句笔记

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

本套题共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)对象中的内容加载到文件中

篇8:UDP的Java聊天程序

Java语言似乎专门为网络设计的,用其开发网络软件特别便利,在Internet时代,Java热遍及全球,学习和使用Java的人越来越多。在Java中进行网络编程是相对容易的,因为J2SE中的java.net包已经对各种通信协议很好地进行了封装。文中用Java来实现基于UDP的聊天程序,限于篇幅,只实现了基本的聊天功能。

首先,要介绍Java中封装UDP编程的类———DatagramSocket,这是用来发送和接收数据报的套接字。在程序启动后,可以在构造函数中提供端口参数用以在本地主机上绑定一个端口,以便接收和发送数据报。DatagramSocket类的send方法可以将参数对象的数据报发送到目的主机的目的端口;receive方法可以接收网络上其他主机发送过来的数据报并封装成对象。

其次,要介绍的就是承载数据报的对象DatagramPacket,这个对象封装了UDP的数据报数据,通过重载构造函数,提供不同的参数,可以把DatagramPacket构造成发送数据或接收数据的数据报对象。发送数据的对象将作为DatagramSocket类的send方法的参数;接收数据的对象将作为DatagramSocket类的receive方法的参数。

以上两个类,其实就基本可以实现UDP方式的网络聊天功能了,但是为了数据报能够正确发送,还得借助InetAddress类。InetAddress类表示互联网协议(IP)地址,通过调用静态方法getByName并提供字符串形式的IP地址参数就可以得到对应的IP地址对象,把它传给DatagramPacket,再用UDP套接字的send方法就可以向IP地址对应的主机发送数据了。

为了方便用户的使用,把程序分成两个类,主类为Chat,里面有主函数main,以便应用程序的运行;另一个类FrameMain,扩展了窗体类,方便用户输入及显示消息。主函数main中实例化了主窗体FrameMain。

接下来来看具体代码,为描述程序的方便,分块地来研究,先看代码片断1:

以上对象都是程序中要使用的主要对象,除了本地监听端口设了9000的值,其他对象都是空对象。recvPacket对象将在套接字调用完receive方法后实例化,而sendPacket对象和IP对象将在触发发送数据报的代码时创建。UDPSocket对象是核心,将在一个单独的初始化方法jbInit(JBuilder开发工具默认生成的方法)中对这个对象进行创建,并且在窗体构造函数中调用jbInit方法。请看以下jbInit方法的代码片断2:

以上代码在实例化UDPSocket对象时以9000的端口号作为监听端口。UDP套接字通过调用receive方法监听数据报并实例化recvPacket,但是由于该方法在接收到数据报前一直阻塞,所以为了与主界面功能互不影响,将这个会阻塞的方法放到一个单独的线程中,这样,主界面的发送和显示功能与接收数据报的功能可以认为是同时在进行,互不干扰。请看以下代码片断3:

以上代码中,run函数定义在主界面类FrameMain中,它实现了Runnable接口,然后在jbInit函数中创建了一个子线程recvThread,将主界面的实例传给子线程,意味着子线程在运行过程中要工作的代码写在主界面的run函数中,并且调用start方法启动子线程(参见代码片断2)。UDPSocket对象的receive方法返回后,recvPacket中就有了数据报的内容,通过调用getData方法获取字节数组,并组合成字符串显示。那么,recvPacket中的数据是谁发来的呢?答案就是网络中的其他主机,发送数据报的过程是,先得到用户的输入数据,然后得到用户输入的目标主机和端口,最后组合成数据报对象sendPacket,调用UDP套接字的send方法发送。请看以下代码片断4:

以上代码中,jtfSend是用户输入聊天信息的文本框,jtaReceive是显示接收信息的多行文本框。sendMessage函数可以由输入框(jtfSend对象)或发送按钮的Action事件调用,信息朝目标主机同端口(9000号端口,sendPacket构造函数的第四个参数)发送后,同时也显示在本机聊天窗体的信息框中。为了测试程序,我们用两台局域网内的主机做实验,A主机IP地址为172.16.10.166,B主机IP地址为172.16.10.222。分别在两台主机中运行聊天程序,并相互输入聊天信息,可见程序运行结果如图1所示。

由此可见,用Java语言实现简单的UDP聊天程序是相当容易的,核心的收发数据报功能只要借助DatagramSocket和DatagramPacket两个类就可以完成,如果再把其他功能完善一下,就可以编写出更有实际用途的网络聊天程序。

摘要:UDP是OSI参考模型中一种无连接的传输层协议,它提供了简单不可靠的信息传送服务。由于UDP比较简单,UDP头包含很少的字节,所以它在速度方面有很大优势。很多常用的即时通软件,如QQ程序,都会使用UDP实现很多基本功能。Java语言是当今流行的网络编程语言,它的API封装了UDP编程的类,用来实现UDP聊天程序很容易。

关键词:UDP,Java,聊天程序

参考文献

[1]UDP.用户数据报协议.http://www.networkdictionary.cn/pro-tocols/udp.php.

[2]方建文.Java UDP编程及应用.电脑学习,2005,1.

篇9:浅谈Java桌面应用程序开发

【摘 要】Java对于服务器,个人电脑和移动设备来说是一项伟大的技术。由于需要java的跨平台的特性,因此java在服务器和移动设备方面的应用是非常成功的。Java开发的桌面程序既有友好易用的图形用户界面,也能够实现相应的功能。【关键词】桌面开发

AWT

Swing SWT Java与桌面端现在流行的桌面平台要数Windows、Mac和 Linux。但它们不是十全十美的,Windows主宰着桌面操作系统的市场,其上有巨大的应用和开发群体,但它昂贵且有许多安全漏洞。Linux有着稳固的基础,它是开源的软件,比Windows更可靠。Mac非常容易操作且不是黑客的目标,但与Windows和Linux比起来,Mac的硬件和软件可选的余地非常的有限。Windows、Linux和Mac 在桌面的流行创造了多样性,这种多样性正是Java需要的,这就使得Java在桌面有举足轻重的地位。跨平台的支持Java 运行于所有相关的操作系统,包括Windows、Mac和Linux。也就是说把现有的应用从一个操作系统移植到另一个操作系统而不用做太多的改动,所以Java是首选的桌面开发平台。或许用微软的可视化工具很容易构建.NET应用,但是这将使软件被绑定在了Windows平台上。也许有人想用Linux 代替Windows 从而避免由微软操作系统的漏洞带来的问题,但是用户不能容忍的问题之一是当从Windows移植到Linux时所带来的巨大的费用。如果应用程序用Java构建,就没有了这些问题,Java的图形用户界面看上去会跟使用的操作系统一样,而并不需要做什么改动。丰富的特征最初,Java只有非常有限的一些特征去构建图形用户界面,思想就是用与平台无关的Java应用程序接口打包不同的操作系统的本地图形用户界面,称之为抽象的窗口工具。它仅有普通的部件如文件域、文本区、选择框、单选按钮、列表框和按钮被AWT支持,图形和图像的特性支持非常有限,也就是说,只能够构建简单的applet程序。认识到需要更高级的图形用户界面组件和图形能力,Sun公司开发了Swing,Java 2D,Java 3D,图像的输入/输出,Java高级图像(JAI)和很多其它的组件。这些中的一些窗体组件现在已经是Java 2标准版(J2SE)里的一部分。例如Swing、Java 2D、图像的输入/输出都是Java的核心API,它们随着Java开发工具包(JDK)和Java运行环境一起被提供给用户。Java图形界面工具Java有三个主要的图形界面工具:AWT,Swing和SWT。Swing 是构建java图形界面标准的API(应用程序接口),一些AWT类由Swing继承而来。SWT是一个非常有前途的新的窗体工具,由IBM资助。但是事实上,这三者相互补充,它们满足不同的需求。AWT抽象窗口工具包(Abstract Windowing Toolkit)(AWT)是Java的平台独立的窗口系统,图形和用户界面器件工具包。AWT是Java基础类(JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API。AWT提供了JavaApplet和Java Application中可用的用户图形界面GUI中的基本组件(components)。由于Java是一种独立于平台的程序设计语言,但GUI却往往是依赖于特定平台的,Java采用了相应的技术使得AWT能提供给应用程序独立于机器平台的接口,这保证了同一程序的GUI在不同机器上运行具有类似的外观(不一定完全一致)。SwingSwing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。工具包中所有的包都是以swing作为名称。SWTSWT是IBM为它的Eclipse集成开发环境而开发的图形用户界面工具。SWT可以在Eclipse环境外使用,而且提供对操作系统本地图形用户界面的直接访问。因此,基于SWT的Java应用程序拥有本地的图形用户界面并且可以和本地别的应用程序和部件集成在一起。SWT社区现在正在设计浏览器API,这些API可以产生基于IE或者Mozilla的HTML窗口。SWT现在可以在AIX,HPUX,Linux,QNX,Solaris,和Windows下面运行。误解与Bug对于java/Swing一直有着误解,诸如:Java/Swing太慢了,或者是Java/Swing需要更多的内存。也许老式的奔腾运行JDK1。2确实很慢,但是PIII级别的CPU运行JDK1。4环境是足够快的。一个应用程序中鼠标在1毫秒和在10毫秒的反映的差异,从使用者方面来说是没什么区别的。Java不但在企业级的上千人同时在线的服务器中表现良好,而且在仅有有限资源的移动设备上的表现也是很出色的。总结Java作为一种网络技术,是为了在浏览器中能够运行小应用程序而发布,但是它从开始就有运行独立的桌面应用程序的能力。不幸的是,AWT没有提供足够的桌面端的程序所需的特性。Swing着手于解决这些问题,但是它有不少的bug。今天,Java有构建大型桌面端应用程序的能力并修复了bug。Java独有的优点是“只写一次,到处运行”——在Windows,Linux,Mac和其它操作系统上运行Java代码的能力。【参考文献】[1]Eric,Java编程思想[M],第4版,机械工业出版社,2007年4月[2]Metsker S J,Java设计模式[M],第2版,电子工业出版社,2012年09 月[3]毕建信,基于MVC设计模式的Web应用研究与实现[D],武汉理工大学出版社,2006年5月

上一篇:插曲的作文1200字下一篇:公司反恐防范应急预案