Java知识总结

一   基础知识

几个值得注意的地方:

1 数据的转型:分为自动转型和强制转型

其中自动转型,要 (1)转换前的数据类型与转换后的类型兼容(2)转换后的数据类型的表示范围比转换前的类型大 两个条件同时成立时,才会自动转型

而强制转型则要:(要转换的数据类型)变量名称,如果将一个超出该变量可表示范围的值赋值给这个变量时,可能会丢失数据的精确度。

2 “&&”为短路与,而“&”为与。同理“||”为短路或,而“|”为或。

3 Java新特性:

 (1)可变参数:返回值类型 方法名称(类型...参数名称){

}

(2)foreach输出:for(数据类型 变量名称:数组名称){

}

二  面向对象

1 Java与C语言最大的区别是,Java是面向对象的语言,而C是面向过程的语言。面向对象最主要是:3个特性,为封装性,继承性,多态性。

封装性:(1)把对象的属性与行为封装在对象中。(2)通过不同声明方法的作用域来进行控制属性和行为的是否可见性。

继承性:(1)继承父类,但这种方法只能单继承。(2)实现接口,这种方法可以实现多继承。

多态性:(1)方法的重载,即允许方法同名,但方法的参数数量或者类型不同,其完成的功能也不一样

                 (2)方法的覆写:覆写发生在继承类黎,要求方法,参数,返回值类型都一样,被覆写的方法不能拥有更严格的权限。

                (3)对象多态,分为向上转型 :子类对象->父类对象  格式为:父类 父类对象=子类实例

                                                      向下转型:父类对象->子类对象  格式为:子类 子类对象=(子类)父类实例

2 构造方法:(1)构造方法名称必须与类名称一样。(2)不允许有返回值

一个类里允许有多个构造方法,调用时会根据参数的多少或类型来匹配。

一个类里也允许没有构造方法,这时系统会自动该类创造一个空的构造方法。

注意:当人为创造了构造方法时,系统则不会创造一个空的构造方法了。

3 this() 作用:(1)调用本类中的方法 (2)用来表示类中的属性 (3)使用this()调用的构造方法 (4)表示当前对象

super()作用:(1)调用父类中的方法 (2)用来表示父类中的属性 (3)使用super()调用父类的构造方法

使用this调用属性或方法时先从本类中查找,如果没有查找到,再从父类中查找,而直接使用super则直接从父类中查找。

4   访问权限:private声明的属性或方法,只能在本类中使用

                         default声明的属性和方法,除了在本类中使用,还可以在同一包中的类使用。

                         protected声明的属性和方法,除了在本类,同一包中的类使用,还可以在不同包的子类使用

                         public声明的属性和方法,在本类,同一包中的类,不同包的子类,其他包中的类都能使用。

5    包装类:这个类是为了将基本类型包装成类的形式。其中名称变化较大的是:int->Integer char->Character 其余都是将首字母改为大写即可。

                    其中基本数据类型转换为包装类的过程称作装箱操作,而包装类变为基本数据类型的过程称为拆箱操作。

6   抽象类与接口:抽象类作为一个模板,而接口作为一个标准或表现一种能力。两者最大的区别为抽象类不能实现多继承,而接口可以。所以在都可以使用的情况下优先使用接口。

7   异常:分为RuntimeException 与Exception,其中RuntimeException 可以不使用try...catch进行处理。而Exception必须使用try...catch 进行处理。

            throws用在方法声明处,而throw用于在方法中手工抛出异常。

三 应用程序设计

1 多线程:有两种实现方法,一是继承Thread类,二是实现Runnable接口。

  但是当一个类继承Thread类时,不适合多个线程共享资源,而实现了Runnable则可以方便实现资源的共享。

  在资源共享时,要注意同步问题,解决这个问题,可以使用同步代码块与同步方法。

