好好学习,天天向上,学科吧欢迎您!
当前位置:首页 >> 最新范文 内容页

《java基础笔记》

《java基础笔记》word版 本文关键词:基础,笔记,java,word

《java基础笔记》word版 本文简介:Javaday01=============================================================================================Java------------sun公司1995几个特点:简单,安全,跨平台,面向对象,分布,

《java基础笔记》word版 本文内容:

Java

day01

=============================================================================================

Java

------------

sun公司

1995

几个特点:简单,安全,跨平台,面向对象,分布,健壮,解析,高性能,多线程,动态性,体系结构中立

安全:允许用户使用指针,不允许操作指针

跨平台:

C++

源码

----(编译)---->目标码

-----(连接)---->可执行文件

目标码:二进制机器码

c++中的源码是跨平台的。c++中的指针其实是内存中的编号(地址)

一个字节

=

连续的8位二进制位。

1G

=

1024*1024*1024

JAVA:源码

----(编译)---->字节码

JAVA是字节码跨平台。

搭建Java开发环境:

JDK/JRE/JVM

什么是JDK:JAVA开发工具包(做JAVA开发是必须下载JDK)

什么是JRE:JAVA的运行环境(若只运行JAVA文件只要下JRE就可以了)

什么是JVM;JAVA虚拟机

JVM(java虚拟机)功能:用来屏蔽不同系统的差异,为上层的字节码提供统一的运行环境。

JDK下的bin目录:可执行文件(这些都是开发过程中所要用的命令。如javac,java)

JDK下的JRE目录:BIN目录,LIB目录。这里的BIN目录中放的是运行中用到的命令,

LIB目录中放的都是JAR文件,JAR文件中放的都是一写编译好的字节码。

打成JAR文件的目的:方便传输。

LIB目录下的rt.jar,改文件下放的是JAVA开发的类库

JDK下的SRC.ZIP包:放的是rt.jar包中的源码,而rt.jar中放的是对应的字节码。

----------------------------------------------------------------------

设置环境变量:

JAVA_HOME:代表JDK安装路径

=/opt/jdk1.6.0

d:/a/b/jdk1.6

CLASSPATH:系统搜索类的路径

=.

(指的是当前目录)

PATH:命令的搜索路径

=/opt/jdk1.6.0/bin

=$PATH:/opt/jdk1.6.0/bin

=$PATH:$JAVA_HOME/bi

$PATH:

在原先的PATH基础上加上其它路径/

--------------------------------------------------------------------------

第一个JAVA代码

第一步:

vi

MyFirstJava.java

第二步:

public

class

MyFirstJava{

-----------------

定义一个类

public

static

void

main(String[]

args){

------

主方法格式固定

String

name=“tangliang“;

----

定义一个变量为字符串,字符串值用双引号来引起

int

age=30;

------定义一个整数类型值为30

System.out.println(“my

name

is:“+name);

---

输出语句()里是要输出的内容

System.out.println(“my

age

is:“+age);

----

JAVA中加号也可以做字符串的链接

}

}

第三步:

javac

MyFirstJava.java

-----

编译源代码文件(跟源文件名)

第四步:

java

MyFirstJava

-----

执行字节码文件(跟的是类名)

通配符号编译:javac

my*.java

----------

编译以my字母开头的所有java文件

带包编译:javac

-d

.

PackageTest.java

带包执行:java

sd0807.day01.PackageTest

Public被称作为访问修饰符

----

作用是:控制程序的其他部分对该部分的访问级别

Class表面JAVA程序中的全部内容是包含在类中的。

注意点:

1.

一个JAVA源文件只能定义一个public类

2.

而且PUBLIC修饰的类名必须同文件名一致(大小写也要一直)

3.

可以定义其他非public类.

4.

字节码文件与类一一对应,而不是同你的源文件一一对应.

5.

可以运行的JAVA方法的文件,一定要包含一个主方法,而且主方法签名是固定的

6.

包含主方法的类叫主类,java命令后跟的是主类的名字

7.

main方法是程序的入口

包的定义(目的是确保类名的唯一性)

