JAVA基础知识

JAVA基础知识总结

 

1.面向对象分析、设计、编程。面向对象编程特点:抽象(提取我们需要的东西)、继承、封装、多态。面向对象的思想更加接近我

现实生活中的处理问题的思路

 

2.类、对象、成员变量、局部变量(方法内定义)。成员变量分为常量(final修饰的,声明时初始化,不可改)、实例变量、类变量

(用static修饰)类变量是在类的对象被创建之前就初始化了,加载字节码的时候初始化,所以在实例化对象后,分配内存的时

候,类变量是不分配的,但会保存一个对类变量的引用,类变量是放在全局代码区中。变量作用域:成员变量在整个类中,局部变

量(在局部变量创建开始到本层第一个”}”结束)

 

3.如果一个类中,多个方法使用同名的局部变量,就可以把此局部变量声明为成员变量;如果一个类中,多个方法中使用几行相同

的代码,就可以把这几行代码抽象出来,形成一个新的方法;在多个类中,如果使用了几个相同的成员变量或成员方法,就可以把

这几个成员变量和成员方法抽象为一个类;定义方法时的局部变量可以不初始化,在调用的时候要初始化

 

4.Java中传参方式,只有一种,是传值方式,又可以分为基本数据类型的传值,形参的改变时不会影响实参的。一种是引用数据类

型的传值,传递的是地址,所以形参与实参是指向同一内存空间,形参改变,实参也会改变

 

5.方法重载:方法名称相同,参数不同,表现在参数个数不同、类型不同、顺序不同

 

6.构造方法:与类名必同,没有返回值,必省略void。构造方法的创建,作用是生成对象并对对象初始化

 

7.方法分类:实例方法,通过对象访问,可以调用实例变量和类变量,实例方法可以调用实例方法和类方法。类方法,static修

饰,可以通过类名和对象来访问,但是只能调用类变量,类方法为类所有实例共享,只能调用类方法。This调用当前类的成员变

量,this(参数)调用当前类的构造方法,必须放在构造方法的第一行,this只能在构造方法和实例方法中使用,针对其调用成员方

法的情况,如果是this()只能用在构造方法中调用构造方法,且放在构造方法的第一行。要想知道详细的程序执行过程要使用debug

来操作。New操作的时候会去调用构造方法,在执行构造方法之前先去初始化成员变量。

 

8.修饰符有四个:public、protected、默认、private

在当前类体内,此类的对象可以访问此对象中所有的成员变量和成员方法

在同一个包中,此类的对象只能访问此对象中非私有的成员变量和成员方法

在不同的包中,此类的对象只能访问此对象中公有权限的成员变量和成员方法

在同一个包中,子类可以继承父类中非私有的成员变量和成员方法

在不同的包中,子类只能继承public和protected修饰的成员变量和方法

对类来讲修饰符只有两个,public和默认,不包括内部类

 

9.基本数据类型及其对应的封装类:使用这些封装类是的不同数据类型相互转为操作方便

byte short int long float double char boolean

java.lang.Byte  java.lang.Short java.lang.Integer java.lang.Long

java.lang.Charactor java.lang. java.lang.Byte

因为提供封装类,类中有成员方法,需要查阅API,其中会提供很多转换的成员方法

 

10.继承的优点:减少代码冗余、易于维护、方便扩展,extends 单继承。同一个包中,子类可以继承父类中非私有的成员变量和方

不同包中,子类只能继承父类中public和protected修饰的成员变量和方法。方法的重写发生在子类和父类之间,子类中重写的方

法的权限不可以比父类中定义的权限低。Super指当前类的直接父类的对象,super.成员变量 super.成员方法的方式调用父类被重

写的方法。重载、重写是多态的一种表现方式,体现可扩展性,属性的重写道理是一样的。在调用成员变量和成员方法的时候,默

认会在其前面加上this关键字。

 

11.子类在实例化的时候会先去实例化父类,没有父类就没有子类的存在。父类和子类的初始化顺序

加载字节码的时候,先初始化父类的静态成员变量->子类的静态成员变量->到main方法中,实例化子类的对象时->先初始化父类中

的实例变量->执行父类构造函数->实例化子类中的实例变量->在执行子类的构造方法。Super()当前类的直接父类的构造函数,在子

类构造方法中使用,且必须是在第一行。

 

12.向上转型可以掉用继承父类的方法,可以调用父类中被子类重写的方法,且只能调用父类中定义的成员变量和方法,上转型丢失

