第一篇:【黑马程序员】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://www.xiexiebang.com/去了解java基础知识!
黑马程序员合肥中心 编著
第二篇:【黑马程序员】Java基础总结
【黑马程序员】Java基础总结
黑马程序员的javaEE课程主要分为2个部分:java基础+java就业。今天就简单的给大家总结一下咱们java基础的知识。
注:Java采用Unicode符号集,每个字符占2个字节,无论英文还是中文还是其他字符。
标识符
为变量、类或方法起的名称 以字母,下划线、或者$符号开头 由字母、数字、下划线或者$符号开头 区分大小写,没有长度限制,不能使用关键字 尽量取得容易辨识,见名知意
如:identifier、userName、user_Name、_sys_varl、$change
基本数据类型
Java定义了8中基本数据类型
[AppleScript] 纯文本查看 复制代码
?
/**
* @author 传智播客 1 */ 2 布尔值----boolean(只有true和false两种类型)3 字符-------char(16 位的Unicode字符 用单引号('')标注;'a'表示字母4 a
't' 表示制表符
'u'中?用确切的代替
申明5 并且初始化: char c = 'A'
申明变量 char ch1,ch2)6 整数--------byte(8位)short(16)int(32)long(64)【以0开7 头表示八进制 ;以0x开始表示16进制】 浮点型-----float double
变量
必须在类的内部【可以在方法外也可以在方法类】 在方法类定义的变量叫做局部变量,需要显示的初始化
黑马程序员合肥中心 编著
成员变量和类变量【对象】自动初始化【数字初始化为0,对象初始化为null】
常量
在程序运行中,其值保持不变的量
不同数据类型间的相互转换【封装Wrapper类】 Java中类的定义:
[AppleScript] 纯文本查看 复制代码
? /**
2* @author 传智播客
3*/ 4 <修饰符> Class <类名>{ <属性申明>;6
<构造器申明>;7
<方法申明>;8 }
成员变量申明:
[AppleScript] 纯文本查看 复制代码
? <修饰符> <类型> <名称>;修饰符:
[AppleScript] 纯文本查看 复制代码
? /** 2
* @author 传智播客 3
*/ 4 final:修饰常量,常量的值不能被修改【例如 final int CONSTANT = 50;】 5 static:申明静态变量[类变量] static int nCount;方法的申明:
[AppleScript] 纯文本查看 复制代码
? /** 2
* @author 传智播客
黑马程序员合肥中心 编著
3*/ 4 <修饰符> <返回值类型> <名称>[参数列表]{ 5
语句;6 }
方法参数的传递方式:
1、值传递:形参是基本数据类型,方法调用时,实际参数把值传递给形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容;是两个不同的存储单元,所以方法执行中,形式参数值的改变不会影响实际参数的值。
2、引用传递:形参类型是引用数据类型【传递地址】,方法调用时,实际参数是对象或者数组,这时,形式参数和实际参数指向的是同一地址,方法执行中,对形式参数的操作实际上是对实际参数的操作,这个结果在方法结束后被保留了下来,所以对形式参数的操作实际上就是对实际参数的操作。构造器申明:
[AppleScript] 纯文本查看 复制代码
?
/** 1 * @author 传智播客 2 */ 3 <修饰符> <类名>[参数列表]{ 4
语句;5 } 6 注释:构造器没有返回值,void也不行;如果有返回值,方法会被当做普通函7 数执行; 构造器函数特点:
1、作用:完成对类对象的初始化
2、名称必须和类名相同
3、不能有返回值,不能有 return 语句
4、一般申明为Public类型 构造器的使用:
黑马程序员合肥中心 编著
1、不能现实的调用
2、在创建一个类的对象时,系统自动调用构造器为该对象初始化
3、构造器只能和new关键字一起使用
格式:
类名 对象名 = new 构造函数名称(成员变量的初始值);
默认构造器:
1、每个类至少有一个构造器
2、如果不编写构造函数,系统自动添加默认的构造函数【默认构造函数不带参数,默认构造函数函数体为空】
3、不必编写构造函数就能使用new XXX()
创建实例
对象创建格式:
<对象名> = new <类名>(实参)
对象的清除:
对象为null时,Java自动调用垃圾回收机制清除对象,释放对象占用的内存空间 手动编写finalize()方法撤销对象--不提倡
对象的内存模型:
栈内存:方法中定义的变量(基本类型和引用类型)。超过变量的作用域,自动释放变量的内存
堆内存:new 创建的对象(包括数组),由系统自动回收
类的继承【仅支持单继承】
[AppleScript] 纯文本查看 复制代码
? /**
2* @author 传智播客
3*/ 4 <修饰符> class <名称> extends <父类>{ 申明;6 }
黑马程序员合肥中心 编著
子类可以继承父类中非private的方法和属性;子类可以添加新的属性和方法;【程序代码重,减少冗余】 方法的重载(overload):
1、一个类中有多个同名的方法
2、条件:参数的个数不同;参数的类型不同
3、如果两个方法只有返回值不一样,不是重载,会报错
方法的覆盖(override):
1、子类可以修改父类继承过来的行为
2、子类可以创建和父类的方法不同功能的方法,但是下面必须相同:【方法名、返回值、参数列表】
super关键字:
往往在覆盖方法时,真正不目的不是代替现有的行为,而是在某些方面扩展那些行为; 类中使用super关键字指向父类的成员 包括数据和方法; 3中使用方法:
super.方法名([参数表]);----调用父类的方法 super.成员变量名;----访问父类的成员变量 super([参数表]);----调用父类的构造函数
构造函数不能被继承:
子类从父类继承所有的方法和变量 子类不能继承父类的构造函数
有两种方式可以获取构造函数:
1、使用默认的构造函数
2、编写1个或者多个构造函数
调用父类的构造函数:
要调用父类的构造函数,必须在子类构造函数的第一行使用super关键字
黑马程序员合肥中心 编著
要调用特定的父类的构造函数,必须为super提供参数
如果没有this或者super调用,编译器会插入一个对父类无参数构造函数的隐式调用: super();
变量的多态:
类型为X的参考变量,指向的对象类型既可以是X,也可以是X的子类; 如: Employee x = new Manager();Employee y = new Employee();
实例方法能够被覆盖,静态(static)方法不能被覆盖 原因:
静态方法在编译时候,根据调用该方法的类或者对象所属的类决定 实例方法在运行时根据对象所属的类决定
如:Super s = new Sub();编译时候S是Super类的对象,运行时 S 指向Sub类的对象;
instanceof操作符:
可以根据对象所属的类进行不同的处理 抽象类:只能被继承,不能被实例化的类 定义格式:
[AppleScript] 纯文本查看 复制代码
? /**
2* @author 传智播客
3*/ 4 abstract class 类名{ abstract 返回值类型
方法名[参数列表];6
...7 } 说明:
抽象类中可以包含抽象方法和非抽象方法,也可以不包含抽象方法和非抽象方法;只要有一个抽象方法,就属于抽象类;
[AppleScript] 纯文本查看 复制代码
黑马程序员合肥中心 编著
?
01 /** 02
* @author 传智播客 03
*/ 04 abstract class Animal{ 05
public abstract void eat();06
} 07
class Dog extends Animal{ 08
public void eat(){System.out.println(“狗吃骨头”);} 09
} 10class Cat extends Animal{ 12
public void eat(){System.out.println(“猫吃老鼠”);} 13 } 115 class Wolf extends Animal{ 16
public void eat(){System.out.println(“狼吃羊”);} 17 } 说明:不能创建抽象类的对象,即不能被实例化;
使用时,必须用起创建子类
子类可以定义自己的成员变量和方法,但是必须将父类的所有抽象方法代码写完;
如果子类只是实现了部分抽象的方法,那么,该类仍然是抽象类; 最终类:
final 类不能被子类化;如Java.lang.String 是final 类,这样做是基于安全的考虑; 标记为final的方法不能被覆盖;处于安全的考虑,如果方法的实现不应改变,而且对对象的一致性要求比较高,则可以创建一个final方法。
标记为final的变量代表常量,只能一次赋值; 接口:
使用interface关键字申明,可以支持多重继承 接口中只能包含: 抽象方法;
黑马程序员合肥中心 编著
常量(默认为 public static final)【用得较少】 说明:
1、接口本身只是提供定义,使用时,必须通过类实现接口(implements)实现接口时,必须实现所有的方法。否则该类还是抽象类(abstract class)。
2、一个雷尅实现多个接口。
3、扩展子句(extends)必须在实现子句(implements)之前
包:
package <顶层包名>[.<子包名>]*;
如:package shipping.domain;说明:
1、如果有包申明,必须在源文件开始处申明。他的前面只能有空白和注释,不能有其他语句;
2、每个源文件只能有一个包申明;
3、如果没有包申明,则该类属于“默认”包(没有名称的包)
4、包的名称有层次,且用.分开;
import语句: 基本语法:
import <包名>[.<子包名>].<类名> 或者import <包名>[.<子包名>].*;
其实在学习java过程中基础还是比较容易,如果大家想学习java基础的知识,欢迎大家可以去传智播客官网http://www.xiexiebang.com/去了解java基础知识!
黑马程序员合肥中心 编著
第三篇:黑马程序员:Java集合简单总结
黑马程序员:Java集合简单总结
在Java语言中,学好集合是非常重要的,下面简单的对集合进行总结,以便大家学习,有
问题再相互交流。
集合框架图
在集合框架图中可以看出,Collection接口中主要有两个子接口,分别是List和Set。List集合的特点是元素有序、包含重复元素,Set集合的特点是元素无序、不包含重复元素。Map集合中存储的是键值映射关系,元素都是成对出现的。Map接口的主要子接口有HashMap和TreeMap。
总结ist有顺序有重复没有排序,set无重复有排序,map的key也和set一样。
List接口
List : 特点是元素有序、可以包含重复元素。它有两个实现类分别是:ArrayList和LinkedList。
ArrayList : 内部维护一个数组结构,允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。
LinkedList : 内部维护了一个双向链表结构,即通过节点之间彼此连接来实现的,每一个节点都包含前一个节点和后一个节点的引用。当一个新节点插入时,只需要修改其中保持先后关系的节点引用即可,这样的存储结构保证了LinkedList集合在增删元素时效率非常高。
Set接口
Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面的List。实际上Set就是Collection只是行为不同,也就是说Set集合并没有对Collection接口进行扩充,只是比collection接口要求更加严了。
Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。
HashSet : 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。
TreeSet : 保存有序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。
LinkedHashSet : 具有HashSet的查询速度,且内部使用链表维护元素的顺序。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
Map接口
Map用于保存具有映射关系的数据,因此Map集合里存储两组值,一组用于保存Map里的key,另一组用于保存Map中的value,key和value都可以是任意引用类型数据,其中,作为key的值是不允许重复的,而value中可以出现重复。Map : 维护“键值对”的关联性,使你可以通过“键”查找“值”。
HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显著提高性能。HashMap集合是基于哈希表的Map接口实现,并允许使用null键null值,但必须保证键的唯一性。
LinkedHashMap : 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序。而在迭代访问时发而更快,因为它使用链表维护内部次序。
TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(顺序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。
Hashtable线程安全,但是存取速度很慢,且不允许存放null键null值,目前基本上被hashMap类所取代。Hashtable有一个重要的子类Properties。
Properties:java.util.Properties;key和value都是String类型,用来读配置文件。继承自Hashtable,比 Hashtable 更严格 属性列表中每个键及其对应值都是一个字符串。常用方法 String getProperty(String?key)和 setProperty(String key,String value);
用法:我在D盘下建了一个名为 AA.dat 的文件,文件的内容为:
name=ch
password=12345
执行以下程序,输出 ch,可见用 Properties 可以很方便的解析配置文件 Properties p = new Properties();p.load(new FileInputStream(“D:AA.dat”));System.out.println(p.getProperty(“name”))
第四篇:java程序员
如何迅速成为Java高手[Tomjava原创]
很多网友问我学习Java有没有什么捷径,我说“无他,唯手熟尔”。但是我却很愿意将自己学习的一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛!
要想学好Java,首先要知道Java的大致分类。我们知道,自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。J2SE开发桌面应用软件比起VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。所以现在应用最广泛又最好学的就是J2EE了。J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。
那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。然后你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?还好,SUN提供了Javabean可以把你的JSP中的Java代码封装起来,便于调用也便于重用。接着就是EJB了,EJB就是Enterprise JavaBean,看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail了。
好了,对Java和J2EE有了一些基本概念之后,你就应该编一些程序了,千万不要纸上谈兵哦。最好找一些有实例且带光盘的书来看,这样看到好的程序就可以直接Ctrl+C再Ctrl+V,也不用劳您老大架再亲自把它再输一遍吧,再说直接复制还不用怕出错,何乐而不为呢!还有就是要经常上一些好的Java编程文章,有好的文章要Cut下来,有问题尽管问,只要问题不是太傻,一般高手都会回答你的。下面介绍几个好的Java方面的编程网站:
CSDN论坛 http:///那里Java资料比较全;
java.com.cnhttp://.cn/看这域名就知道有多牛,注册用户快接近一万了,同时在线人数也在一千左右,人气很旺的;
IBM的开发者网络http://IBM永远的蓝色巨人;
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!你现在最缺的是实际的工作经验,而不是书本上那些
凭空想出来的程序。所以你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他还愿意不厌其烦地教你,这样好象有点难哦!
还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。学Java必读的两个开源程序就是Jive和Pet Store.。Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站http:///去下载,或到同济技术论坛的服务器上ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要错过了。
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体“技术”,它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧,让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。关于设计模式的资料,还是向大家推荐banq的网站http:///,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring(重整)和极限XP编程,相信你又会上一个台阶。
做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧,你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的来了。。。当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
下面介绍两个好的开源项目网站:
湖北省软件公共开发平台http://gro.clinux.org/
共创联盟http://cosoft.org.cn/
哇,好高兴哦,我终于成为高手了!非也,非也。古人云:“识时务者为俊杰”。你知道计算
机界现在的发展形势吗?你知道微软的.NET蓝图和SUN ONE计划之间的明争暗斗吗?你知道计算机技术将向何处发展吗?其实从各大计算机厂商最近的动作,都可以看出来“Web服务将是下一代互联网应用的制高点”,而微软的.NET蓝图和SUN ONE计划的斗争焦点,也就是Web服务。Web服务就是一个崭新的分布式计算模型,它是一系列标准的综合(XML,SOAP,UDDI,WSDL和WSFL等)。它使得不同语言编写的软件能够轻易的集成起来,使网络资源和Web站点变成一种服务而不是混乱的垃圾场。不远的将来,我们就可以在家里点击一下鼠标,就可以完成出门旅游的全部准备工作,包括定飞机票,定旅游线路,定好房间等。请注意,这所有的一切都是Web站点间自动完成的,再也不用象现在一样,表面上是电子商务,实际上很多环节都是人工操作。也许你会觉得这是天方夜谈,不过就近的说,你也很有可能承接一个项目,要集成两个企业的ERP系统。很有可能上游企业的系统是用Dephi编的,而下游企业的系统是用Java编的。你说你是Java高手,大家都看者你怎么做呢。所以啊,你还得学习新技术,如Web服务,而且你Dephi也要懂一点吧(Dephi6现在已经提供Web服务的控件了)。你编的Java系统,可能要和.NET集成,所以你.NET要懂一点吧?到最后,你可能发现你已经成为Java高手了,但很多时间却在搞别的技术。太极张三丰里说,最厉害的招式就是没有招式,可能就是这个道理吧!
因为刚刚兴起,所以网上Web服务的资料不是很多,我还是给大家推荐几个网站吧: 中国UDDI技术联盟http:///developerWorks/cn/xml/index.shtml?csdnIBM可是Web服务的力推者
呜„你费劲千心万苦,总算成为Java高手了,怎叫人不由喜极而泣呢!是啊,真不容易,真不简单,真叫人感动啊!那么打个电话告诉我吧,什么?我的电话号码是多少?昏到,你打电话问不就知道了吗,真是的„„
第五篇:黑马程序员java培训就业班笔记:day05总结
Day05 上午:
1、数组的静态初始化
多种定义格式:
Int[] arr=new int[]//标准格式,可以明确数组的数据类型,和数组名,但是不知道数组的长度
Int arr[]=new int[] Int[] arr=new int[]{2,1,3,4,5,}//通过大括号可以标示出数组中的内容,此处最好别写长度,因为容易出错,因为即初始化实体,又初始化实体中的元素。
Int[] arr={2,1,3,4,5};//可以明确数组的数据类型,和数组名,也可以知道数组中的内容。
2、arr.length:方便获取数组中的元素个数的方式。
3、操作数组的最基础的思想以及核心思想:
a)最基础的思想:就是遍历。什么是遍历。
Eg:int[] arr = new int[3];int[] arr = {4,8,9,2,6,9};//明确了数组的类型和长度,并明确了数组中元素的内容。
// int[] arr1 = new int[]{4,8,9};//方便获取数组中的元素个数的方式,可以使用数组实体一个属性。length System.out.println(“len:”+arr.length);
for(int x=0;x if(x%2==1) System.out.println(“arr[”+x+“]=”+arr[x]);//arr[0] = 4;} 这就是遍历的思想,获取数组中的元素,通常会用到遍历。 b)核心思想:就是操作数组中元素的角标,角标即索引,因为存数据的最终目的就是取出数据使用,就是操作角标,操作动作: 1、给数组角标上的元素赋值,2、获取角标上元素的值,存储都得用角标 4、数组中常见的操作: a)获取最值: 思路: 1、首先我们要定义一个功能完成获取数组中最大值的动作; 2、定义个函数来实现这一功能;明确结果,整数数组中的最大值,int,明确是否有未知内容参与运算,参数列表中有一个参数,数组类型int[],一定要注意这里是数组类型,不是int型; 3、如何实现功能细节呢? 1、对数组中的元素进行比较,将比较后比较大的值进行记录,并参与下一次比较,当数组中的元素都比较完成后,最大值就已经被记录下来了。 2、每次比较的较大的值不确定,定义一个变量进行记录,该变量如何初始化呢?只要初始化为数组中的人一个元素即可。 3、应该让数组中的元素自动和该变量记录的元素进行比较,所以可以使用遍 历,获取数组中的每一个元素。 4、当遍历到元素比较变量中的记录的元素大,用该变量记录住更大的元素。 5、遍历结束后,变量存储就是数组中的最大值。实现代码:eg: Public static int getMax(int arr){ /.定变量记录较大的值; Int max=arr[0];//初始化数组中的任意个元素; //对数组进行遍历比较 For(int x=1;x Max=arr[x];} Return max;} 同样有另外一种方式获取最大值 Public static int getMax(int[] arr){ Int maxIndex=0;//初始化为数组中一个元素的角标 For(int x=1;x maxIndex=x;} Return arr[maxIndex];} b)排序: 1、选择排序: 首先通过数组中元素的比较方式来分析: 用数组中第一个角标的元素与数组中第二个角标的元素进行比较,发现9比6大,进行位置置换,此处应该定义一个三方变量,用来记录住置换过程的元素值,然后再用第一个角标的元素与下一个角标元素进行比较,按照全面的原则进行置换位置,如果前者小于后者,则不置换位置,一次比较,当第一轮结束之后第一个角标出能取的该数组中最小的元素的值,然后再用第一个角标的元素开始和下一个角标的元素进行比较,同理,当第二轮结束后,第二个角标处获取了该数组中的第二小的值。所以我们发现当依次这样比较下去,就可以对数组中的元素进行排序,当比较到arr.length-1元素时,发现只剩下这一个元素,没有其他元素和它进行比较了。思路: 1、首先定义一个功能函数对数组进行排序,2、明确结果,没有返回值,因为它只是对数组进行排序的一个动作,明确是否有未知内容参与运算,有,数组类型int[] arr 实现代码: Public static void selectSort(int[] arr){ For(int x=0;x if(arr[x]>arr[y]){ Int temp=arr[x];Arr[x]=arr[y];Arr[y]=temp;} } } } 优化后的选择排序: 从上面的排序图中我们可以知道,对数组中元素进行置换位置的次数过多,也就是对堆内存的操作频繁,降低了性能,下面我们可以通过这种方式对性能优化。 思路: 在栈内存中我们定义两个变量,分别用来记录较小的元素的值和较小元素的角标,然后对其进行初始化,至于初始化的值只要是数组中的任意元素即可,然后拿数组中的元素与它进行比较,如果发现拿去比较的元素比变量中记录的数值要小,那么就进行位置置换,并记录下较小的元素的角标,依次把数组中的元素遍历完,就可以获取数组中的最小元素的值和角标,然后我们拿初始化的值和获取的最小的元素进行位置的置换,这样以来当我们获取了数组中的元素的最小的时候,堆内存中的只用操作一次位置即可,这样的就提高性能。实现代码: Public static void selectSort_2(int[] arr){ For(int x=0;x Num=arr[y];Index=y;} If(index!=x){ int temp = arr[x];arr[x] = arr[index];arr[index] = temp; } } } 注意:复习的时候添加注释 2、冒泡排序: 首先通过排序方式来分析其步骤: 通过排序方式,可以知道是用数组中的元素挨个比较,如果前面的元素的值比它下一个角标的元素大,则进行位置置换,然后再用第二个角标的元素与下一个角标的元素进行比较,同样如果下一个角标的元素比它小,则进行位置置换,这样当比较到arr.length-1个元素时已经没有 和它进行的比较的元素了,当第一轮比较结束后,我们可以知道最后一个角标的元素为该数组中的最大值,按照同样的原理进行下一次比较,依次获取了比较大的元素的值。 实现代码: Public static void bubbleSort(int[] arr){ For(int x=0;x If(arr[y]>arr[y+1]){ //位置置换 } } } } c)折半查找: 首先分析数组元素的查找方式: 首先要明确数组时有序的。 首先定义三个变量min、mid、max分来用来记录最小角标、中间角标、最大角标,中间角标的获取为(min+max)/2;获取中间角标之后,就可以获取中间角标对应的元素arr[mid];用我们所需要查找的key与中间角标运算进行比较,如果key>arr[mid];那么此时min的位置就是mid的下一个角标,min=mid+1;然后再次获取中间角标的元素,mid=(min+max)/2,同时也获取了中间角标对应的数组元素,arr[mid],然后同理,拿key与中间角标的元素进行比较.同样的原则,依次比较,直到key==arr[mid]的时候获取key.如果当出现了min>max或者时候则说明我们要查找的key在该数组中布存在,return-1; 实现代码: Public static void binarySearch(int[] arr int key){ Int min,mid,max;Min=0;Max=arr.length-1;Mid=(min+max)>>1//相当于/2,右移的效率比它要高 While(arr[mid]!=key){ If(key>arr[mid])Min=mid+1;Else if(key Min=mid-1;If(max Return mid;} 注意:复习的添加代码注释 总结:折半查找也称二分查找,这种查找可以提高效率,但是被查找的数组的额元素必须是有序的。不能对无序的数组进行排序后再用折半查找,因为这时候数组中元素的角标已经发生变化了。 5、查表法思想: a)什么时候使用查表法? 当元素很多,而且这些元素与数组有对应关系,而且这些数字都有角标的规律的时候。 扩展:什么时候使用数组? 当同一类型的元素较多时,就使用数组这个容器对数据进行存储。b)查表法思想的代码体现: 0 1 2 3 4 5 6 7 10 11 12 13 14 15 '0', '1', '2', '3', '4','5', '6',' 7', '8', '9','A',' B', 'C' ,'D', 'E' ,'F' 我们发现十六进制中一共有16个元素,而且每通过&15获取的数字都再15之内,都有对应的十六进制元素,而且元素对应的数字正好有规律,而且符合了数组这种容器的特点角标,那么可以将十六进制的元素都存储到数组中,将每次&15的结果作为角标去查这个数组,就可以获取到十六进制的对应的元素。这就是查表思想。 代码体现: Public static void searchList(int num){ //定义一个十六进制的元素表 Char[] arr={'0', '1', '2', '3', '4','5', '6',' 7', '8', '9','A',' B', 'C' ,'D', 'E' ,'F'};//定义一个char类型元素的数组,用于存储每次获取到的十六进制值。Char[] chs=new char[8];Int pos=chs.length;While(num!=0){ Int temp=num&15;Chs[--pos]=arr[temp];Num=num>>>4;} For(int x=pos;x 通过上面我们可以知道那么是否可以定义这样的一个功能函数呢?用来对十进制、二进制、八进制、十六进制进行转换? 思路: 1、明确结果,没有返回值,只是对给定的数据转换的功能。 2、明确是否有未知内容参与运算,有,是什么?求的数值num,十六进制是&15,八进制是&7,二进制是&1,那么&的这个是不确定的,我们定义为变量 base,当这个数值通过&上这些数据后,要取出后面的数值,我们通过右移来实现,但是各个进制的不一样右移的位置数也是不一样的,十六进制是无条件右移四位,八进制是无条件右移三位,二进制是无条件右移1位,所以这个数也是不确定的,定义变量 offset 实现代码: //十进制--二进制 public static void toBin(int num){ trans(num,1,1);} //十进制--八进制 public static void toOctal(int num){ trans(num,7,3);} //十进制--十六进制 public static void toHex(int num){ trans(num,15,4);} Public static void trans(int num,int base,int offset){ If(num==0){ Sop(0);;Return;} //定义一个十六进制的元素表 Char[] arr={0', '1', '2', '3', '4', '5', '6', ' 7', '8', '9', 'A',' B', 'C' ,' D', 'E' ,'F'};Char[] chs=new char[32];Int pos=chs.length;While(num!=0){ Int temp=num&base;Chs[--pos]=arr[temp];Num=num>>>offset;} For(ingt x=pos;x System.outr.println(chs[x]);} } 注意:复习的添加代码注释。 这一章节自己还不是很熟悉,能理解,但是不能独立写出代码,在以后的几天内要每天都要一遍,并自己独立写出代码,做到思想理解透彻。先要产生一天的宏观思想。复习方法: 首先总结当天学习的方法。遇到不会的先放到一边。每天晚上睡着觉之前要回忆一遍。