每天一博文,天天学java
请关注我:http://www.softfactory.cn 软工厂--软件代码自动化生成工具
视频教学地址:http://www.tudou.com/programs/view/tAkuLYrXxOw/
http://v.youku.com/v_show/id_XNTM2NTQ0ODMy.html
研讨QQ群:群1:228020776 群2:71629876
天天学java--第一章:javaSE的基础知识!!!!
整个JAVA SE的课程基本上算是核心的基础部分,一共有以下四个部分为重点的学习:面向对象、JAVA集合框架、JAVA IO编程、JDBC(Java数据库连接操作)。
对于Java的学习有以下几个层次:
· 重点的知识:面向对象、基本类库、IO、集合、JDBC;
· 理解性的知识:JDK 1.5所提供的各个新特性;
· 了解:多线程、网络编程。
JAVA SE一共分为三大部分:JAVA SE的基础部分、JAVA SE面向对象部分、JAVA SE的应用部分。
认识java!
Java是一门编程语言,更重要的是一门面向对象的编程语言,而且已经逐步成为了行业的开发标准,现在许多新的开发技术都是使用Java包装了系统低层的代码以方便用户的开发,可以说Java是现在最广泛使用的一种语言。
Java的发展要从1991年的GREEN项目开始,当时GREEN项目就是一种现代被称为嵌入式开发的项目,主要的功能是利用email进行家电运行的一种控制项目,当时SUN公司的开发人员原本是打算使用C++进行项目的开发,但是后来由于C++的复杂性,所以SUN的技术人员就使用了C++开发出了一个新的平台 —— OAK(橡树),但是后来这个平台与网景公司的SGL平台进行项目的竞争,那么结果以失败告终,所以OAK平台基本上就无用,属于死亡状态,但是后来SUN公司的技术人员又开始向网景公司学习浏览器技术,后来推出了HotJava的浏览器,后来再到了1995年的时候正式的推出了JDK 1.0开发平台,而且将OAK正式的重新命名为Java(南美洲的一种咖啡)。
在1998年的时候,JDK之中增加了许多轻量级的组件,从而将Java更名为Java 2,实际上就是JDK 1.2版本。
后来到2005年,正好是Java十周年大会的时候,SUN公司推出了JDK 1.5,此版本也是现在为止最稳定的一个版本。
推出Java的公司是SUN公司,SUN公司的全称是:斯坦伏大学网络,斯坦伏大学里面出了许多的比较有影响力的人物,例如:HP两个老总(Hewlet、Packed),投资了536美金自己开办了一个工厂,这个就是HP的前身,在1976年的时候HP公司的一个工程师:沃滋尼阿克自己研究出了世界上第一台个人电脑(PC),当时HP两个老总都没有采纳这个新的技术,但是后来被一个男的发现:乔布斯,在1976年的时候,Apple公司成立了,在80年代的时候苹果电脑开始疯狂销售,但是乔布斯这个人属于近似于疯狂的那种自恋狂,所有人的意见他都不听,后来在90年代被Apple开除了,他又开始收购了两家公司:皮克斯、NEXT,并且与迪斯尼合作推出了第一部动画片:玩具总动员,后来又凭借这一系列的总动员:超人总动员、海底总动员、汽车总动员,而且当时适逢Apple公司基本上是属于濒临破产的公司,但是这个时候Apple又将乔布斯请回了苹果公司之后,在1998~2000年之间苹果首先和SONY进行竞争,音乐市场,后来在2005年之后又开始抢夺是后机市场,IPHONE出现了,而且他采用的是与美国电信联合的形式。斯坦伏大学里还有一个比较厉害的人物 —— 杨致远,YAHOO的创始人,YAHOO是在90年代的时候做的最好的一个搜索引擎,而且其发展的势头当时也非常的好,但是后来它的市场的开始被分隔了,GOOGLE。但是需要注意的是,SUN公司本身不是依靠软件出名的,是依靠卖硬件出名的,SUN公司最早是买小型机的服务器,这个服务器被AMAZON所使用了,但是后来由于到了2001年的互联网风暴,SUN公司一下子就完了,属于始终的赔钱状态,所以后来一开始打算被IBM,后来实际被Oracle收购了,IBM之所以要收购SUN公司,是有前提的,因为SUN公司没有使用Java赚到钱,而IBM使用Java赚了不少,而且IBM的一套商用体系:Websphere,就是利用Java开发的。但是后来由于价钱没有谈好了,被Oracle以迅速的手段收购,收购之后这个市场的格局就改变了。这样的话,整个市场上就只有三家公司有编程语言:Mircrosoft、Oracle、Adobe。
在1998年的时候,JDK之中增加了许多轻量级的组件,从而将Java更名为Java 2,实际上就是JDK 1.2版本。
后来到2005年,正好是Java十周年大会的时候,SUN公司推出了JDK 1.5,此版本也是现在为止最稳定的一个版本。
推出Java的公司是SUN公司,SUN公司的全称是:斯坦伏大学网络,斯坦伏大学里面出了许多的比较有影响力的人物,例如:HP两个老总(Hewlet、Packed),投资了536美金自己开办了一个工厂,这个就是HP的前身,在1976年的时候HP公司的一个工程师:沃滋尼阿克自己研究出了世界上第一台个人电脑(PC),当时HP两个老总都没有采纳这个新的技术,但是后来被一个男的发现:乔布斯,在1976年的时候,Apple公司成立了,在80年代的时候苹果电脑开始疯狂销售,但是乔布斯这个人属于近似于疯狂的那种自恋狂,所有人的意见他都不听,后来在90年代被Apple开除了,他又开始收购了两家公司:皮克斯、NEXT,并且与迪斯尼合作推出了第一部动画片:玩具总动员,后来又凭借这一系列的总动员:超人总动员、海底总动员、汽车总动员,而且当时适逢Apple公司基本上是属于濒临破产的公司,但是这个时候Apple又将乔布斯请回了苹果公司之后,在1998~2000年之间苹果首先和SONY进行竞争,音乐市场,后来在2005年之后又开始抢夺是后机市场,IPHONE出现了,而且他采用的是与美国电信联合的形式。斯坦伏大学里还有一个比较厉害的人物 —— 杨致远,YAHOO的创始人,YAHOO是在90年代的时候做的最好的一个搜索引擎,而且其发展的势头当时也非常的好,但是后来它的市场的开始被分隔了,GOOGLE。但是需要注意的是,SUN公司本身不是依靠软件出名的,是依靠卖硬件出名的,SUN公司最早是买小型机的服务器,这个服务器被AMAZON所使用了,但是后来由于到了2001年的互联网风暴,SUN公司一下子就完了,属于始终的赔钱状态,所以后来一开始打算被IBM,后来实际被Oracle收购了,IBM之所以要收购SUN公司,是有前提的,因为SUN公司没有使用Java赚到钱,而IBM使用Java赚了不少,而且IBM的一套商用体系:Websphere,就是利用Java开发的。但是后来由于价钱没有谈好了,被Oracle以迅速的手段收购,收购之后这个市场的格局就改变了。这样的话,整个市场上就只有三家公司有编程语言:Mircrosoft、Oracle、Adobe。
Java技术本身也是存在以下几个分支:
· J2SE(在2005年之后更名为JAVA SE):是一个标准的开发平台,如果安装了JDK,则自动的支持此平台的开发,而且提供了最底层的支持;
· J2ME(在2005年之后更名为JAVA ME):是进行手机的嵌入式开发的,嵌入式的开发是JAVA最早的功能,但是遗憾的是,现在所谓的J2ME的开发都是针对于游戏的;
· J2EE(在2005年之后更名为JAVA EE):是JAVA的企业版本,提供了企业平台的搭建。
这三种技术实际上如果要想归纳的话,只能说是在JAVA SE上的一种扩展而已,因为所有的JAVA EE、JAVA ME也好其必须都在JAVA SE的基础之上才能够进行开发,所以JAVA SE为整个课程之中最重要的部分。
Java本身除了以上的技术之外,也有如下几个主要的特点:
· Java的程序可以在任意的平台间移植;
· Java语言足够简单,而且学会了Java,基本上各个语言都一样了;
· 自动的垃圾收集机制及内存的释放机制可以保证程序更加健康的运行;
· 避免了C或C++之中复杂的指针部分,而使用了更加容易理解的引用方式完成这种内存的操作;
· Java本身支持多线程的开发,可以更好的提升程序的操作性能。
java的可移植性!
在java的开发之中有一句话:“一次编写,处处运行”,但是此话在若干年前被人修改为:“一次编写,处处调试”,因为当时的技术的推广环境问题,因为许多的版本不统一才会造成此类的问题;
Java之所以发展其主要是依靠了可移植性,所谓的可移植性指的是同样的程序可以在不同的操作系统之间任意的移植,而不需要任何的修改。
使用C/C++开发出来的许多程序都必须绑定在特定的操作系统上才可以执行,而Java不用,只需要一个程序和一个JVM(Java虚拟机)就可以在不同的操作系统间移植并运行程序。
可移植性靠的就是不同操作系统的JVM的支持所完成的,而且一定要记住的是,Java语言是属于解释型和编译型两种形式,即:所有的源程序(*.java)必须编译之后(*.class)这样才可以执行,而且每次修改源程序之中,都必须重新编译之后才可以正常执行。
java的开发环境搭建!
Java的开发要使用JDK进行,本次为了方便使用的是JDK 1.6的版本,但是必须注意的是,此版本依然存在BUG,现在最稳定的是JDK 1.5,而且JDK 1.6与JDK 1.5相比没有太多的变化,只能算是个单调的加强版而已。
安装JDK的时候一定要将防火墙关闭。
现在的JDK本身提供的是多国语言版,支持不同国家的语言,但是为了更加清楚的观察到错误的信息,现在将语言环境修改为英文,【控制面板】 à 【区域及语言选项】。
以后显示的信息就是全部都是英语了。
安装完成之后,下面需要进行配置,因为java的开发之中需要两个主要的操作命令:java.exe(解释程序)、javac.exe(编译程序),这两个命令的目录:D:\Java\jdk1.6.0_11\bin
但是在windows中这两个命令本身并不存在,如果要想在命令行之中使用这两个命令,则必须将此路径配置到windows的path环境属性之中。
注册的步骤:【我的电脑】 à 【属性】 à 【高级】 à 【环境变量】 à 【修改path中的内容】
但是必须注意的是,在path之中原本就已经存在了许多的环境属性,为了区别开,在每个环境属性的后面使用一个“;”进行分隔。
编写第一个java程序!
下面的程序依然使用一个简单的输出操作完成,就是在屏幕上显示“Hello World!”的信息。
范例:编写Hello.java文件
public class Hello { public static void main(String args[]){ System.out.println("Hello World!!!") ; } } |
此时编写完源代码之后,下面就需要对程序进行执行,按照如下的步骤进行:
· 使用命令行方式进入到程序所在的目录之中,输入:javac Hello.java,此时将形成*.class文件;
· 使用命令行方式执行程序,输入:java Hello,执行Hello.class文件。
但是在执行程序的时候有可能出现如下的问题:
xception in thread "main" java.lang.UnsupportedClassVersionError: Hello (Unsupported major.minor version 50.0)
此时的错误提示信息是:“UnsupportedClassVersionError”,不支持的类版本错误,之前安装的时候配置的是JDK 1.6,编译的命令肯定也是使用的是JDK 1.6,那么执行的时候也应该是JDK 1.6,下面观察一下程序的执行版本:java -version
java version "1.4.2_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)
Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)
这个时候的提示信息是JDK 1.4,但是明明现在配置的是JDK 1.6,这个JDK 1.4的信息是Oracle提供的,因为Oracle安装完成之后实际上就已经存在了JAVA的执行环境了,在oracle目录中存在了jdk,而且在path中观察存在如下信息:
D:\oracle\product\10.1.0\db_1\jre\1.4.2\bin\client;
D:\oracle\product\10.1.0\db_1\jre\1.4.2\bin;
因为存在这样的环境属性所以导致最终使用的时候,使用的都是oracle的jre进行程序解释的,那么此时最直接的解决方式有两种:
· 第一种:将oracle中的jre的配置信息取消掉,直接删除;
· 第二种:将最新的配置信息写在所有配置的最前面。
第一种方式太过霸道所以使用第二种形式。
第一个程序的解释!
以上的程序是一个基本的程序的开发结构,在所有的java程序之中,所有的代码都必须放在一个类里面,所以类的定义格式:
[public ]class 类名称{}
本程序定义的就是一个Hello的类,而且只要是类的命名一定要记住了,所有单词的首字母必须采用大写的形式完成,而且类本身有两种定义格式:
· public class定义的类:文件名称与类名称必须保持一致,在一个java文件之中只能存在一个public class;
· class定义的类:文件名称可以与类名称不一致,可以在一个java程序之中定义多个class,而且编译之后会自动分为不同的*.class文件。
任何的程序都是由主方法开始执行的,主方法的结构如下:
public static void main(String args[]){
编写具体的代码 ;
}
如果要想向屏幕上进行内容的输出,则可以使用如下语句:
System.out.println("Hello World!!!") ; |
此时输出的信息是字符串,所以使用“"”括起来,而且这条语句之中存在了一个“ln”,表示的是输出之后继续进行换行的操作。
classpath环境属性!
在java程序运行的时候,依靠的是JVM,在JVM之中存在一个classpath的环境属性,这个环境属性主要是用于进行类路径的指定。
如果现在在d:\testjava文件夹之中存在了Hello.class文件,那么程序运行的时候如果在此目录之中,则可以直接运行,那么如果现在要是更改了目录呢?这个时候肯定无法执行,出现:“NoClassDefFoundError”,如果现在要想在不同的目录之中执行d:\testjava\Hello.class文件的话,则就需要使用classpath指定路径。
SET CLASSPATH=D:\testjava |
表示,以后无论在任何目录之下,肯定都使用d:\testjava路径为*.class文件的查找路径,但是这样做明显很不方便,因为在执行*.class文件的时候在当前所在的文件夹之中执行才是有意义的,所以往往默认的设置是将当前所在的目录列为查找的路径,此时,可以将classpath设置为“.”。
SET classpath=. |
以后都从当前所在的文件夹之中查找所需要的类文件,这个也就是默认的一种配置,有时候为了方便也会自动的在环境属性之中进行注册,建立一个CLASSPATH的环境项。
实际上这个时候也可以发现,JVM执行程序的流程:
· java.exe à 启动JVM à 通过JVM设置的classpath找到所需要的*.class文件。
语言的注释和标识符!
在Java语言之中的注释一共有三种:
· 单行注释://
· 多行注释:/*….*/
· 文档注释:/**…*/
任何语言的组成都由基本的标识符所组成,在Java之中标识符的命名规则如下:由字母、数字、_、$所组成,其中不能以数字开头,不能是java中的保留字。
数据类型!
Java本身也是由各个数据类型所组成,这些数据类型一共有两大类:
第一类:基础数据类型
基础数据类型又分为:(1)数值型:整数类型(byte.short,int,long)浮点类型(float,double)(2)字符型(char)(3)布尔型(boolean)
第二类:引用数据类型(1)类(class),接口(interface),数组。
由于引用数据类型本身牵扯到内存的划分问题,所以先观察基本数据类型,每种数据类型都有其自己的取值范围。
对于第8种数据类型:boolean,只有两种取值:true(真)、false(假),而不能像C语言那样,使用0表示false,使用非0表示true。
在开发之中使用最多的数据类型:int、double、char、byte。
整型数据:
整型数据一共有四种:byte、short、int、long四种,如果在一个程序之中默认定义一个数字的常量,则类型就是int。
public class Demo { public static void main(String args[]){ int x = 10 ; // 定义int型的变量 int y = 20 ; // 定义int型的变量 System.out.println(x + y) ; // 两个int型数据相加 } } |
在数据类型之中也是存在着数据的转型操作,例如:将byte型变为int型,或者将int型变为long型等等,这里面存在以下的两种转换形式:
· 强制转换:有大范围的数据类型变为小范围的数据类型,例如:long à int;
· 自动转换:由小范围的数据类 型变为大范围的数据类型,例如:byte à int;
范例:观察自动转换
public class Demo { public static void main(String args[]){ byte b = 20 ; // 20在byte范围之中 int x = b ; // 扩大数据类型 System.out.println(x * x) ; } } |
范例:观察强制转换 —— 按照数据量转
public class Demo { public static void main(String args[]){ long l = 30L ; // 直接将30变为long int x = (int)l ; // long的范围大于int范围,强制转换 System.out.println(x) ; } } |
由于30正好是int可以承受的容量,所以这种转换不会出现问题。
范例:强制转换 —— 数据较大
public class Demo { public static void main(String args[]){ long l = Long.MAX_VALUE - 30 ; // 设置Long的最大值 int x = (int)l ; // long的范围大于int范围,强制转换 System.out.println(x) ; } } |
这个时候发现由于long的数据较大,已经超过了int型的承受的范围,所以最终的结果出现了负数,这种情况在Java之中称为数据的溢出,当某个操作的数据已经超过了变量本身范围的时候就会发生溢出。
public class Demo { public static void main(String args[]){ int max = Integer.MAX_VALUE ; // 求出整型最大值 int min = Integer.MIN_VALUE ; // 整型最小值 System.out.println(max) ; System.out.println(min) ; System.out.println(max + 2) ; // 最大值 + 1 System.out.println(min - 2) ; // 最小值 - 1 } } |
所谓的数据溢出指的是由于数据容量超过了原本支持的容量,所以最大值如果再增加则就变成了最小值了,而如果最小值如果再减少,则就变成了最大值,这样一直循环下去了。
所以,当发现大数据向小数据转换的时候就必须考虑到这种数据溢出所带来的问题,当然如果要想解决此类问题,则必须扩大范围,如果两个操作的数据之中,有一个范围较大,则范围较小的数据会自动转换为较大的数据类型。
System.out.println((long)max + 2) ; // 最大值 + 1 |
面试题:要求说出如下程序的运行结果。
public class Demo { public static void main(String args[]){ System.out.println(1l + 12) ; } } |
整数操作之中int使用的是最多的,而且默认的类型也是int。
浮点数据!
浮点型指的就是小数,对于浮点型有两种类型:float、double,所以double可以保存下全宇宙之中最大的数字,如果一个默认的小数,则类型就是double型的数据。
public class Demo { public static void main(String args[]){ double x = 10.3 ; // 小数默认就是double型数据 System.out.println(x * x) ; } } |
如果现在假设要想使用float定义小数类型的话,则必须使用强制转换。
public class Demo { public static void main(String args[]){ float x = 10.3F ; // 小数默认就是double型数据 System.out.println(x * x) ; } } |
另外,所有的数据类型只要是位数少的数据类型会自动的向位数大的数据类型转换,如果现在假设int和double操作,那么肯定会自动的将int型的数据变为double型的数据。
public class Demo { public static void main(String args[]){ int x = 100 ; double y = 10.9 ; System.out.println(x * y) ; } } |
但是在使用int型操作的时候也有一些地方需要注意,因为int保存的是整数,所以里面所有的内容,包括计算除法之后的数字也只是保留整数位,为了保证程序计算的精确度,所以这种情况下可以将一个类型变为double或float。
public class Demo { public static void main(String args[]){ int x = 10 ; int y = 3 ; System.out.println(x / y) ; System.out.println(x / (float)y) ; // 可以保留小数 System.out.println(x / (double)y) ; // 可以保留小数 } } |
字符型数据!
字符型使用的是char进行声明,字符型的数据需要使用“'”括起来。
public class Demo { public static void main(String args[]){ char c = 'A' ; // 定义字符型数据 System.out.println(c) ; } } |
字符型数据在程序之中是可以与int型数据进行自动的转换的,即:char à int。
public class Demo { public static void main(String args[]){ char c = 'A' ; // 定义字符型数据 int x = c ; // 将char --> int x ++ ; // 修改x的内容 c = (char) x ; // 将int --> char System.out.println(c) ; } } |
此类操作如果在C语言之中,则是按照ASC II码进行转换的,但是在Java之中,并不存在ASC II码,java语言中使用的是UNICODE编码,UNICODE可以包含实际上所有的文字,而且使用的是十六进制的编码,而在java之中为了照顾到人员的开发习惯,所以UNICODE里面融合了ASC II码。
在字符之中还存在着许多的转义字符:\"、\'、\\、\t、\n之类的。
public class Demo { public static void main(String args[]){ System.out.println("\"Hello World\"") ; System.out.println("\tHello World\\") ; System.out.println("Hello\nWorld") ; } } |
面试题:一个char型的变量之中能否将内容设置为中文?
public class Demo { public static void main(String args[]){ char c = '李' ; int x = c ; System.out.println(c) ; System.out.println(x) ; } } |
可以设置为中文,但是必须在中文语言环境之下,因为UNICODE编码是十六进制的编码,可以包含任意的文字。
布尔型数据!
布尔实际上是一个数学家的名字,最著名的就是两个单词:true、false,布尔型的数据主要是作为程序的流程控制使用的,常用于各种判断语句之中。
public class Demo { public static void main(String args[]){ boolean flag = true ; if(flag){ // flag==true System.out.println("Hello World !!!") ; } } } |
初见String!
之前强调过,只要是开头首字母大写的单词表示的都是类,在Java之中专门针对于字符串提供了一种类型:String,但是String可不是基本数据类型,而是引用数据类型,只是这个类的使用较为特殊而已。
public class Demo { public static void main(String args[]){ String str = "Hello World !!!" ; System.out.println(str) ; } } |
这种操作的流程与之前的任何数据类型相比都是一样的,而且在数值的计算上使用“+”表示两个数字进行加法操作,而在String上表示的是字符串的连接。
public class Demo { public static void main(String args[]){ String str = "Hello" ; str = str + " World" ; str += " !!!" ; System.out.println(str) ; } } |
任何的数据类型碰上String之后都自动的向String型数据转换。
public class Demo { public static void main(String args[]){ int x = 10 ; int y = 20 ; System.out.println("计算结果:" + x + y) ; } } |
public class Demo { public static void main(String args[]){ int x = 10 ; int y = 20 ; System.out.println("计算结果:" + (x + y)) ; } } |
以后String会有更多的讲解,现在先知道其使用即可,一定要记住,String的内容必须使用“"”括起来。
数据的使用的注意点和默认值!
在使用变量之前肯定是需要进行定义的,但是在定义变量的时候一定要设置好一个默认值,现在有如下两个程序进行一下比较:
public class Demo { public static void main(String args[]){ int x ; // 定义变量 x = 10 ; // 为变量赋值 System.out.println(x) ; } } |
但是,这种程序在JDK 1.4之前都是错误的,在JDK 1.4之前只要是变量定义了,则变量必须给出一个默认值来,虽然每种数据类型本身都存在默认值,但是这种默认值是不存在的,而且以上的代码如果修改为以下形式也是错误的:
public class Demo { public static void main(String args[]){ int x ; // 定义变量 System.out.println(x) ; } } |
这个时候x变量只是声明而并没有具体的内容,那么此种情况下代码无法编译通过。
每种数据类型都会存在默认值,所以以上给出了八个基本数据类型的默认值,但是这些内容只需要了解即可,因为在变量定义的时候一定要给出默认值。
而且引用数据类型的默认值都是null。
以上课题由北京MLDN培训机构提供,欢迎同学咨询,学java到MLDN,李兴华名师任教!联系电话:010-62350411
posted on 2013-06-21 09:36 soft_factory 阅读(188) 评论(0) 编辑 收藏 举报