JAVA基础知识总结

第一章  JAVA的概述
1. JAVA的特点和优势:面向对象,健壮性,跨平台,并发性(多线程) / 
     java的虚拟机(JVM).垃圾回收机制(GC)
2. JAVA程序的开发三部曲
        编写java源代码->编译java代码(.class文件  (javac   xxx.java) )->执行程序(java  xxx)   / javadoc   xxx.java


第二章 JAVA的基本语法
1.数据类型(8大基本数据类型):整数型 byte(1字节)    short(2)   int(4)   long(8) 默认值都为0
   浮点型 float(4)默认值为0.0f      double(8)   默认值为0.0    
   字符型 char(2) 默认值为'\u0000'   在UTF-16中表示为0的字符 
   布尔型 boolean(不确定)  默认值为false
2.变量   
 java中为变量内存分配(对指针封装了) 在堆中错数据 在堆栈中存引用(地址)
 标识符  数字,字母,下划线,"$"  ,不能以数字开头。
3.数据类型之间的转换
 自动类型转换(隐式转换):  小范围向大范围转换
 强制类型转换(显示转换):  double d=1.25;  float f=(float) ;
 (不能在布尔型和其他数字类型之间转换)
4. 运算符  
 算术运算符  +    -   *   /    %   ++  --
 赋值运算符   =   +=   -=   *=  /=   %= 
 关系运算符 > <  >=   <=  !=  ==
 逻辑运算符&& ||  !  &   |  ^
 位运算符&   |  ^    ~    <<   >>    >>>
 
5. 表达式  
 表达式的优先级(14级)
6.控制流语句
 判断(条件)语句 :if    if...else     switch...case
 循环语句:while    do...while    for
 跳转语句:break   continue
7.数组  
 声明: 数据类型[ ] 数组名    /数据类型  数组名[ ]
 创建:数组名=new 数据类型 [ 长度]   
 数据类型[ ] 数组名=new   数据类型 [ 长度]   / 数据类型[ ] 数组名={  数据  }
 数组名在堆栈中  数据在堆中
 
 多维数组:数据类型[ ][ ] 数组名=new 数据类型 [ 长度][长度]   
 对象数组:对象名[ ] 变量名=new 对象名[长度]

第三章 面向对象

1. OOP面向对象
 封装性:将一个对象的属性和方法封装以来
 类:具有相同属性和方法的集合体  属性,方法,构造方法
 对象:一个类得实例
 对象在内存中的存储方式:Person person=new Person()   变量名person存在栈内存中,作为一个对象

的引用,指向一个对象,这个person对象存在堆内存中。
 this关键字:可以看做是一个变量,它的值就是当前对象的引用,它指向对象本身。
 权限控制:public  公共的
  protected    受保护的(父子类中)
  _________    包权限(在同一包里)
  private 私有的
  
 
 继承性:用已经存在的类构建出一个或多个子类的机制(java只能单继承)
  构造函数不能被继承,。
  在创建子类的时候会自动先创建分类的实例,再在这个父类实例上添加子类特有的属性和方法。
 super关键字:在子类中用super()显示的调用父类的构造方法
 static 关键字:表示静态的,它所修饰的属性和方法都是属于类得,可以直接用类名去调用。 
 final关键字:最终的,它修饰的变量的值不能变,用static final修饰的变量在声明是就赋值,final修饰的

