java学习笔记.docx
《java学习笔记.docx》由会员分享,可在线阅读,更多相关《java学习笔记.docx(13页珍藏版)》请在冰豆网上搜索。
java学习笔记
Java发展到现在,安应用主要分为三大快
1、J2SE(Java2StandardEdition)
这是Java2的标准版,主要用于桌面应用软件的编程,和VC,VB,Dephi相比并没有什么优势
2、J2ME(Java2MicroEdition)
主要用于嵌入式系统开发,如手机和PDA的编程
3、J2EE(Java2PlatformEnterpriseEdition)
Java2的企业版,主要用于分布式的网络程序开发,如电子商务网站和ERP系统。
J2EE包含许多组件,比如Jsp、Servlet、JavaBean、EJB、JDBC等。
Java平台由两大部分组成:
Java虚拟机(JVMJavaVirtualMacthine)和Java应用编程程接口(JavaApplicationProgrammingInterface)API
JDK为JavaDevelopmentKit(Java开发工具包)的缩写,包括运行环境、编译工具及其它工具、源代码等;JRE为JavaRuntimeEnvironment(Java运行时环境)的缩写,即运行Java程序所必须的环境的集合。
Java语言程序有“一次编写,重复使用”的特点。
面向对象编程(OOP)将数据和方法封装在对象中;对象的数据与方法紧密联系在一起。
Java程序员创建它们自己的数据类型,称为类。
构造方法和类同名,在实例化该类对象时,它用于初始化该对象的实例变量。
构造方法可以有参数,但不能指定返回值类型。
在创建一个对象时,new运算符为该对象分配内存,然后调用类的构造方法以初始化该对象的成员变量。
如果没有构造方法,编译器会自动创建一个默认的构造方法。
代码书写规范
1、类(Class)采用完整的英文描述,所有单词的第一个字母大写如CustomerTest
2、变量名firstName、lastName。
3、静态常量字段(staticfinal)全部采用大写字母,单词之间用下划线分隔。
MIN_BALANCE
4、普通成员函数采用完整的英文描述说明函数的功能,第一个单词小写,如openFile()
5、如果是boolean型则可用is前缀如isString()
6、代码的书写格式也要注意规范
标识符命名规范
Java语言规定标识符由字母、下划线、美元符号和数字组成,并遵循如下规则:
1、区分大小写
2、不能以数字开头
3、以字母、下划线_或$开头
4、不能使用Java关键字开头
Java支持3种注释
1、//单行注释
2、/**/多行注释
3、/***/文档注释
Java的基本数据类型
@逻辑类型:
boolean
@字符类型:
char
@整数类型:
byte、shot、int、long
@浮点类型:
double、float
类型转换:
1)把低精度转换为高精度时,系统会自动完成类型转换
2)把高精度转换为低精度时,需要强制类型转换
&&短路与(逻辑与)x&&y当x,y都真时表达式x&&y才为真
||短路或(逻辑或)x||y当x,y有一个为真时表达式x||y就为真
&按位与是双目运算。
其功能是参与运算的两数各对应的二进位相与。
只有对应的两个二进位均为1时,结果才为1,否则为0.参与运算的数以补码方式出现。
例如:
9&5可以写成如下算式:
00001001(9的二进制补码)&00000101(5的二进制补码)=00000001(1的二进制补码)所以9&5=1
|按位或是双目运算。
其功能是参与运算的两个数对应的二进位相或。
只要对应的两个二进位有一个为1时,结果为1.参与运算的两个数均以补码出现。
例如:
9|5
00001001|00000101=00001101=13
static关键字
类中有static修饰的变量和方法叫做类的静态变量、静态方法
类的静态成员和方法不依赖类的实例,在不创建类对象的情况下就可以直接通过类名来访问,并且这些静态成员被类的所有实例共享。
多态:
方法重载
面向对象编程具有多态特征,简单的讲就是对外只有一个接口,但内部有多种实现。
方法重载就是
方法名相同,包括大小写。
方法的参数列表必须不同,就是说参数的类型,个数,顺序至少有一个不同。
编译器将参数列表的不同作为重载的判定依据。
方法的返回值类型和修饰符不能作为重载的判定依据。
构造方法也可以重载。
继承:
extends
继承是实现代码重用的一种有力手段。
如果有多个类具有一些相同的属性和方法,可以将这些相同的属性和方法抽象出来定义为一个父类,在父类中定义这些属性和方法,则具有这些属性和方法的其他类可以从这个父类派生出来,不必再重新定义这些属性和方法,我们称这些派生出来的类为子类。
子类将继承父类中所有的非private修饰的成员变量和成员方法。
private是访问控制符,被private修饰的变量和方法都只能在本类中访问。
用final修饰的变量不能被修改,用final修饰的类不能被继承。
抽象类与接口
用abstract修饰的类为抽象类。
抽象类不能被实例化
用abstract修饰的方法为抽象方法,抽象方法没有方法体,只描述功能,不提供实现。
publicabstractclassAbstractClass{
publicabstractvoidmethod();//抽象方法是没有方法体的
publicvoidmethod2(){}//具体方法必须有方法体,即使方法体为空
}
接口
接口interface比抽象类更抽象,接口中只声明方法,但不定义方法,不包含具体的方法。
接口只声明能做什么,不规定怎么做,怎么做由实现接口的类去确定。
可以认为接口就是一个行为的协议或规范。
publicinterfaceComputer{
publicstaticfinaldoublePI=3.14;
publicabstractdoublesum(doublex,doubley);
publicdoublesub(doublex,doubley);
//即使缺省abstract,系统会自动添加
}
用new创建对象,开辟对象的存储空间。
Java提供的垃圾回收机制能够自动清理无用的对象
如果类中没有定义构造方法,编译器会自动添加一个默认构造方法
若对象作为方法参数,则实参传给形参的是对象的应用,使得形参和实参指向同一个对象,对形参的修改会影响到实参
若局部变量和成员变量同名,则局部变量会屏蔽成员变量,可以用this来引用成员变量
类的静态成员有static修饰,随类加载,不依赖于类的实例。
类中可以定义多个方法名相同但参数列表不同的方法,称为方法重载。
方法重载是多态的一种体现。
继承机制允许从现有的类中派生子类,java是单继承,所有类都是直接或间接从java.lang.Object派生来
可以使用final关键字修饰变量,类和方法。
接口定义一些行为规范,实现接口的类具有这些行为规范,接口可以多继承,
Java提供了4种访问控制符:
private、default、protected、public
进制转换问题:
Integer类的toString()方法,可以将integer对象转换成十进制对象
toBinaryString()可以转换为二进制
toHexString()可以转换为十六进制
toOctalString()可以转换为八进制
例如:
StringstrHex=Integer.toHexString(20);//将十进制的20转换为十六进制
StringstrBina=Integer.toBinaryString(20);//将十进制的20转换为二进制
StringstrOct=Integer.toOcatlString(20);//将十进制的20转换为八进制
Integer类的toString()方法
Stringstr=Integer.toString(0345,2);//第一个参数为要转换的数字,第二个是转换成什么进制
intn=Integer.praseInt(“023”,8);//将八进制的023转换成八进制,输出结果只能计算对应的进制数
从控制台读取数据
charc=System.in.read();//按字节读取数据
BufferedReaderbf=newBufferedReader(newInputStreamReader(System.in));//从控制台高效的读取信息
Scannersc=newScanner(System.in);
Stringstr=sc.nextLine();
处理时间和日期
java.util.Date
Datedate=newDate();
System.out.println(date.getTime());//返回自1970-1-1以来的毫秒数
System.out.println(date);//输出当前时间
SimpleDateFormatf=newSimpleDateFormat(“yyyy-MMMM-dd-EEEE”);//设定日期输出格式
System.out.println(f.foramt(date));
SimpleDateFormatf=newSimpleDateFormat(“yy/MM/ddhh:
mm:
ss”);//另一种格式
System.out.println(f.format(date));
GregorianCalendargc=newGregorianCalendar();
Stringnow=gc.get(Calendar.YEAR)+"年"
+(gc.get(Calendar.MONTH)+1)+"月"
+gc.get(Calendar.DATE)+"日"
+gc.get(Calendar.HOUR)+"时"
+gc.get(Calendar.MINUTE)+"分"
+gc.get(Calendar.SECOND)+"秒";
System.out.println("当前时间是:
"+now);
ØMath类支持各种数学运算及其它的有关运算,Math类提供的方法都是静态的,通过类名就可以直接调用。
ØRandom提供了一系列用于产生随机数的方法。
ØDate、DateFormat和Calendar及GregorianCalendar提供了对日期和时间进行处理的方法
流的概念和基本操作
Java通过流来执行输入输出处理,流必须有源端和目的端,它可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个Url。
根据流中的数据传输方向,可以将流分为输入流和输出流
根据管道中流动的数据类型,可以将流分为字节流(以字节为单位)和字符流(以字符为单位)
根据流的建立方式和工作原理:
节点流(直接建立在输入、输出媒体上)和过滤流(过滤流必须以某一个节点流作为流的来源,可以在读/写数据的同时对数据进行处理)
InputStream和OutputStream都是字节流还有其子类也是字节流
Reader和Writer都是字符流
InputStreamin=newInputStream(“d:
/hello.java”)