了子类自己定义的成员变量和方法,上转型对象点成员变量,则成员变量肯定是父类中的成员变量。上转型对象调用的方法中所操

作的成员变量是该方法所在类的成员变量,可以将上转型对象强制转换为子类对象,此时子类对象拥有其所有的成员变量和方法

不可以直接将父类对象强制赋值给子类引用,在下转型之前必须要先上转型操作

 

13.Final修饰的类不可被继承,方法不可重写,但是可以重载 变量定义时必须初始化,之后不可修改。Finalize(),用户回收当前

对象,回收条件是当前对应没有引用了。Abstract类,包含了abstract方法的类,只声明不实现,必须被继承,注意抽象类也可以

没有抽象方法的。接口:interface修饰,所有方法是抽象的public abstract,所有成员变量是public static final,接口回调

接口 接口引用 = new 接口实现类();接口的权限修饰符为public或默认类型。接口与接口之间是可以多重继承的,类可以实现多个

接口,接口并不是一个类,但是将成员变量放到接口中并不是好的方式

 

14.异常:中断程序正常执行的任何条件,

程序出错的时间:编译时出错  -----------一般语法错误

                运行时出错---------异常

异常的分类:error 运行时,发生的错误,但此错误不可处理,例如 机器故障

            Exception 运行时,发生的错误,错误可处理 例如 int i = 2/0

我们通常说的异常是指exception,所有的异常类的父类是java.lang.Throwable,但是该类不能直接使用。当在Eclipse中保存java

文件的时候,就会编译成字节码,错误会提示,所以不会出现编译时异常,我们只讨论运行时异常

Throwable-------error、exception

其中exception的子类runtimeexception以及runtimeexception的子类是不需要我们处理的,当然也可以处理的但是没有必要,其他

异常都需要处理

异常处理:throws   try{}catch(){}finally{}

采用throws处理异常,一旦出错,程序立刻结束执行,被动处理异常向上抛

Try catch主动处理异常,一旦出错,程序可以继续执行,一般情况会在catch语句块中使用throw 异常对象,继续想上抛异常,程

序也不会在想下运行了

自定义异常:创建一个类,继承已有异常类,重写方法,创建此类的构造方法,让其调用父类的构造方法,重写getMessage()

printStackTrace() ,toString() ,这三个方法是相互调用的,一般是不需要重写的,

