java基础知识积累

 

1)java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下:

1、首先加载要创建对象的类及其直接与间接父类。

2、在类被加载的同时会将静态成员进行加载,主要包括静态成员变量的初始化,静态语句块的执行,在加载时按代码的先后顺序进行。

3、需要的类加载完成后,开始创建对象,首先会加载非静态的成员,主要包括非静态成员变量的初始化,非静态语句块的执行,在加载时按代码的先后顺序进行。

4、最后执行构造器,构造器执行完毕,对象生成。

 

个人理解:1类的加载是将类的class文件读入内存为之创造class对象 

                2类的连接会把类的二进制数据合并到JRE中

                3初始化虚拟机对类进行初始化,包括已下{

                     1父类 静态变量  静态初始化块   

                      2子类 静态变量 静态初始化块

                       3父类变量 初始化块   父类构造器

                         4子类变量 初始化块   父类构造器

                         }

 

2)java的面向对象特性:

1.抽象:

 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

2.继承:

 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要

3.封装:

 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

4. 多态性:

 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

 

3)java的八个基本数据类型:

 

1个字节 byte
 2个字节 short 0
4个字节 int 0
8个字节 long 0L
4个字节 float 0.0f
 8个字节 double 0.0d
 2个字节 char ‘\u0000’
环境而定 boolean false

 

4)1.作用域public,private,protected 修饰符关键字,以及不写时的区别?

public:公有的,自身所有包下面的类都可以访问

private:私有的,只有本类自身才能访问

protect:保护的,自身和子类,以及同一包下面的类可以访问

default:默认的,自身,同一包下面的类可以访问

5)break 和continue的异同点

break,有“打破(僵局),结束(困难,不利局面),断绝(联系)”等意思,

所以引申为“从break处跳出总循环,结束本次循环,不执行本次循环中break之后的语句,且结束该循环控制体”

而continue,意思是“(中断后)继续”,

所以引申为“从continue处结束本次循环,中止本次循环,不执行本次循环中continue之后的语句,但(中止后)没有跳出该循环控制体,继续执行本次循环之后的循环”

两者的共同点是:

都不会执行本次循环中break/continue之后的语句;

两者的不同点是:

continue是中止本次循环之后继续执行本次循环之后的循环,没有跳出该循环控制体;

而break拒绝执行本次循环之后的循环,并且跳出该层循环控制体。

 

6)String 和StringBuffer的区别

 

 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用 StringBuffers来动态构造字符数据。

String:为不可变对象,一旦被创建,就不能修改它的值。

对于已经存在的String对象的修改都是重新创建一个对象,把新的值保存进去。

String是final类,不能被继承。

StringBuffer:线程安全的可变字符序列。如果要对一个字符串内容进行频繁修改,出于性能考虑,最好使用StringBuffer。如果想转换成String类型,可调用

StringBuffer的toString()方法。

StringBuffer最常用的方法是append()以及insert方法

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

使用策略:

(1)基本原则:如果要操作少量的数据,用String;单线程操作大量数据用StringBuilder;多线程操作大量数据用StringBuffer。

(2)为了获得更好的性能,在构造String和StringBuffer时应尽可能的指定他们的容量,默认容量长度是16个字符。

(3)StringBuilder一般用在方法内部,StringBuffer可用在全局变量上。

 

7)java异常

error:跟程序猿写的代码无关, 表示代码运行时 JVM(Java 虚拟机)出现的问题。一般的异常有:上面的两种。

exception: 包括io异常还有就是runntimeException   指的是

8)数据连接池的工作机制

J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

 

为什么要用连接池:

          首先连接池可以减少对资源的消耗,允许多个客户端使用缓存起来的连接对象,这些对象可以连接数据库,可以被重复使用

          打开或关闭数据库连接开销很大,连接池技术允许我们在连接池中维护对象,这样克一提高哦数据库的执行效率和性能。多个客户请求可以重复是使用相同的对象。

         当每次收到客户端请求是,就会搜索连接池中是否存在闲置的对象,如果没有则要求所有的客户端进行队列排队,要么就是新建一个连接对象(这需要取决于连接池的最大连接数)

        一旦这个连接请求结束后,会被重新放入连接池中,分配给其他的请求,大大减少了等待创建数据库连接的时间。

       企业级应用中很常见,应用服务器负责创建连接对象,添加他们到连接池中,分派给请求,回收已经完毕的连接对象,重新放回连接池中

9)system.out.print 相比于log4j日志管理,

会产生大量的IO操作,同时在生产环境中无法合理的控制是否需要输出,而log4j不同,可控制日志的级别比如info,error debug 等,还可以控制输出的路径和输出的格式如xml等

 

10)数据库优化的经验:建表索引和建分区,还有尽量少用not in。清空表数据尽量用truncate 少用delete 等

11)在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码, 不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以 直接使用类名来引用。例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticInt变量,并且每创建一个实例对象,这个staticInt就会加1;但是,每创建一个实例对象,就会分配一个random,即可能分配多个random,并且每个random的值都只自加了1次。

12)String str = "abcde";

Char[] chars = new Char[str.length()];

chars = str.toCharArray();

13)

1.HashMap去掉了HashTable的contains方法,增加了containsKey和containsValue方法,新的

2.HashTable是同步的,线程安全。而HashMap是非同步的,线程不安全。旧的

3.HashMap允许空键值,而HashTable不允许。

14)堆heap和栈stack

 1.java 程序为了提高运行的效率,就对数据进行了不同的空间的分配,具体划分为如下5个内存空间:

stack 栈:存放的是局部变量

heap 堆:存放的是new 出来的东西。

方法区

本地方法区:(和系统相关)

寄存器:(CPU使用)

堆内存的特点:

1.每一个new出来的东西都有地址值

2.每个变量都有默认值

     byte,short,int ,long 默认0

     float,double 默认0.0

     char 默认 '\u0000'(null字符串)

     boolean false

     引用类型 null

3.使用完毕就变成了垃圾,但是并没有立即回收,会在垃圾回收器空闲的时候回收。

栈内存的特点:

栈内存的数据用完就释放。

 

 

 

 

你可能感兴趣的:(java基础知识积累)