同步代码块:synchronized(同步对象){

                        需要同步的代码

                         }

                        synchronized 方法返回值 方法名称(参数列表){

                        }

  但在同步时,又有另一个问题,那就是死锁问题:

  产生死锁的原因:(1)互斥条件 :所谓互斥就是进程在某一时间内独占资源。

                                  (2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不变

                                  (3)不剥夺条件:进程已获得资源,在未使用完之前,不能强行剥夺。

                                   (4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

2 常用类: 

(1)String类:

  直接赋值实例化:这种实例化好处:如果一个字符串被一个名称所引用,则以后再有相同的字符串声明时,再不会再重新开辟空间,而继续使用已经开辟好的堆内存。

  new  String(""):则是开辟了两个空间,一个是“”字符串空间。一个是new出来的空间。

 使用String类有一个重要的特性是,字符串内容不可改变。

 (2)StringBuffer类

  这个类支持的方法大致与String类相同,但有一点它的字符串内容可以进行修改。

  所以在对于频繁修改字符串内容的地方最好使用StringBuffer类完成

  (3)日期操作类

      Date类:可以通过Date类得到系统当前日期,但格式不符合我们日常生活中看到的

      Calender类:可以通过Calender类得到日期的某一字段的值

      DateFormat类:可以通过DateFormat类来格式化日期时间,但不能得到用户自己需要的日期显示格式。

      SimpleDateFormat类:可以通过SimpleDateFormat类得到用户自己需要的日期显示格式。

  (4)Random类

       生成随机数

   (5)Arrays类

     用于数组元素的查找,数组内容的填充,排序

     (6)Comparable接口
     通过实现这个接口,可以自己实现排序规则。

     (7)正则表示式

      Pattern类是用来编写正则规范。实例化需要使用compile()。如Pattern p=Pattern.conpile(正则规范)

      Matches类则是用来执行规范。Matcher m=p.matcher(需要验证的字符串)。再通过m.matches执行规范。返回BOOLEAN值。

     特殊:String对正则表达式有支持.

 

3  JavaIO

  字节流:OutputStream,输出流;InputStream,输入流

  字符流:Reader :输出流;Writer:输入流

Java中IO操作:

   (1)使用File类打开一个文件

   (2)通过字节流或字符流的子类指定输出的位置

   (3)进行读/写操作

   (4)关闭输入/输出

 使用字节流时,输入输出都需要以字节为基础

 而使用字符流时,输入输出以字符为基础。而且输出是可以直接输出字符串。

 这只是代码上的区别,其实内部操作也有所不同:那就是字符流在操作时使用了缓冲区,通过缓冲区操作文件。而字节流没有使用到缓冲区。

 两者之间的转换:可以通过转换流 OutputStreamWriter 将OutputStream转换为Writer   InputStreamReader 将InputStream转换为Reader


内存操作流:(当生成一些临时信息时才会使用)

ByteArrayInputStream

ByteArrayOutputStream

管道流:(用于两个线程间的通信。)

打印流:字节打印流:PrintStream   字符打印流:PrintWriter

System类对IO的支持:System.out    System.err:向屏幕上输出。System.err是打印错误信息的。

                                            System.in 键盘的输入流:记得输入流有两种输入方式,一种是一次性写进字节数组,一种则是一个一个输入。这时应该注意中文字符,因为中文字符                                            是两个字节的。

BufferedReader类,用于从缓冲区中读取内容,构造方法里的参数为Reader。通常就用这个来接受键盘输入数据。

标准格式为:

BufferedReader buf=null;
buf=new BufferedReader(new InputStreamReader(System.in));
String str=null;
System.out.print("请输入内容:");
try{
str=buf.readLine();
}catch(Exception){
}
Scanner类:利用scanner.next()来接受内容。

注意使用该类,要注意分隔符的影响,可以用Scanner.useDelimiter(String pattern)来设置读取的分隔符


压缩流:

压缩:分为压缩文件,还是压缩文件夹,如果是压缩文件夹则要使用ListFile()方法将文件夹里面的File列出,再用压缩文件的方法压缩

现在讲述一下压缩文件的方法:

(1)先定义要压缩的文件,通过它创建一个输入文件流。

(2)在定义压缩文件的名称,通过它创建一个压缩输出流。

  (3)由于每一个被压缩文件都用ZipEntry表示,所以需要为每一个压缩后的文件设置名称

(4)再采取边读边写的方式来压缩文件。即

while((temp=input.read())!=-1){
zipOut.write(temp);
}
(5)关闭输入输出流。


对象序列化:将一个对象变为二进制的数据流。

ObjectOutputStream,ObjectInputStream

Serializable接口,实现了这个接口的类,表示该类具备了被序列化的能力。

注意:只有属性可以被序列化

 如果要选择性选择属性被序列化,可以有两种方式。

(1):实现Externnalizable接口;并覆写writeExternal(),readExternal()方法

  (2):利用transient关键字进行声明不被序列化的属性。


4 Java类集

(1)List接口:可以保存各个重复的内容。

         常用子类:Arraylist

  (2)Set接口:不可以保存重复的内容。

       常用子类:HashSet(无序) TreeSet(有序)

      Set接口是通过hashcode(),以及equals()方法来判断是不是重复的内容。

      而TreeSet是通过覆写compareto()方法来设置排序规则。

 (3)集合的输出

   通常是用迭代输出:Itertor

  如:假设all为一集合

Iterator<String> iter=all.iterator();
while(iter.hasNexr()){
System.out.print(iter.next()+"、")
}
   (4 )Map接口(存放键值对)

  常用子类:HashMap,Hashtable,TreeMap(可以排序,根据Key值),WeakHashMap,IdentityHashMap(特殊:key可以重复)

 TreeMap存放的Key值如果是自定义对象时,该对象所在的类必须实现Comparable接口。

Map接口的输出:不能直接输出

要:(1)将Map接口的实例通过entrySet()方法变为Set接口对象

        (2)通过Set接口实例为Iteror实例化

         (3)通过Itertor迭代输出,每个内容都是Map.Entry对象。

        (4) 通过Map.entry进行KEY->value的分离


当直接使用非系统类 作为KEY

如果要通过匿名对象查找对应的value值,则要自定义对象所在类覆写equals(),hashcode()方法

          

 5  Java网络编程

TCP: 需要专门的虚拟连接,可以进行可靠地数据传输

UDP:不需要专门的虚拟连接,传输不是很可靠 

TCP客户端:1.建立网络连接(指定连接的主机和端口) 2.交换数据(利用输入输出流)  3.关闭网络连接

TCP服务器:1.监听端口 2,获得连接 3交换数据 4.关闭连接。



UDP:有两种建立客户端连接的办法:DategramSocker ds=new DatagramSocket();该客户端连接使用系统随机分配的一个本地计算机的未用端口号

                                                                 DategramSocker ds=new DatagramSocket(9000);指定端口号

在UDP中,IO技术不是必须的,在发送数据时,需要将需要发送时数据内容首先转换为byte数组,然后将数组内容,服务器IP,以及端口号一起构造成一个DategramPacket类的对象,在调用send方法即可。

而接受数据的实现,当数据发送出去以后,就可以接受服务器的反馈信息,首先构造一个数据缓冲数组,该数组用于存储接受的服务器段反馈数据,该数组长度必须大于或等于服务器反馈的实际长度,然后以缓冲数组为基础构造一个DategramPacket包,最后调用连接对象的receive方法。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值