printStackTrace{toString();/// }   toString(){ this.getClass().getName()+getMessage() ;}如果要重写只要重写一个就可

以了,一般不要重写,没有必要

 

15.java集合collection接口 list set 接口 map

接口list的实现类arraylist,接口继承了接口collection,arraylist间接的实现了collection接口,其是一个容器,内部可以放

各种类型的数据,但是要求是对象。

List list = new ArrayList();

List.add(“object类型的对象”); list.get(“0开始下标”)取出的是object类型的对象,要向下转型,因为在存的过程中已经向

上转型了,所以这里向下转型是没有问题的;

集合迭代的迭代器:Iterator  hasNext() ,next() remove().从迭代器指向的集合中移除迭代器返回的最后一个元素

List的三个常用的实现类arraylist  LinkedList vector

Arraylist:元素的存储的顺序是连续的  LinkedList:元素存储地址是不连续的 vector:与Arraylist基本一致,但是vector是线

程安全的

Set接口,就像数学概念中的集合,其中的对象是无序的,且不能重复,list是有序可重复的,实现类hashset,只要两个对象的值

(equals())相等,就不会重复存储该对象,通过String来测试。Set接口的另个实现类是treeSet,其中对象是升序排列的,hashset

中可以存储任意类型的对象,treeset只能存储可以和当前对象进行比较的对象 

Map接口,map不像list set(下标集合自动生成的) 下标是自己手动指定的,我们称为key ,对应的值是value,一个key对应一个

value形成的键值对构成一个entry,map是有多个entry构成的。其实现类是hashmap

Map<String,String> map = new HashMap();

map.put(1,”hello”);

map.get(1);

通过keySet获取到map中所有key的映射:

TreeSet keyset = new TreeSet(map.keySet());//创建对象的方式,第一:看是否通过其他的方法返回所需要的对象,第二:使用

构造方法来获取对象,第三:查看相关API

获取keyset的迭代器,拿到key,根据key取到value    

Map的另一个实现类似TreeMap, map中存放的是对象以键值对的形式存储。Hashmap和treemap都可以存储null建和null值。

hashtable不可以,Hashmap和hashtable存储对象无序,treemap是按键升序排列,注意如果在存储时出现键值重复的情况,会用新

的value替换掉之前的value

 

16.JavaI/O流:数据输入输出的管道

按流的方向:

输入输出流是相对概念不是绝对的概念 inputstream(abstract),fileinputstream,reader(abstract) filereader(extends

reader) outputstream ,fileoutputstream, writer(abstract) filewriter(extends writer)

按输入输出数据块的大小:

字节流:一次读一个字节的数据,在输入输出图像数据的时候,就必须要字节流了, inputstream,fileinputstream

outputstream ,fileoutputstream,

字符流:一次读一个字符数据,一个字符占用两个字节,要读的快,如果是汉字,一个汉字占用两个字节,如果按字节流输入输

出,就会将汉字拆分成两个字节,造成乱码了, reader(abstract) filereader(extends reader) writer(abstract) filewriter

(extends writer)

Iuputstream in  = new FileInputStream(“c:\\test”);

Ouputstream out  = new FileOnputStream(“c:\\test1”,true);如果文件中有内容,则采用追加的方式加入数据,为了控制和源

来数据之间的换行,在输出信息后,在多输出一个”/r/n”,表示输出数据后,光标自动换行

把一个文件中的内容拷贝到另一个文件中,涉及到两个流,注意,后打开的流先关闭

注意在使用功能流,带缓冲区的输出流的时候,会将数据先放到缓冲区的,如果缓冲区满了,会写到文件中,如果没有满,需要调

用的flush方法,将缓冲区的数据写到文件中。

按流的功能:

节点流:以上都是节点流

功能流:bufferedinputstream bufferedoutputstream bufferedreader bufferedwriter

在使用功能的流的前提是先打开了节点流,依赖于节点流

Bufferedreader :readline()一次读一行,BufferedWriter:newLine()写入换行,调用一次,在

写到文件的时候就会换行,通过判断readline()!=null,可以统计文件行数

 

17.File操作:

可以获取到file对象代表文件的绝对路径

File.listFiles()

File.getAbsolutePath();

File.isFile()

递归的列出所有的目录和文件

Public void listDir(String url){

File f= new File(url);

If(!f.exist()){

Return;}

If(file.isDirectory(){

File[] fs = file.listFiles();

For(int i=0 ; i <fs.length ; I ++){this.lsitDir(fs.getAbsolutePath());}}else{

If(file.getAbsolutePath() .endwith(“.java”){System.out.println((file.getAbsolutePath())})//控制输出java后缀的文件

})

}

return;结束方法体

 

18.线程的创建方式:

继承Thread 实现Runnable接口

一般类和线程类的区别:

Os:多个进程以时间轮询的方式在运行,一个进程中可以有多个线程,在同一个时间只能有一个线程在运行。

线程类的创建:定义一个实现runnable接口类,实现run方法,然后启动线程类 Thread t = new Thread(实现runnable接口的对

象) t.start();

线程类的创建方式2:创建一个继承Thread的类,调用start()方法,

改变程序的执行路线,相当于有多个应用程序在执行,main方法也是一个线程在执行,

线程是抢占式的,有各种运行状态,

Thread.sleep(1000);//单位是毫秒,控制线程状态

Thread.yield();//暂停当前正在执行的线程对象,执行其他的线程

 

19.使用java程序连接oracle数据库:

注意:Oracle安装好后,其中带有jdk,会自动将其bin目录加到环境变量path的最前端,这样的覆盖了之前配置的jdk,所以需要将

之前配置的jdk放到path的最前端。

String url = “Jdbc:oracle:thin:@localhost:1521:数据库名称”;

Class.forname(“oracle.jdbc.driver.OracleDriver”)//在jar包中取找,对应的包名加类名

Connection conn = DriverManager.getConnection(url,username,password);

Blob和clob类型数据的读取

在oracle中

ps.setBlob(1,Blob,getEmpryBlob());

ps.setClob(1,Clob,getEmpryClob());

先将blob和clob对象设置为空

查询空对象:

Blob b = (Blob)rs.getBlob(“image”)

Clob c = (Clob)rs.getClob(“context”)

在查询时防止其他人修改,要加乐观锁

InputStream in = new FileInoutStrean(“xx.jpg”)//将文件拷贝到项目的跟目录下,可以直接访问到

OutputStream out = b.getBinary OutputStream();

Byte [] t = new byte[1024];

While(){}

Out.flush();

Out.close();

注意使用hibernate就避免这种问题

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值