包用来放所写文件的目录.

怎么来声明一个包:

package

SD0807.day01;

---

包的定义(可以是0或1行,若声明则必须在java文件第一行)

++++++++++++++++++++++++++++++++++++++++++++++++

package

SD0807.day01;

public

class

PackgeTest{

public

static

void

main(String[]

args){

System.out.println(“Package

Test!“);

}

}

++++++++++++++++++++++++++++++++++++++++++++++++

带包编译:javac

-d

.

PackageTest.java

带包执行:java

sd0807.day01.PackageTest

若java

PackageTest

其实它将类找到了,只是它找到是带包的类,而命令里面是不带包的,所以会报错。

为什么执行带包的类要加路径名???(由于JAVA命令的执行步骤)

java命令的三个步骤:

1,找到类的字节码文件

2,加载类--从磁盘中去读取对应的类,到哪里去找就是从(classpath中配置的路径)

3,找主方法执行

若从网上下一写工具包必须在classpath中配置工具包所在的位置,这样我们就可以使用该工具包

想使用中间件,这样classpath必须指向对应的xxx.jar。

而在JDK中的rt.jar我们没有配置上,

却能用到里面对应的类,因为她自动会去找JRE/lib/rt.jar找。

rt.jar

//

放在

jdk1.6.0/jre/lib/rt.jar使用api

提供的类,java虚拟机是怎么找到的?

就在rt.jar

;里,即使不设到

CLASSPATH

下虚拟机也能运行;

++++++++++++++++++++++++++++++++++++++++++++++++++++++++

例子:

第一步:(写类)

ToolA类:

package

com.tarena;

public

class

ToolA{

public

static

void

main(String[]

args){

System.out.println(“ToolA“);

}

}

Test类:

package

com.tarena.day01;

public

class

Test{

public

static

void

main(String[]

args){

ToolA

t

=

new

ToolA();

System.out.println(“test“);

}

}

第二步:(编译)

javac

-d

.

ToolA.java

-----

可以编译(生成一个文件夹为com)

javac

-d

.

Test.java

-----直接编译Test.java会出错,因为用到了ToolA类

第三步:(把类ToolA打包)

jar

-cvf

abc.jar

./com

----------

ToolA类在包com.tarena

将产生的abc.jar包放到任意的目录下,这里放到aa目录。

第四步:配置ToolA类的

classpath=d:/aa/abc.jar

第五步:(编译Test类)

javac

-d

.

Test.java

-----

可以编译

第六步:(执行)

java

com.tarena.day01.Test

也可以执行ToolA类

java

com.tarena.ToolA

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

找对应类的顺序:

1,在当前包下找(所以注意不要在自己的包下创建和JDK中同名的类,这样在调用JDK

中同名的类回出错)

2,在rt.jar中找

3,在

classpath中指定的路径下找

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

如果自己在本包中定义了一个String类这样下面代码会出错:

public

class

Ab{

public

static

void

main(String[]

args){

System.out.println(“aaaaa“);

}

}

---------出现的错误是说主方法没找到。

因为main参数中的String类不是JDK中的String类所以上面的main方法不是主方法了,只能是

自己所定义的一个普通的类。所以该类在编译的时候不报错,在执行的时候就会出错。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

java.lang包下的类,可以不需给出包明,其它的都要给出包名,由于java.long包下的类很常用。

---------------------------------------------------------------------------------------

类的导入

import:

可以多行。作用导入所要用到的类。

java.lang包下的类,可以不需要导入,其它的包中的类都必须导入。

怎么导入:

import

java.util.scanner;

------

导入scanner类

import

java.util.*;

----------

导入该包下所有的类

package

xxxxx;(0或1行)

import

xxxxxxx;

(0或多行);

class

xxxxx{}

(1个或多个但只有一个public

class)

静态导入:

不仅能导入类,还可以导入静态域。

两个实际用:

1,

对算术函数的导入

2,

笨拙的常量

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

常用命令:

Javac

------

编译命令

Java

------

运行命令

Javadoc

-----

生成程序文档,在java