属性必须在构造器结束之前赋值。final修饰的方法不能被重写,final修饰的类不能被继承。 
 
 
 多态性:条件:1.在继承机制下,2.有方法的重写 3.父类引用指向子类对象(将父类实例转成子类 类型

用instanceof 判断两个对象是否是同一类型    if("引用型变量" instanceof"类型")
  多态能使得同一函数在不同类中有不同的实现。

 方法的重载和重写:
  重载:方法名相同,参数不同(个数,顺序,类型),返回值可以不同,在同一个类中。
  重写:方法的签名相同(方法名相同,参数相同,返回值相同)  在父子类中。
 
 对象的类型转换:强制向下转型:将父类转成子类(当父类对象变量指向的是父类型,不能转换.)
   向上转型:将子类转成父类(父类引用指向子类对象)
2.抽象类(abstract)
 含有抽象方法的类就是抽象类,(也可以没有抽象方法)不能new,但可以引用子类对象。
 
3.接口(interface)
 所有的方法都是抽象方法,(可以只定义常量,没有任何方法),
 接口不是类,在接口内没有构造方法。不能new ,但也可以实现多态,接口的引用指向子类对象
 可以被其他类实现(imlenments),可以实现多个接口。接口也可以被继承。
4.适配器:实现接口中的一部分方法。

5.嵌套类(nested class):在类中声明的类,也叫内部类(inner class).
 内部类可以访问创建它的外部类的属型和方法;不能为同一包中其他类所见,可以更高的封装。
 内部类可以看做外部类的一个成员,和外部类的成员变量,成员方法并列存在。
 内部类分为:局部内部类:在外部类的方法体内声明的内部类。
     匿名内部类:没有声明名称的内部类,直接使用。
 静态嵌套类:用static修饰的嵌套类。相当于外部声明的一个类,它只能访问外部类中的静态成员。
   
第四章  JAVA异常

1.异常(Exception):运行时的错误,逻辑问题。
   java异常的层次结构
    Object

    Throwable
  error(JVM系统处理)     exception(可抛出的异常)
 
     runtimeException (可以不处理)       not 

RuntimeException(需要处理,会有语法错误,不能通过编译) 
2. 异常的处理:运行时如出项异常,会自动生成一个异常类的对象,将这个对象提交给java运行时系统,这叫抛出异常

;由java运行时系统接受这个对象,会再抛出异常附近找到能处理这个异常的代码,把这个异常交给这个代码块,这叫

捕获异常;最后由代码块处理这个异常,这叫处理异常。
 try {     (try不能单独存在,后面必须有catch,或者finally)
  捕获异常 
 }catch(异常类型 e){
  处理异常
 } catch(异常类型 e){
  处理异常
 } finally{
  一定执行的代码
 } 
       
3.异常的手动抛出:throw和throws
4.自定义异常
5.断言
 assert  表达式1;若1为true,继续执行,为false 则抛出异常,
 assert 表达式1:表达式2;如1为true,2不执行,程序继续执行;如1为false,2就为一个异常对象,并

抛出该对象。、

第五章  JAVA API(应用编程接口)
 
1.包: java.lang   java常用包sun定义;javax扩展包sun定义;org第三方包;
 java.util
 java.io
 java.sql
 java.net
 java.swing
 java.math
2 java.long(基础包)
 主要的类:基类:Object
  包装类:八种基本数据类型的包装(装箱,拆箱)
  数学类:Math类 
  字符处理类:String,StringBuffer
  反射类:Class
  系统类:System
  运行时环境类:Runtime
 主要的方法:equals()    hashCode()    toString()    getClass()   finalize()资源回收
     字符串的比较: equals()比字符串的值,“==”比较地址
  String方法:  indexof()    chatAt()   split()     trim()
  
  StringBuffer的方法:append()     insert()   toString()转换为字符串输出 
    reverse()反转字符串   replace()
3.java.util(工具包)
 主要的类:   主要方法
 Random(产生随机数)  Random();      nextInt(n),nextDouble(),
 Scanner(扫描输入文本) Scanner scanner=new Scanner(System.in)
    int i=scanner.nextInt();读取一个整数

 Arrays操作数组的类   sort(int[ ]  a)快速排序的方法   copyof()
 
 Data类          new Data();   getTime()   toString()
 Calendar抽象类  Calendar.getInstance()获得实例
 这个对象之间的转换  Data转Calendar      Data data=new Data();Calendar

cal=Calendar.getIntance();cal.setTime(data);
    Calendar转Data      Calendar cal=Calendar.getIntance();   Data 

date=cal.getTime();
 国家化相关的类Locale;  MessageFormat
 日期格式化的类DataFormat   
 数字格式化的类NumberFormat(抽象类)
 

 
 集合框架:用来存数据的容器,优于数组,可变长,数据结构,算法
 4个部分组成  
    collection接口(一次存一个)
 
 list接口(动态数组,有序可重复)    set接口(无序不可重复,散列码)
ArrayList  (优于查)   LinkList(优于删,添)     Vector  HashSet    TreeSet
 基本方法:size()  get()  add()     iterator()   hasnext()  next()


  Map接口(一次存一对  ,键值对的形式)
 HashMap(存对象)  Hashtable properties(存字符)
 基本方法:size() put(k,v)    get(k)    keyset()


 排序接口:comparable comparator
 工具类:collections

 迭代器:Iterator可以对集合进行迭代

4.正则表达式
 4.1语法:限定符:“ * ”  0或多个    “  + ” 1或多个   “ ?”  0或1个   {n}  n次   {n,} 至少n次   {n,m}  n到m次
                    选择符:“ |  ”  两个中的任意一个
  字符匹配集:[abc ]任意一个;[^abc]非abc的字符;[a-z] ;[ ^a-z];   "  . " 匹配除“\n”外所有的单

个字符;      
   \d  数字字符;\D非数字字符;
   \w 任何单个字符,包含下划线;\W 任何非单个字符;
   \s 空白字符"空格,制表符,换页符";\S 任何非空白符;
  定位符: ^  字符串开始的位置
   $结尾的位置
   \b 匹配一个单词边界  er\b   never;
   \B 非子边界匹配
 4.2正则表达式的使用
  java.util.regex     Pattern和Matcher
  构造一个模式:Pattern p=Pattern.compile("正则表达式")
  建造一个匹配器:Matcher m=p.matcher(输入的字符串);
  进行判断:boolean  b=m.matches("regex",输入的字符串 )
  Pattern.compile(regex).matcher(input).matches();
 4.3 常用的正则表达式实例
  中文名:Pattern.matches("[\\u4E00-\\u9FA5]+",cn)   (cn为传进来的参数)
  邮箱地址:"[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9]+"
  手机号:"^1[3568]\\d{6}"
  邮政编码:"\\d{6}"
  

5.java.io( 包括文件和流的操作)
 5.1   文件(File)        new    File(String filename);
  属性方法....
  创建: 目录:mkDir()   mkDirs()
   文件:createNewFile()
    isExists()是否存在
  删除: file.delete()
  查询的方法  (循环递归目录结构)

 5.2  IO流  相当于一个管道,用来传输数据。
 4中抽象流类
   输入  输出
 字节  InputStream outPutStream

 字符  Reader  Writer
 
 
 文件流:File+4中抽象类流
 缓冲流:Buffered+4种抽象流类 (提高数据的读写速度,先创建一个内部缓存区数组,将数据先放在缓冲

区)
 转换流:InputStreamReader  OutputSreamWriter  (字节流和字符流之间转换)
 数据流:DataInputStream   DateOutputStream   (用来读取和写出基本数据类型的数据)
 打印流:PrintStream   PrintWriter (将基本数据类型数据,字符串,对象数据格式化成字符串输

出)
 对象流:ObjectInputStream   ObjectOutputStream 
 随即存储文件流:RandAccessFile      可读可写  任何位置

 基本方法:read()   close()   read(byte[] start,len)    flush( )   write();
     

 

第六章  多线程

6.1 进程的概念:每个独立的程序在计算机上的一次执行活动。(有独立的代码和数据空间)
       线程的概念:一个进程由多个线程组成,线程就是进程内部的一个执行路径,一个程序在同一时间内可以执行多个

线程,那么程序就是支持多线程的。(共享相同的代码和数据空间)
6.2.线程的创建和启动   两种方法
 第一种:继承Thread类,并重写run()方法
  Thread  thread=new Thread();
  thread.start();
 
 第二种:实现Runnable接口,重写run()方法
  MyRunnable  mr=new MyRunnable();
  Thread thread=new Thread(mr);
  thread.start();
 
6.3  线程的状态和生命周期
 
 

 新建线程---start()------>就绪状态-------(系统调度)--------->运行状态------run()-------->死亡状态
 运行状态--------sleep()  jion() wait()----------->睡眠,挂起--------超过时间--------------->就绪
 运行状态----------wait()  yeild()   jion() ------------->等待状态-------------notify()  notifyAll()---->就绪
 运行状态--------------------对象锁------------------------->阻塞状态------------------解锁----------->就绪

 thread.sleep(1000) 睡眠一秒
 yeild() 暂停当前的线程,并执行其他线程。
 join()等待线程终止。自己先用。
 
 后台线程:setDaemon()  守护线程  精灵线程
 线程的优先级:1-10级thread.setPriority(Thread.常量) 

 

6.4 线程同步:同一时刻只允许一个线程操作资源。关键字:synchronized放在方法的声明中。
  生产消费者问题。火车售票问题。

 

第七章  网络编程

7.1    HTTP协议:一种无状态的基于请求和响应的应用于Internet协议规则。B/S
          TCP/IP分层(对应的协议):应用层(HTTP,FTP,SMTP,TEMNET),传输层(TCP,UDP),网络层(IP,ICMP,ARP)

,网络接口层。
7.2  java.net  网络包
 类:InetAddress (封装了地址对象的类)用来表示IP地址。不能new一个实例 要通过静态工厂获得实例。
      InetAddress   inet=InetAddress .getByName(String  host主机名)
  URL:封装了统一资源定位符的类,只能读URL信息
  标准的url:协议名://地址:端口/资源名
  url=new URL("地址")创建URL对象
  URLConnection   connection=url.openConnection() 获得URLConnection对象,可读

写url信息。
  connection.connect()打开这个url的连接 可以用流到这个地址上读取资源
  in=new BufferedRead(new  InputStreamReader(connection.getInputStream()))获得输

入流,读取资源
     

7.2   socket(套接字)编程
 TCP:端到端的字节流通信协议,是面向连接的,要连接通了才开始发送数据,安全可靠,但是效率低。
 服务器端套接字(ServerSocket)
  创建ServerSocket(端口号) serverSocket=new ServerSocket(1234);
  通过accept() 获取一个Socket对象 s=serverSocket.accept();
  通过Socket获取inputStream和outputStream  s.getInputStream()  /  

s.getOutputStream()
  
  输入流:BufferedRead  in=new BufferedRead(new 

InputStreamReader(s.getInputStream()))
  打印流:PrintWriter out=new PrintWriter(new

OutputStreamWriter(s.getOutputStream()))


 客户端套接字(Socket)  
  创建Socket("ip",端口号) Socket  s1=new Socket("192.168.100.105",1234);
  
  通过Socket获取inputStream和outputStream  s1.getInputStream()  /  

s1.getOutputStream()

 

 UDP:提供一种发送原IP数据报的方法,发送时无需连接好,只要将目的地记录在数据包中,所以不安全


  发送端: 创建一个要发送的数据包:DatagamPacket  dg=new DatagamPacket(ip,接受

端的端口,数据内容,长度);
   创建发送数据包的Socket,通过指定的端口来发送  DatagramSocket  s  = new 

DatagramSocket(自己本身的端口);
   发送:s.send(dg);
  接收端:  创建一个接受的数据包:DatagamPacket  dg=new DatagamPacket(buf,  

buf.length);  
   创建接受数据包的Socket,通过指定的端口来接受  DatagramSocket  s  = new 

DatagramSocket(自己本身的端口);
   接受数据:while(true){
     s.receive(dg);//在收到数据前一直处于阻塞
     
     String content=new

String(dg.getData(),dg.getOffset(),dg.getLength());//用这三个方法访问刚刚接收到的数据
     System.out.println(content);
    }

 

第八章   JAVA图形用户界面编程(GUI)

开发环境:eclipse+swt插件
SWT事件模型:事件源---->监听器------------>处理
 运用内部类
 

 

第九章  反射和注解

1.反射机制:运行中的java程序对自身的检查,(运行时类得一种自省的机制)
 作用: 在运行时判断任意一个对象属于哪个类
  在运行时构造任何一个类得对象
  在运行时判断任意一个对象的成员变量和方法
  在运行时调用任意一个对象的方法,通过反射甚至可以调用私有的方法
  生产动态代理
 所有的类:Class:Class类得实例表示正在运行的java程序中的类和接口
  Field:封装了反射类的属性的类
  Constructor:封装了反射类的构造方法的类
  Mehtod:封装了反射类的方法的类
  Array:
 获取Class对象:三种方法
   1:用Object 的getClass()方法获得Class对象 MyObject  my; Class

c1=my.getClass();
   2:   用Class类得forName()静态方法获得与字符串对应的Class对象    Class

c2=Class.forName("java.lang.String");
   3:   用类型名.class获取      Class  c3=Manager.class;
 方法:getName()  getField()   getMethods()    getAnnotations()
 创建这个Class对象所表示的类得一个新实例:   
   1:使用无参的构造方法创建    注意:如果指定名称的类没有无参的构造函数,则在调

用这个方法是会报错。
    Class c2=Class.forName("java.lang.String");      
    String  str=c2.newInstance()
   2:使用带参的构造方法创建
    加载指定名称的类,获取Class对象:Class

c2=Class.forName("java.lang.Date");
     获取具有指定参数类型的构造方法: Constructor  constructor

=c2.getConstructor(指定参数类型 int.class);
    通过 Constructor对象的newInstance方法来创建实例  Date  date=

(Date) constructor.newInstance(1234);
   
 

2.注解(Annotation)
 元数据:用于描述数据的数据(XML--->DTD/Schema)
 注解:java源代码的元数据    
 语法: @注解的名称

 JDK内置的注解(预定义注解): @Override  重写方法  //注解: 在编译时起作用    代码检查
    @Deprecated 指明方法过时
    @SuppressWarnings 抑制编译器警告

 自定义注解:语法   @Documented//生成文档
   

@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})//表示注释的位置
   @Retention(RetentionPolicy.RUNTIME)  //运行的时机
   public @interface HelloAnnotation {
    public String name()default "先生/女士";   //注解的一个成员,属性 
   }

3.代理机制

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值