java学习笔记.docx
《java学习笔记.docx》由会员分享,可在线阅读,更多相关《java学习笔记.docx(202页珍藏版)》请在冰豆网上搜索。
java学习笔记
java学习笔记
ch01:
=====================================
java
J2SE桌面应用的开发JAVASEcorejava
J2EE企业级开发JAVAEE
J2ME手机应用的开发JAVAME
SDKsoftwaredevelopmentkit软件开发包函数库或者工具等
JDKjavadevelopmentkit是面向开发人员的,java开发工具
JREjavaruntimeenviromentjava运行环境,是面向应用程序使用者的
APIapplicationprograminterface应用程序编程接口
windows下的环境变量的配置
JAVA_HOME:
JDK安装的目录路径
D:
\soft_install\jdk\jdk1.7.0_45
CLASSPATH:
类加载时候查找的字节码路径
.
PATH:
JDK安装目录里面的命令目录
%JAVA_HOME%\bin;......
JDK安装后的目录结构:
bin:
java的相关命令
javajavacjarjavadocjavapjavah
db:
java提供的数据库
demo/sample:
java代码的一些示例
include:
C语言的头文件等内容
jre:
java的运行环境
lib:
java所用的基本的jar包
java的特点:
简单性:
(相对应C和C++来讲)java不需要程序员操作内存
跨平台:
一次编译,到处运行(JVM)
多线程:
其他语言的多线程一般是系统级别的,java的多线程是语言级别的
动态编译:
(相对应C或者C++来说),在一个项目中,如果需要修改一个java文件的话,那么就修改这一个文件就行了,其他的java文件不需要动
gc
垃圾回收器:
java中有一个线程,专门负责JVM中垃圾内存的释放
垃圾:
没有引用的内存节点
垃圾回收的算法
注意:
垃圾回收有自己的算法,我们是不能控制垃圾回收机制的,虽然有和垃圾回收相关的方法:
java.lang.System.gc()java.lang.Runtime.gc(),但是还是无法控制垃圾回收机制
在ch01下面建一个文件HelloWorld.java
文件内容如下:
publicclassHelloWorld{
publicstaticvoidmain(String[]args){
System.out.println("helloworld");
}
}
写完后保存,然后到终端里面编译HelloWorld.java
注意路径:
自己的当前位置和HelloWorld.java文件所在的位置是不是一致
javacHelloWorld.java
编译完了之后,会在当前目录下,生成一个文件叫HelloWorld.class
最后我们运行的文件就是这个HelloWorld.class
这样来运行HelloWorld.class文件:
javaHelloWorld注意:
运行的时候一定不要加后缀名.class
这样运行的前提是:
XXX.java文件中没有写包(package)名
编写的java文件要以XXX.java命令
javacXXX.java(注意当前路径和java文件路径)
XXX.java(源文件)
编译完后会生成一个XXX.class(字节码文件)
运行这个java代码
javaXXX(后面不加.class)
java类名和文件名的关系:
一个java源文件(.java)中,可以有好多个类(class),但是,最多只能有一个类(class)被public修饰
如果有一个类被public修饰,那么这个源文件(.java)的名字就必须和这个被public修饰的类的名字一致,而且还要首字母大写
java文件中的三个顶级元素:
package
1.最终会是以文件夹的形式体现出来(有什么包,就必须有什么文件夹,运行的时候.class文件必须在这个文件夹下面)
2..java文件中有多个package的时候,用.分割并且结尾用;号结束例如:
(com.briup.test;)
3.包也是java中类的标识的一部分,确定某一个类是通过包名加类名来唯一确定的比如运行java类的时候:
javapackage.类名(javacom.briup.test.HelloPackage)
import
1.导包用的关键字
2.如果你想在当前这个类使用其他的类,那么就必须通过这个关键字,把那个类导入进来
3.java.lang包下面的类可以直接使用,不用导入.
4.和当前这个类位于同一个包下面的类,也不需要导入,可以直接使用
class
java中标识一个类的关键字
(java类中可以没有package,也可以没有import,但是一定会class)
编写带包名的类HelloPackage.java
packagecom.briup.test;
publicclassHelloPackage{
publicstaticvoidmain(String[]args){
System.out.println("helloworld");
System.out.println("helloworld");
System.out.print("helloworld");
}
}
直接编译javacHelloPackage.java
然后运行javaHelloPackage报错!
!
!
在当前(ch01)目录下面建立文件夹com/briup/test
然后把HelloPackage.class文件剪切到了这个test目录里面
然后在ch01目录下运行:
javacom.briup.test.HelloPackage
以上建立文件夹并且把.class文件剪切到相应的文件夹里面的操作,我们可以用命令在编译的时候实现
javac-d.HelloPackage.java
-d表示编译的同时生产和这个.java文件中定义的包名相一致的是文件夹结构,
.表示在当前目录下生产这个文件夹(这个不一定非是.也可以是其他路径)
最后编译完成后的.class文件也会自动的放进生产的文件夹里面
然后我们之间用package.类名去运行就可以了
javacom.briup.test.HelloPackage
注意:
没有main方法的类是不能直接运行的
main的形式是固定的(大体是固定,之后会看到改动一些指定地方也是可以的)
publicstaticvoidmain(String[]args){
......
}
因为main方法是程序的入口,要直接运行的那个类,类加载之后,JVM没有在这个类中找个main方法,那么就会报错
JVM只会运行*java命令后面*指定的类中的main方法(如果没有这个方法就报错)
javacom.briup.test.HelloWorld
chap02
目标:
1.标识符、关键字和类型介绍
2.如何构建类
---------------------------------
1.java代码中的注释
作用:
使部分内容只为程序员可见,不为编译器所编译、虚拟机所执行
位置:
类声明前后、方法声明前后、属性声明前后、方法体中。
几乎可以在一个源文件任意位置,但不能在一个关键字字符中插入注释
类型:
1)单行注释:
//text——从//到本行结束的所有字符均作为注释而被编译器忽略
2)多行注释:
/*text*/——从/*到*/间的所有字符会被编译器忽略
3)文档注释:
/**test*/——从"/**"到"*/"间的所有字符会被编译器忽略。
当这类注释出现在任何声明(如类的声明、类的成员变量的声明或者类的成员方法的声明)之前时,会作为JavaDoc文档的内容;
@author类的作者
@version类的版本
@param方法的参数
@return方法的返回类型
@exception方法抛出的异常
@see另外参照...
@since从什么时候开始使用的
例如:
packagecom.briup.ch02;
/**
*thisismyCommentTestClass
*@authorbriup
*@version1.0
*@sinceJDK1.7
**/
publicclassCommentTest{
//表示这个人的名字
privateStringname;
/**
*thisisaageofperson
*
**/
privateintage;
/**
*@paramname:
anameofperson
*@exceptionnull
**/
publicvoidsetName(Stringname){
this.name=name;
}
/**
*@return没有返回类型
**/
publicStringgetName(){
returnthis.name;
}
publicstaticvoidmain(String[]args){
/*
CommentTestct=newCommentTest();
ct.setName("tom");
Stringtemp=ct.getName();
System.out.println(temp);
*/
}
}
使用javadoc进行编译:
javadoc-ddocsrc/CommentTest.java
如果想显示出author和version
javadoc-ddoc-author-versionsrc/CommentTest.java
或者:
javadoc-ddoc-author-versionsrc/*.java
2.分号、代码块和空格
1)每个语句短语以;结束;
类的声明最后不需要加;
publicclassHello{....}
方法的声明最后不需要加;
publicclassHello{
publicvoidgo(){....}
}
属性的声明最后一定要加;
publicclassHello{
intid;
privateStringname;
publicintage;
publicvoidgo(){....}
}
2)代码段以{}结束;
常见的有:
类的声明后加{}
方法的声明后加{}
注意:
代码的{}后面都不加;
3)空白处(空格、tab键、新行和回车(几个语句短语连接在一起))是无关紧要的。
3.标识符
类、方法和变量的名字
1)java标识符以字母、_和$开头,不能以数字开头,后跟字母、数字、“_”和“$”的组合;
2)大小写敏感
3)没有长度限制。
4)不能是java中的关键字
举例:
合法标识符非法标识符
try1try#
GROUP_77GROUP
openDooropen-door
boolean1boolean
_intint
$intint
4.关键字
Java语言的关键字是程序代码中的特殊字符。
包括:
.类和接口的声明——class,extends,implements,interface
.包引入和包声明——import,package
.数据类型——boolean,byte,char,double,float,int,long,short
.某些数据类型的可选值——false,true,null
.流程控制——break,case,continue,default,do,else,for,if,return,switch,while
.异常处理——catch,finally,throw,throws,try
.修饰符——abstract,final,native,private,protected,public,static,synchronized,transient,volatile
.操作符——instanceof
.创建对象——new
.引用——this,super
.方法返回类型——void
Java语言的保留字是指预留的关键字,它们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关键字。
.所有关键字都是小写;
.friendly,sizeof不是Java语言的关键字,这有别于C++;
.程序中标识符不能以关键字命名;
5.基本类型:
Java语言把数据类型分为基本类型和引用类型
基本类型:
floatdoublebyteshortintlongcharboolean
引用类型:
类类型接口类型数组类型
计算机中:
1字节=8位
00000001
整数
byte8位
short16位
int32位
long64位
浮点型数据
float32位
double64位
boolean8位
char16位(java中采用unicode编码,所以是俩个字节表示一个字符,那也就是说在其他字符编码中可能不是使用俩个字节表示一个字符)
6.boolean类型
boolean类型的值为true或者false,在JVM中会转换为0或者1
0代表的是false1代表的是true
booleanflag=ture;
booleanbool=false;
7.char类型
注意:
char是字符和字符串String是不一样的
字符串String是类,而字符char是基本数据类型
字符串String是由一个一个的字符char组成的
1)字符编码
Java语言对文本字符采用Unicode字符编码。
由于计算机内存只能存取二进制数据,因此必须为各个字符进行编码。
所谓字符编码,是指用一串二进制数据来表示特定的字符。
常见的字符编码包括:
a.ASCII字符编码
ASCII--AmecianStandardCodeforInformationInterchange(美国信息交换标准代码).主用于表达现代英语
和其他西欧语言中的字符。
它是现今最通用的单字节编码系统,它只用一个字节的7位,一共表示128个字符。
b.ISO-8859-1字符编码
又称为Latin-1,是国际标准化组织(ISO)为西欧语言中的字符制定的编码,用一个字节(8位)来为字符编码,与
ASCII字符编码兼容。
所谓兼容,是指对于相同的字符,它的ASCII字符编码和ISO-8859-1字符编码相同。
c.GB2312字符编码
它包括对简体中文字符的编码,一共收录了7445个字符(6763个汉字+682个其他字符.它与ASCII字符编码兼容。
d.GBK字符编码
对GB2312字符编码的扩展,收录了21886个字符(21003个字符+其它字符),它与GB2312字符编码兼容。
e.Unicode字符编码:
由国际Unicode协会编制,收录了全世界所有语言文字中的字符,是一种跨平台的字符编码。
UCS(UniversalCharacterSet)是指采用Unicode字符编码的通用字符集。
Unicode具有两种编码方案:
.用2个字节(16位)编码,被称为UCS-2,Java语言采用;
.用4个字节(32位)编码,被称为UCS-4;
f.UTF字符编码
有些操作系统不完全支持16位或32位的Unicode字符编码,UTF(UCSTransformationFormat)字符编码能够把
Unicode字符编码转换为操作系统支持的编码,常见的UTF字符编码包括UTF-8,UTF-7和UTF-16.
2)char的几种可能取值
Java语言采用Unicode字符编码,字符占2个字节。
字符a的二进制数据形式为0000000001100001
十六进制数据形式为0x0061
十进制数据形式为97
以下5种赋值方式是等价的:
字符用单引号引着(英文输入法下面的单引号)
字符串用双引号引着
charc='a';
charc='\u0061';//设定"a"的十六进制数据的Unicode字符编码
charc=0x0061;//设定"a"的十六进制数据的Unicode字符编码0x开头的数字位16进制
charc=97;//设定"a"的十进制数据的Unicode字符编码
charc=0141;//设定"a"的八进制数据的Unicode字符编码0开头的数字位16进制
其他一些例子:
chara1='a';//一个字母
chara2='中';//一个中文字符
chara3='\u0060'//unicode编码
3)转义字符
Java编程人员在给字符变量赋值时,通常直接从键盘输入特定的字符,而不会使用Unicode字符编码,因为很难记住各种字符的Unicode字符编码值。
对于有些特殊字符,比如单引号,如不知道它的Unicode字符编码,直接从键盘输入编译错误:
charc=''';//编码出错
为了解决这个问题,可采用转义字符来表示单引号和其他特殊字符:
charc='\'';
charc='\\';
转义字符以反斜杠开头,常用转义字符:
\n换行符,将光标定位到下一行的开头;
\t垂直制表符,将光标移到下一个制表符的位置;
\\反斜杠字符
\'单引号字符
\"双引号字符
8.整数类型
byte,short,int和long都是整数类型,并且都是有符号整数。
与有符号整数对应的是无符号整数,两者的区别在于
把二进制数转换为十进制整数的方式不一样。
.有符号整数把二进制数的首位作为符号数,当首位是0时,对应十进制的正整数,当首位是1时,对应十进制的负整
数。
对于一个字节的二进制数,它对应的十进制数的取值范围是-128-127。
.无符号整数把二进制数的所有位转换为正整数。
对于一个字节的二进制数,它对应的十进制数的取值范围是0-255。
在Java语言中,为了区分不同进制的数据,八进制数以“0”开头,十六制以“0x”开头
例如:
一个字节的二进制数八进制数十六进制数有符号十进制数无符号十进制数
-------------------------------------------------------------------------------------------------
0000000000000x0000
1111111103770xFF-1255
0111111101770x7F127127
1000000002000x80-128128
整形型:
默认数据类型是int
byte(8位)
bytea=10;
short(16位)
shorta=20;
int(32位)
inta=30;
long(64位)
longa=40L;
longb=50l;
声明的时候后面要加大写L或者小写l,建议加上大写的L,因为小写的l和数字1很像似
9.浮点类型
java中表示小数的数据类型
浮点型:
默认数据类型是double
float(32位)
floata=10.3f;
double(64位)
doublea=10.8d;
10.变量的申明和赋值
程序的基本功能是处理数据
程序用变量来表示数据;
程序中必须先定义变量才能使用;
定义变量是指设定变量的数据类型和变量的名字,定义变量的基本语法为:
数据类型变量名;
Java语言要求变量遵循先定义,再初始化,然后使用的规则。
变量的初始化是指自从变量定义以后,首次给它赋初始
值的过程。
例:
inta;//定义变量a
a=1;//初始化变量a
a++;//使用变量a
intb=a;//定义变量b,初始化变量b,使用变量a的值;
b++;//使用变量b
11.基本类型间的转换:
隐式转换:
(不需要我们做什么,JVM自动转换)
bytea=10;
intb=a;
显示转换:
(需要我们手动写上转换的类型)
inta1=10;
byteb1=(byte)a1;
bytea=1;
byteb=2;
intc=a+b;
bytec2=a+b;
floata=8.9f;
doubleb=a;
floata;变量的声明
floata=8.9f;变量的声明并且赋值
doubleb=10-a;
doublea=8.9;
doubleb=10-a;
报错:
doublea=8.9;
floatb=10-a;
12.推荐命名规则
1)类名以大写字母开头;
HelloPersonTeacherTypeTest
2)接口名以大写字母开头;
EatFly
3)方法名以小写字母开头;
saygodoSomething
4)变量名以小写字母开头;
nameagemyNamemyAge
5)常量名全部大写,多个单词以"_"连接;
FILE_TYPEPERSON_TITLE
13.理解对象
面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的
子系统。
面向对象的开发方法将软件系统看成各种对象的集合,接近人的自然思维方式。
对象是对问题领域中事件的抽象。
对象具有以下特性:
1)万物皆为对象。
问题领域中的实体和概念都可以抽象为对象。
例如学生,成绩单、教师、课和教室。
2)每个对象都是惟一的。
正如世界上不存在一模一样的叶子。
3)对象具有属性和行为。
例如小张,性别女,年龄22,身高1.6m,体重40kg,能够学习,唱歌。
小张的属性包括姓名、性别、年龄、身高和
体重,行为包括学习、唱歌。
例如一部手机,牌子是诺基亚、价