源文件中提取文档注释,生成程序文档.

--------------------------------

文档注释

注释:

//

单行注释

(按住

ctrl+/

)就可以注释选中的程序)

/*/

多行注释

/**/

特殊的多行注释,定义在类之前,类的属性或方法之前,叫文档注释;

javadoc

MyFirstJava.java

–d

./docs

//将生成的html文件放到当前目录下的docs子目录下;

作用:生成JAVA文档.从你的程序代码中提取注释

/**/

后跟的是自由格式文本

在自由格式文本中可以使用HTML修饰符:

一定不要使用,,因为他们与文档格式发生冲突。

类的注释:

多行注释的时候很多程序员习惯每行以星号开头,不建议这样做。

方法的注释:

@param

----

参数,可以占据多行,可以用HTML标记

@return

----

返回

@throws

----

可能抛出的异常

域注释:

只需要对公有域(通常指的是静态常量)建立文档

/**

The

“hearts”card

sut/

Public

static

final

int

HEARTS=1;

通用注释

@author

name

----

作者

@version

text

----

版本

@since

text

-----

始于条目

@deprecatecd

text

-----------

对类,方法,变量添加一个不再使用的注释

如:@deprecated

UsesetVisible(true)instead

@see

reference

@see

The

Core

ava

home

page

Java

day02

--------------------------------------打包

jar

生成/修改

java

归档文件

(.jar),跟.zip

一样;

jar

–cvf

abc.jar(目标文件)

./abc

(把哪一个目录打包成jar文件)

-c

creat

创建新的jar文件

-v

visable

显示出来

-f

filename

指定文件名

-x

展开存档中的命名的(或所有的〕文件

jar

cvf

abc.jar

./abc

//

多了一个清单文件;manifest.info

jar

–xvf

abc.jar

//

展开jar文件的内容;

删除com/

目录结构

留下一个abc.jar

;

将环境变量的CLASSPATH

追加一个

/sd0705/corejava/abc.jar

就是将压缩文件展开后在根目录下找

.class

文件;

rt.jar

//

runtime

放在

jdk/jre/lib/rt.jar

CLASSPATH

使用api

提供的类,java虚拟机是怎么找到的?就在rt.jar

;里,即使不设到

CLASSPATH

下虚拟机也能运行;只要在这个目录下就能找到;

-------------------------------------------------

常用的包;

java.lang

java的语言包

java.awt/java.swing/java.awt.ent

图形开发是要用到的包

java.applet

开发小程序用的包

什么叫application(应用程序):就是包含主方法的程序。

另外的的程序是没包含主方法,必须放到容器里(如嵌入到浏览器里)去执行。

java.io

输入输出时要用到。

java.net

java中网络开发。

java.util

java工具包。

------------------------------

标识符

命名规则:

(1)

由字母、数字、下划线、$组成,不能以数字开头;

可以用中文;如:

string

中文=“abc“;

只能以字符、“_”或“$”开头;

字符可以是汉字;

(2)

大小写敏感;

(3)

不得使用java中的关键字和保留字;

(4)

Java语句以分号分隔,Java代码块包含在大括号内,忽略空格。标识符

(5)

无长度限制。

------------------------------------

命名习惯

(1)

标识符要符合语义信息

(2)

包名

所有字母小写

(3)

类名

每个单词首字母大写,其它小写

//TarenaStudent

(4)

变量和方法:

第一个单词小写,从第二个单词开始首字母大写

//tarenaStudent

(5)

常量:

所有字母大写,每个单词之间用“_

“连接

//int

MONEY_VALUE

=

50;

(6)

用以命名类、方法和变量、以及包遵守JAVA的命名规范,类以每个单词都以大写字母开头。

----------------------------------关键字

Abstract

continue

for

new

switch

assert

default

goto

package

synchronized

boolean

do

if

private

this

break

double

implements

protected

throw

by

e

else

import

public

throws

case

enmum

instanceof

return

transient

catch

extends

int

short

try

char

final

interface

static

等等

-----------------------------------

八种数据类型

1,布尔型:boolean

只有false/true两个值(不存在如C++的与整数相互转换)

2,字符类型:

char

2字节

16位

(0~65535)

默认就是无符号的16位整型;只能表示整数;

char类型也可以用通用转义字符,但是不能用ASCII码。可以用“/u0000”这种格式,

因为char型中使用的是unicode编码方式。/u0060

四位都是十六进制的;

赋值方式:

char

zhChar=

;

char

enChar=

a

;

char

ucChar=

/u0060

;

---

Unicode也是一种字符编码方法(其为16进制)

int

a

=0

char

b=

0

int

a

=0

char

b=

/u0000

相等

char

a

=

0

char

b=

/u0000

char

a

=

8

char

b

=

5

+

3

char

a

=

8

char

b

=

5

+3

相等

int

a

=8

char

b

=

5

+

3

int

a=8

char

b=

5

+3

字符0与整数0是不相等的,第五组相等。

/u0061

--------------表示为a

/u0041

--------------表示A

字符0的编码为:/u0048

3,字符串类型:

定义:String

name=“tangliang“;

--------

注意:赋值要有双引号

4,整数类型:

byte1字节8位

-128到127-2^7到2^7-1java中都是有符号的;没有有符号和无符号的差别;

内存中的存储:正整数:

原码

负整数:

补码=

原码取反+1;

25

原码:

00011001

补码:00011001

-25

先些25的原码:00011001

-->取反:11100110

--->补码:11100111

内存中8位二进制第八位:0表示正,1表示负

10000000表示的值为-128,过程:

10000000--(减1)-->01111111--取反-->10000000(2的7次方=128开始第一位为1

则表示负数即-128)

short

2字节

16位

-2^15到2^15-1

16位的短整型

-32768~+32767

(与char比较,char没有负则其范围0~65535,没有符号位,存储还是同样的)

int

4字节32位

-2^31到2^31-1

32位的整型(大概-2G到2G)

long

8字节64位

-2^63到2^63-1

64位的长整型;long

a=12343545L(l);

//一定要跟上L,大小写都可以,最好用大写;

以0x开头就是十六进制;

-------------

二进制与十六进制的转换4对1

以0开头的是八进制;

-------------

二进制与八进制的转换

byte

bb=(byte)0x771;

//

由于范围超出了直接赋值是不可以的但可以强制转换,

强转的规则:自动截断高位保留最低的8位;

5,浮点类型

(默认是double,而且是近似存储)

float

4字节32位

单精度实数;

2^24

X

10^127

;

前三个字节存数据,后一个字节存位权;

double

8字节64位

双精度实数;

java中小数默认是double型:

float

f

=

111.32;

-----

会出错,因为默认是double型

可以写的方式;

float

f

=(float)111.32;

float

f

=

111.32f;

-----

注意十六进制中f是个值,不是float类型。

float

fa

=123.4f;

----

后面要加上大写或小写的f

float

fa

=123.4E300F;

float

fa

=(float)123.4E300;

------

强转后赋值给float变量

double

d

=

333.5

double

dd

=

886.45d

double

dddd=

768.987D

注:整型值存放,正数存放原码(二进制码),负数则存放补码(原码按位取反末位加一)

注:浮点型是近似存储的,实型值在存储时会损失精度,所以不要直接比较两个实型值。

系统默认的实型都是double型,

要使用时要在数据后加个f,或者强行转换。强转(占字节数大的类型转到占字节数

小的类型)时会放弃高位值只取低位值。

类型转换

整数是精确存储

浮点类型是近似存储

6.枚举类型

JDK5以后可以自定义枚举类型:

enum

Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};

声明这样一种类型的变量:

Size

s

=Size,MEDIUM;

7.大数据类型

java.math.BigInteger

java.math.BigDecimal

这两个类可以处理任意长度的数值:

1,

BigInteger

实现任意精度的整数运算

2,

BigDecimal

实现任意精度的浮点数运算

可以用静态方法valueof()将普通的数值转换成大数值,但不可以用算术运算符来做处理

+++++++++++++++++++++++++++++++++++++++++++++

public

class

test

{

public

static

void

main(String[]

args){

double

a=2.0,b=1.1,c=0.9;

if(a-b==c){

System.out.println(“ok!“);

}else{

System.out.println(“不

ok!

“);

}

}

}

答案是:不“ok“;2.0-1.1=0.8999999….

//

是近似存储不是精确存储

取绝对值小于一个很小的数:

Math.abs((a-b)-c)

short

->

int

->

long

->

float

->

double

char

-----à

int

int

-----à

double(数据不会丢失)

int

-----à

float

(数据会丢失)

long

-----à

double(数据会丢失)

long

-----à

float

(数据会丢失)

其中:

char型和int型之间可以相互转换。char和short或byte不能相互转换。

char不能表示负数;

boolean类型是独立的,不能和其它类型相互转换;

反之则需要强行转换;

但是自动类型转换也会造成数据丢失:

int

->

float

long->

float

long

->

double

只是让位数上相等,但是会丢掉低位的数据;

比如:把浮点值赋给整型,就会发生截断(truncation)

注意:

隐式类型转换;(a或b有一个为int)

a

运算符

b

,如果a,b中有任意一个是double型,前面运算的结果就是double型,

如果a,b中有任意一个是float型,前面运算的结果就是float型,

如果a,b中有任意一个是long型,前面运算的结果就是long型,

如果a,b中没有double、float、long型,那么其结果就为int型。

java

数据类型:基本类型:

8种

引用类型:

类,接口,枚举,标注

空类型:

void

int

a=5;

系统会分配连续4个字节的空间:

0000

0000

|

0000

0000

|

0000

0000

|

0000

0101

String

a=”hello”;//

a

是一个引用

(地址),不允许对其进行修改;

a

--

四个字节;存的是地址值[

];指向首地址--“hello”四个连续的存储空间;

-------------------------------------------------------------------------------------

写一个person类

在其它类中写了

person

p

=

new

person();

p

---

在内存中分到4个字节的空间,存放的是地址值。该地址就是后面new

person()

产生

的空间。

这样保证了所有的地址都指向合法的位置;

通过p.xxx();

-----去访问对象的方法

p.xxxx;

------

去访问对象的属性

对象:

充满氢气的氢气球,引用是绳子,通过这个绳子找到这个氢气球;

一个绳子只能连着一个气球;一个气球可以由多根绳子连着;

如果没有引用,那么我们就访问不了,虽然它也存在,叫做垃圾。

Java

虚拟机的垃圾回收的机制;String

s=“hello”;

s=null;

System.gc();

//

可以建议虚拟机来回收这些垃圾;来提高效率。

若有引用p,但没有指向具体的对象。若去访问p就会出现nullpointerException(空指针异常)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

编译时:错误

:error(s)

警告:

Warning(s)

运行时:异常:

错误:

Person

p

=

null;

-------

定义了引用但没有对象

p.name;

--------

访问Person类的name属性;

p.age;

--------

访问Person类的age属性;

这个异常,没有对象,不可能访问对象的属性,这在编译的时候不会出错,只有在运行的时候

才会出现的异常。

注:

一个对象有多个引用指向它时,一个引用来改变它的值时,其它也改。

一个引用只能指向一个对象;

------------------------------------运算符:

表达式:

==

/=

%=

+=

-=

>=

>>>=

a*=4

a=a*4;

比较符:

>=

>

----右移

(用符号位填充左侧)

>>

----无符号右移(用0填充前面的位置)

位运算:

>

>>>

;

左移相当于乘2的n次方;

右移相当于除于2的n次方;空位补符号位;

移位若大于32,则相当于移动了对32求余的位数,如:45%32

若被操作的数是long类型的则移位值要对64求余

例如,-14

(即二进制的

11110010)右移两位等于

-4

(即二进制的

11111100)----

注意:11110010,11111100

都是补码

>>>=

无符号右移动,移出的不管,移进的都补0。

辅助数:

1111

10001;

|(或):

把原来指定位置1,其它位不变;

辅助数:

0000

01110;

^(异或):异或运算,经常用来把原数的指定位求反其它位不变;辅助数:

000001110;

~

(取反):按位取反。

对于a=a+1;

而b=++a

相当于a=a+1;b=a;

三目运算符:

System.out.println(4>3?9:9.99);

-----------------------------补充-----------------------------------------

运算符优先级别

运算符

结合性

[

]从左向右

~

++

--

new

强制转换从右向左

/

%从左向右

>

>>>从左向右

>=

instanceof

从左向右

=

=

!=

从左向右

{

int

b=0;

}

}

--------------

以上代码编译时通不过的

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-------------------------------------

控制语句

------------------if

else

格式:

If(条件){

………….

}else{

………….

}

If()条件后腰执行多条语句就必须用花括号括起,若只有一条可以不用花括号。

----------------------------------------------

if

-

else

;

else

匹配的是向上最近的if

;

求一个数是不是素数:

循环,从2到n/2

sqrt(a)

;

int

a=13;

//boolean

flag=false;

for(int

i=2;iMath.sqrt(a))

//if(flag==true)

System.out.println(“a

是素数“);

//if(flag==true)

----------------------------

switch

格式:

Switch(条件){

case

条件值

……………….

break;

case

条件值

……………….

break;

default

:

…………………

break;

}

---------------------------------------------

switch中的变量类型只能是byte、

short、int、char,枚举五种类型;

只有遇到break才会退出,除非到程序末尾;

default放在最后和前面有区别,如果不写break的话,放在最后会自动退出;

但是放到开头的话,会继续执行直到遇到break为止;

循环的设计:

---------------------For循环

for();

outer:

in

er:

标签只能和break/continue

结合使用;

+++++++++++++++++++++++++++++++++++++++++++++++

public

static

void

main(String[]

args)

{

int

i=0;

aa:

while(true){

i++;

System.out.println(i);

if(i>10){

break

aa;}}}

++++++++++++++++++++++++++++++++++++++++

for(int

i=0;i=

0

System.out.println(“your

user

name

is:“+str);/

//第二种从键盘读数据的方法

Scanner

sca=new

Scanner(System.in);

System.out.println(“Please

input

your

name

and

age:“);

String

name=sca.next();

int

age=sca.nextInt();

System.out.println(“your

name

is:“+name);

System.out.println(“your

age

is

:“+age);

}

================================================

java.util.Scanner

Scanner

sca

=

new

Scanner(System.in);------System.in(是输入流)

String

s1

=sca.next();

----------

若输入hello

haha

hehe这样只能读到hello

String

s2

=

sca.nextline();

-----------

这个就能读到所有的值

int

a

=

sca.nextInt();

float

f

=

sca.nextFloat();

double

d

=s

sca.nextDouble();

System.out

---------------------------------------是输出流

从一个字符串中取出首字符:

String

name=“abcd“;

Char

firstChar=name.charAt(0);

---------------------------------------------------------------------

Math.pow(a,b)-------

Math类中有一个pow()方法表示,求a的b次方。

break

loop;

-----

跳出标号所标的循环,若没有跟标号,直接跳出循环

continue

-----

同样可以跟标号。

Java

day04

求一个数是不是素数:

循环,从2到n/2

sqrt(a)

;

int

a=13;

boolean

flag=true;

for(int

i=2;i<=Math.sqrt(a);i++){

if(a%i==0){

flag=false;

break;

}

}

if(flag){

System.out.println(“a

是素数“);

}else{

System.out.println(“a

不是素数“);

}

----------------------------------数组:

1)声明数组:

数组能以下列形式声明:(两种方式)

类型[]

array;

类型

array[];

注:JAVA中推荐用:

类型[]

array;

一个数组是一个对象

声明一个数组没有创建一个对象

声明时不用指定长度

数组是引用类型;

(类,接口,数组)

2)创建数组:

创建基本数据类型数组:int[]

i

=

new

int[2];

创建引用数据类型数组:Student[]

s

=

new

Student[100];

创建数组的三种形式:

int[]

arr1;

arr1

=new

int[5];

TAG标签: