java培训笔记.docx

上传人:b****3 文档编号:5268353 上传时间:2022-12-14 格式:DOCX 页数:28 大小:37.52KB
下载 相关 举报
java培训笔记.docx_第1页
第1页 / 共28页
java培训笔记.docx_第2页
第2页 / 共28页
java培训笔记.docx_第3页
第3页 / 共28页
java培训笔记.docx_第4页
第4页 / 共28页
java培训笔记.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

java培训笔记.docx

《java培训笔记.docx》由会员分享,可在线阅读,更多相关《java培训笔记.docx(28页珍藏版)》请在冰豆网上搜索。

java培训笔记.docx

java培训笔记

Jvm是用c语言编写的

调用各种平台并解释执行class文件

有多个类装载器(安全,无病毒),不同的类加载器环境是独立的

系统类装载器级别高于自定义类装载器

跨平台:

Sun公司为每个操作系统提供了一个jre

沙箱模型

在Java2之前的版本,运行时的安全模型使用非常严格受限的沙箱模型(Sandbox)。

Java不受信的Applet代码就是基于这个严格受限的沙箱模型来提供运行时的安全检查。

沙箱模型的本质是,任何本地运行的代码都是受信的,有完全的权限来存取关键的系统资源。

而对于Applet,则属于不受信的代码,只能访问沙箱范围内有限的资源。

当然,您可以通过数字签名的方式配置您的Applet为受信的代码,具有同本地代码一样的权限。

Java跨平台:

Java文件被编译成。

Class的字节码文件,由jvm执行

对于不同的平台有对应不同的安装

Javac将Java源代码---编译成-class文件

解释器一次性解释完再执行

Jit代码生成器边解释边执行

Jre运行环境安装软件时有2个

按照路径寻找运行环境

Cmd如果不关闭,按照以前的运行路径运行

J2SE(StandardEdition):

标准版,适用于普通应用程序的开发;

J2EE(EnterpriseEdition):

企业版,适用于大型企业级应用程序的开发;

J2ME(MicroEdition):

微型版,适用于移动设备或嵌入式设备的程序开发

Bin目录:

存放可执行文件;

Lib目录:

存放Java的类库文件;

Demo目录:

存放演示程序;

Jre目录:

存放Java运行环境文件。

Main方法有个String[]数组,用于接收控制台输入的参数

如:

Dos下输入三个参数Javatestabc

三种注释(单行,多行,文档)注释

内存泄露-----没有释放内存

内存溢出-----内存不够用

进程:

一个应用程序对应一个进程

多线程:

一个应用程序同时的几个动作(一段代码)

javadoc:

提取文档命令

path、classpath、java_home

path:

设备可执行文件的搜索路径

classpath:

告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序

Java_Home:

jdk的安装路径

echo:

取出环境变量并且打印echo%java_home%

malloc申请一块空间

calloc申请多块空间

realloc重新分配空间

free释放空间

Java:

区分大小写

标识符:

可以有字符、数字、“_”、和“$”。

不能以数字开头

自动类型转换:

byteshortintlongfloatdouble自动升级

bytex=1;inty=1;x+y-int2;

强制类型转换:

intx=23;charch=(char)x;保留最高几位,多余的去除;

floatk=2.3f;longm=2000L;double后的d可以省略;

char两个字节16位,所以可以存储一个汉字。

但不能存储”ab”;

位与、逻辑与位或、逻辑或

移位运算效率高于乘法运算;

三目运算符sex==”1”?

男:

堆内存:

人为地申请与释放?

栈内存:

系统申请与释放

引用数据类型默认为:

null

Swith内的类型只有intcharbyteshort和枚举;

Continue、break

System.gc()运行垃圾回收器,只能是建议,系统不一定执行;

垃圾回收机制是用于释放内存的一种机制

内存空间没有对象引用指向时被认为是垃圾

(对象引用孤岛也会被认为是垃圾)

数组、String是引用数据类型

回文数组{1,2,3,2,1}

Ooa(Object-OrientedAnalysis,OOA)面向对象分析方法是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。

Ood(Object-OrientedDesign,OOD)面向对象设计方法是OO方法中一个中间过渡环节

Oop(ObjectOrientedProgramming,OOP,面向对象程序设计)是一种计算机编程架构。

Aop:

面向切面编程

Soa:

面向服务架构

面向对象语言:

c++、Java、c#;数据库也开始面向对象了如Oracle;

C语言:

结构化程序设计语言,简称sp(structedprogramming);

强调精巧的数据结构和优越的算法,关注程序的运行效率;

不适合于大规模的程序开发;

对象:

其实就是“属性”和“方法”的封装体;

对象是类的一个实例,类是对象的抽象;

面向对象的核心思想:

抽象

面向对象的特征:

封装:

强调信息的隐藏,访问修饰符来体现

继承:

1、强调代码的重用

2、Java中只有单继承,c++可以多继承

3、Final修饰的类不能被继承、构造方法不能被继承

4、子类的构造方法中,隐藏了自动调用父类的不带参数的构造方法super().如果想要调用父类带参数的构造方法,必须显示的写出super(参数列表)5、实例化一个子类的时候,会先实例化父类

6、加载子类的时候,也会加载父类。

多态:

强调类的灵活和扩充。

(指同一函数在不同类中有不同的实现)

体现:

重载、重写、抽象类、接口

重载(overload):

方法具有相同的名称

使用不同的参数列表。

如(数量、类型、顺序)不同。

可以是继承的,可以不是继承的;

重写(覆盖)(overwrite):

方法具有相同的名称

参数列表一样

返回类型一致(兼容)如:

父(Object)子(String)也可以

访问修饰符子类不能比父类更严厉

不能抛出比父类更大的异常

父类方法将被隐藏

必须在继承中发生

构造方法:

没有返回值类型,也不能有返回值

只能在new时,由虚拟机自动调用。

一旦定义构造方法,默认的构造方法自动消失,所以重载构造方法时要再次写出;

类装载顺序过程:

静态变量代码块

普通代码块

构造方法

如:

静态方法中不能有非静态变量;

方法的参数是放在栈里的;

Strings=“abc”在常量池里查找,如果没有abc,则在常量池里创建abc

Strings=newString(“abc”)在常量池里查找,如果没有abc,则在常量池里创建abc,然后再在堆里再创建空间,内容和常量池里的一样。

创建多个对象时,内存空间里各个对象的属性是独立的,方法是共享的。

静态变量与静态方法只与类有关,与对象无关。

所以又叫类变量、类方法。

生命周期为整个程序。

可以用对象调用(所有对象都调用的是一个值),也可以用类名直接调用。

静态成员方法只能对类的静态成员变量进行操作;

静态成员方法没有this引用;

类成员变量会被赋默认值,但局部变量不会,需要手动初始化。

静态引入,importstatic相当于自己的了。

字面量:

所谓的值;

Java的内存分配

Java程序运行时的内存结构分成:

方法区、栈内存、堆内存、本地方法栈几种。

方法区存放装载的类数据信息,包括:

基本信息:

每个类的全限定名、每个类的直接超类的全限定名、该类是类还是接口、该类型的访问修饰符、直接超接口的全限定名的有序列表。

每个已装载类的详细信息:

运行时常量池、字段信息、方法信息、静态变量、到类classloader的引用、到类class的引用。

栈内存

Java栈内存由局部变量区、操作数栈、帧数据区组成,以帧的形式存放本地方法的调用状态(包括方法调用的参数、局部变量、中间结果……)。

堆内存

堆内存用来存放由new创建的对象和数组。

在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。

本地方法栈内存

Java通过Java本地接口JNI(JavaNativeInterface)来调用其它语言编写的程序,在Java里面用native修饰符来描述一个方法是本地方法

对象在内存中的存放形式

1、每个对象都有自己独立的数据成员,但是所有的对象共享成员方法

2、每个成员方法都有一个隐含的this引用,它总是指向调用它的对象;

3、每当调用成员方法时,编译器会向this分配调用该方法的对象的地址;

4、对象,成员变量存放在堆中

5、方法中的局部变量放在栈中

6、static修饰的变量,方法也是共享的

理解NEW一个对象

1、new的作用申请一块内存空间(堆),创建一个对象。

2、类装载的时候,首先对静态变量分配空间,然后激活类的静态变量的初始化,激活静态代码块(执行静态匿名代码块),

类加载后实例化对象分配空间,激活成员变量初始化,然后执行匿名代码块,然后执行构造方法。

访问修饰符:

public

Protected(所有子类)

缺省(同包)

private

本类

可以

可以

可以

可以

同包子类

可以

可以

可以

不可以

同包非子类

可以

可以

可以

不可以

不同包子类

可以

可以

不可以

不可以

不同包且非子类

可以

不可以

不可以

不可以

对类使用的访问修饰符只有public和缺省两种

在一个源文件中只能有一个被public修饰的类,并且文件名必须与public的类同名

this关键字有两种意义:

–表示一个指向“implicitparameter”的引用

–调用本类中的另一个构造器

super关键字也有两种意义:

–调用父类的方法

–调用父类的构造器

但是,super并不表示一个指向对象的引用,它只是一个特殊的关键字,用来告诉编译器,现在要调用的是父类的方法。

向上转型(上溯造型):

基类的引用可以指向派生类的对象

1、向上转型后,如果子类与父类有同名的成员方法(对象方法),调用该方法的时候,实际上是调用的子类对象的方法

2、向上转型后,如果子类与父类有同名的静态方法(类方法),调用该方法的时候,实际上调用的父类的静态方法。

3、向上转型后,如果子类与父类有同名的变量(包含静态,非静态),调用该变量的时候,总是获取的父类的变量的值

4、向上转型以后,子类自己的属性,方法将会不可见。

向下转型(下溯造型):

需要强制类型转换,把父类类型变量赋值给子类类型变量。

注意的是父类类型的变量必须引用于子类类型兼容的实例。

静态多态也称为编译时多态,即在编译时决定调用哪个方法;

静态多态一般是指方法重载;

动态多态也称为运行时多态,即在运行时才能确定调用哪个方法;

动态多态一般是指方法重写;

抽象方法:

基类无法(或没有必要)提供被覆盖方法的具体实现,将此方法定义为抽象方法

抽象类:

1、如果某个类中包含有抽象方法,那么该类就必须定义成抽象类。

2、信息是不完整的,所以不可以直接实例化;

3、抽象类中也可以包含有非抽象的方法;

4、构造方法和静态方法(可以有)但不可以修饰为abstract

5、如果抽象类的派生子类没有实现其中的所有抽象方法,那么该派生子类仍然是抽象类,只能用于继承,而不能实例化;

6、abstract与static不能同时存在

7、可以定义变量

接口:

1、如果某个类中的所有方法都是抽象方法,那么可以考虑将该类定义为接口

2、接口中的所有方法都默认为抽象方法,无需在每个方法前加abstract关键字

3、java不支持多继承,所以提出接口的概念

4、接口中只能定义public、static、final,不能定义普通变量;

5、访问修饰符必须且默认是public、static、final的(可以被重写,从而被实现)

6、不能定义变量,可以定义常量

用法:

就是定义一个规范,通过向上转型实现多态,使得程序更加的灵活;

抽象类与接口的区别:

一个类只能有一个父类,但可以实现多个接口;

Final

Final修饰的类不能被继承;如String、integer类

类与类的关系:

is---a(like--a)

Has--a

异常

错误Error:

程序不方便处理的严重异常,比如内存溢出等

OutOfMemoryError:

内存不足

StackOverflowError:

栈溢出

InternalError:

Java虚拟机中出现一些意外的内部错误

UnknownError:

Java虚拟机中出现一个未知但严重的异常

异常Execption:

程序可以处理的异常

编译时异常:

在写程序的时候,就必须处理,不然代码无法通过编译。

编译时异常:

ClassNotFoundException:

类不存在异常

CloneNotSupportedException:

不支持克隆

NoSuchMethodException:

非法方法名异常

IOException:

IO异常

FileNotFoundException:

文件不存在异常

SQLException:

sql异常

运行时异常RuntimeException在写程序的时候,可以不处理,代码可以通过编译,但是在运行的时候,JVM会自动的处理异常,处理方式为打印出异常的信息。

常见的运行时异常:

ArrayIndexOutOfBoundsException:

数组下标越界

ArithmeticException:

算术异常

ClassCastException:

类转换异常

NullPointerException:

空指针异常

IllegalArgumentException:

非法的参数异常

特例:

在Java里double数据可以被0除,不会发生异常。

Throwable是Java语言中所有错误或异常的超类

Error是Throwable的一个子类,一般是与硬件有关的问题,如内存不够用等,不建议处理;

默认异常处理:

两个方法:

getMessage()在Exception类中定义的方法,被继承到所有的异常类中,用于获得与异常相关的描述信息。

voidprintStackTrace()在Exception类中定义的方法,用于在控制台上显示有关异常的信息,不但有异常的原因,还涉及产生异常的代码行。

多重catch时,子类异常在父类异常之前;

thrownewRuntimeException(“自己抛出异常”);

异常处理:

1、trycatch

2、不处理,用throws将函数内部产生的异常抛给主调函数

子类不能抛出与父类不同类型的或更大的异常

没有抛出异常等于抛出了运行时异常

Throw创建异常

Throws抛出异常

增大虚拟机的默认内存

NAN:

notanumber;

类基础

1、基本类型与其对应的封装类

·JDK1.5新特性,自动封解箱

byte----Byte

byte-->Byte构造方法,valueOf方法Byte---->bytebyteValue方法

JDK1.5

自动封装byteb=1;Bytea=b;bytec=2;Byted=a+c;

自动解包byteb=1;Bytea=b;bytec=a;

char---Character

short--Short

int--Integer

long--Long

float-Float

double--Double

boolean--Boolean

注意,封装类是用final修饰了的,不能被继承

封装类不会自动转换,基本数据类型可以;

2、“==”:

如果是基本类型,就比较值

如果是引用类型,就比较是否引用同一个对象(比较的地址)

equals:

是比较两个对象的内容。

但是Object中equals就是通过==实现的,因此除非重写equals方法,才能真正比较对象的内容。

Sun提供的所有类,都已经重写了equals方法了。

3、String类

String表示一个字符串,字符串是常量,一旦创建就不能修改。

String是被final修饰的,所以String不能被继承。

String调用方法修改内容的时候,如果内容不会改变,就直接返回原来的String,

如果有改变会产生新对象。

String如果用+运算,标示字符串的连接运算,字符串的连接运算会产生大量新对象,消耗内存,

如果有频繁的做字符串连接,建议用StringBuffer或者StringBuilder

4、StringBuffer类用final修饰的,不能继承

线程安全的可变字符序列。

一个类似于String的字符串缓冲区。

用stringBuffer来做字符串的处理,不会产生大量的新对象,对内存消耗小,提高了效率。

重要的方法,append方法,insert方法,delete方法,length方法,toString方法

5、StringBuilder类用final修饰的,不能继承

是JDK1.5后提供的一个类,功能和StringBuffer一样,区别是非线程安全的。

6、Mathe类用final修饰的,不能继承

abc--绝对值

roud--四舍五入

floor--小于某个数字的最大整数

sqrt--平方根

pow--几次方

max--最大值

min--最小值

random--生成0.0-1.0之间的一个double

7、Object是所有类的根类

equals方法比较两个对象的内容但是Object是通过==来实现的,因此自己的类应该重写equals方法。

hashCode方法返回对象的hash码,object的是把对象的地址通过哈希算法得到一个int。

equals方法与hashCode方法的约定:

1、两个对象equals方法为真,那么hashCode方法必须返回相同的值。

2、但是hashCode返回相同的值,但是不一定equals为真。

根据约定,我们知道,如果hashCode不等,那么一定equals为false;

toString方法,把对象转换成一个字符串。

object的实现是,打印类名称+@+hash码转换成16进制的字符串。

clone方法,创建并返回此对象的一个副本。

如果要克隆,必须实现Cloneable接口,表示支持克隆。

一般重写clone方法,把访问修饰符改为public.

扩展:

克隆分为浅克隆和深克隆。

8、System类属性:

in,out

方法:

arraycopy--数组的拷贝

currentTimeMillis--当前时间对应的毫秒

nanoTime---当前时间对应的微秒

exit--退出虚拟机

gc-----建议垃圾回收

扩展:

load--装载动态库---比如要调用C++的方法的时候要用.

9、Class类

forName:

根据类名称,得到一个类

newInstance:

得到类的实例,对象

getName:

返回类的名字

getSuperclass:

得到父类

isInstance(Objectobj):

判断一个对象是否是一个类的实例与表达式instanceof效果一样

项目中用Java调用c++的方法;

C++打包成动态库,在Java中加载动态库,再在Java中申明该方法就可以调用

常见类

Java.lang:

基础包,默认引用

java.util.Date

java.text.DateFormat

java.text.SimpleDateFormat

java.util.Calendar

java.util.Random

java.util.Locale

JDK5.0以后提供了自动封解箱的操作,并运用了比较特殊的池操作,猜测以下代码的运行结果:

TRUE、FALSE

publicstaticvoidmain(String[]args){

Integeri1=1;

Integeri2=1;

System.out.println(i1==i2);

Integeri3=128;

Integeri4=128;

System.out.println(i3==i4);//i3,i4大于127了。

}

String.split()方法:

分割字符串“|”(特殊字符)必须写成:

”\\|”

对字符串的操作,看内容前后是否有变化。

如果有变化则产生新对象,负责不会产生新对象。

Stringa=“abcd”+”dfsf”只产生一个对象。

类加载时就把“abcd”+”dfsf”转换成“abcddfsf”

Stringa=”abc”比Stringa=newString(“abc”)更节省内存。

只有常量池里有个对象,“堆”里没有产生对象,

Math类的所有方法是静态的,所以直接调用,无需定义对象;

Object:

finalize()

当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法

Transient瞬态,不能持久化;

(对象Instanceof类名)判断一个对象是否是类的实例;

Java中:

yy--m--ddhh:

mm:

ss

yy--m--ddHH:

mm:

ss24小时制

Oracle中:

yy--m--ddhh:

mi:

ss

yy--m--ddhh24:

mi:

ss

I18N国际化

Iterator对集合进行迭代的迭代器。

,一种设计模式。

也可以指定为泛型;

hasNext():

如果仍有元素可以迭代,则返回true。

next:

返回迭代的下一个元素。

用法:

While(i.hasNext()){i.next()}

每种数据结构都有自己的迭代器;

集合中泛型的应用:

集合

泛型的JDK1.5的新特性,在编译的时候判断数据的类型,防止在运行的时候才发现类型不匹配(ClassCastException)

ArrayListplist=newArrayList();

好处:

强迫add方法只能加入Person类型

get方法不用再强转类型。

集合

如何存放多个数据

方法1:

用数组,缺点长度固定,只能放相同的数据类型,中间或者在开始处如果要插入一个数据的话,后面的数据必须依次往后移动,

移动数据的方法还要自己写

方法2:

集合类,长度没有限制,元素的数据类型也可以不同,提供了操作数据的方法,提供有用的数据结构和算法,可以根据需要选择

合理的数据结构的集合类。

集合类:

动态数组:

插入不方便;地址是连续的,查询更方便;

A

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1