java基础

来源:互联网 发布:windows nas 教程 编辑:程序博客网 时间:2024/06/05 22:39

一、java语言特点:
    1、语言简单,代码干净,方便阅读
    2、面向对象的编程语言
    3、提供自动内存释放机制
    4、提供方便的引用关系,代替复杂的指针操作
    5、支持多线程开发的编程操作
    6、可移植性:(JVM虚拟机的好处)
二、安装JDK(java开发工具包)(下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html )
   1、安装jdk
   2、配置环境变量(系统变量):
         JAVA_HOME:  配置jdk安装路径             D:\Java\jdk1.8.0_92
         CLASSPATH:  配置类库文件的位置      .;D:\Java\jdk1.8.0_92\lib  (前面有个点代表当前路径)
         Path:       配置jdk命令文件的配置          D:\Java\jdk1.8.0_92\bin 
      PATH与CLASSPATH的区别:
        1)path是系统定义的环境属性,用于定义所有的可执行程序路径
        2)classpath是JVM定义的属性,在使用java命令解释程序的时候会自动找classpath加载      
三、数据类型
   *基本数据类型(是进行内容的操作,而不是内存的操作):
    1、数值型:
       1)整型:   byte(8bit,-128~127),short(16bit),int(32bit),long(64bit)                                默认值:0
       2)浮点型: float 单精度(32bit )  , double双精度 (64bit )                                                       默认值:0.0
       注:不同数值类型运算时,自动转换为大类型:long类型+int类型=long类型 
    2、字符型:    char  (16bit,unicode字符,16进制编码,最大的优势:可以保存中文)   默认值:'\u0000'
    3、布尔型:    boolean                                                            默认值:false
   *对应的类类型:Integer、Double、Boolean、Float、Byte、Short、Long   
   *引用数据类型(在数据交互过程中会占用内存空间):包括数组、类、接口                            默认值:null    
四、类与对象
    堆内存空间(Head):存储对象的具体属性信息
    栈内存空间(Stack):存储对象的地址
   * Car c = null;   声明一个对象(此操作开辟一个栈内存空间,该栈内存空间指向为空)
     c = new Car();  实例化一个对象(此操作开辟一个堆内存空间,该堆内存空间的指向为栈内存空间c)
     new关键字的作用:开辟一个堆内存空间,注:如果一个堆内存空间没有指向任何栈内存空间,那它将成为垃圾空间,将会被GC回收
     NullPointerException异常:原因只有一个,使用了没有开辟堆内存空间的引用对象(即引用为空)
   * 引用传递:本质在于同一块堆内存空间可以被不同的栈内存所指向
     Car c1 = new Car();
     Car c2 = c1; 
     注:如果c2原来有一个堆内存空间指向,那么当c1引用传递给c2后,c2原来指向的堆内存空间将变为垃圾空间
五、将字符串转换成字节数组:   
                      String str;
                      Byte[] bytes= str.getBytes();
                      Byte[] bytes= str.getBytes("编码格式"); //指定编码格式的转换                      
   字节数组转换成字符串 :     
                      String str = new String(bytes);
                      String str = new String(bytes, "编码格式");  //指定编码格式的转换
**************************************************************************************************************************************
二进制基础:
    JAVA中的二进制在跨平台中用的比较多:如文件读写、数据通信等,计算机为什么要用二进制:计算简单,简化了计算机结构
*  二进制的位运算:  (二进制位运算优点:特定情况下,计算方便,速度快,支持面广)
 1)& 与运算:两位全为1,结果才为1             ,特殊用法:清零,去一个数中指定位
 2)| 或运算:只要有一个为1,结果就为1       ,特殊用法:对一个数中的某些位置一
 3)^ 亦或运算:两个数相同则结果为0,两个数不同则结果为1
 4)<< 左移:将一个运算对象的各二进制位全部向左移若干位(左边的二进制位丢弃,右边的补零),若左移时舍弃的位不包含1,则每左移一位,相当于该数乘以2
 5)>> 右移:将一个运算对象的各二进制位全部向右移若干位(正数左补0,负数左补1,右边的数丢弃),操作数每右移一位,相当于该数除以2    
 6)>>> 无符号右移:将一个运算对象的各二进制位全部向右移若干位(左边补零,右边的数丢弃)
     原码:将一个整数按照绝对值大小转换成的二进制数成为原码。
     反码:将一个二进制数按位取反,所得的新二进制数称为原二进制数的反码
     补码:反码+1即得到补码。
* JDK内置的进制转换
          Integer.toBinaryString(int i); //将十进制 i 转换成二进制
          Integer.toHexString(int i);    //将十进制 i 转换成十六进制
          Integer.toOctalString(int i);  //将十进制 i 转换成八进制          
          //转换成十进制的操作
          Integer.valueOf("111110000011001", 2);
          Integer.valueOf("567", 8);
          Integer.valueOf("23AF", 16);
**************************************************************************************************************************************
* 在Java中,类的实例化方法一共有四种途径:
 1、使用new操作符
 2、调用Class对象的newInstance()方法
 3、调用clone()方法,对现有实例的拷贝
 4、通过ObjectInputStream的readObject()方法反序列化类
**************************************************************************************************************************************
* 反射的概念:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取信息以及动态调用对象的方法的功能称为java语言的反射机制
**************************************************************************************************************************************
* 集合类框架:
在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。
所有抽象出来的数据结构和操作(算法)统称为Java集合框架
 1、Collection与Collections的区别?
    Collection是集合类的上级接口,继承于它的接口主要有Set和List.
    Collections是针对集合类的一个帮助类,它提供了一系列静态方法实现了对各种集合的排序,搜索和线程安全等操作.
 2、List、Set和Map是否继承自Collection接口?
    List,Set是,Map不是。
  详细介绍: 
  1)List特点:元素有放入顺序,元素可重复 
  2)Map特点:元素按键值对存储,无放入顺序 
  3)Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
* List接口有三个实现类:LinkedList,ArrayList,Vector 
  1)LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢 
  2)ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低 
* Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet 


* Map接口有三个实现类:HashMap,HashTable,LinkeHashMap 
  1)HashMap非线程安全,高效,支持null;
  2)HashTable线程安全,低效,不支持null 
  3)SortedMap有一个实现类:TreeMap
**************************************************************************************************************************************
* 模块化设计:
  在开发过程中,一般情况下,最好是让各个功能模块各司其职,main()方法中只负责数据的输入输出和调用子功能。
  这种设计思想就叫模块化设计
**************************************************************************************************************************************
* 多线程编程:
  线程:程序执行流的最小单元。它是进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位。
  多线程:从软件或者硬件上实现多个线程并发执行的技术。在单个程序中同时运行多个线程完成不同的工作
  多线程编程是为了最大限度地利用CPU资源——当处理某个线程不需要占用CPU而只需要利用IO资源时,允许其他的那些需要CPU资源的线程有机会利用CPU。这或许就是   多线程编程的最终


目的
 一个使用了多线程技术的程序,包含了两条或两条以上并发运行的线程(Thread)
**************************************************************************************************************************************
Socket通信实现:
* IP地址和端口号组成了所谓的Socket(套接字)
* 常用的端口号:http:80,ftp:21,telnet:23
* java 提供的网络功能有四大类:
         1.InetAddress类 :用于标识网络上的硬件资源(表示IP地址相关信息)         
         2.URL类 :统一资源定位符 (表示Internet上的某一个资源的地址)
                url 由两部分组成:  协议名称+资源名称                                        
         3.Sockets类 :使用TCP协议实现网络通信的类         
         4.Datagram类 :使用UDP协议,将数据保存在数据报中,通过网络进行通信        
* Socket通信实现步骤:
   1.创建 服务器端ServerSocket和 客户端Socket
   2.打开Soctek的输入输出流
   3.按照协议对Socket进行读写操作
   4.关闭输入输出流,关闭Socket  
* 应用多线程实现服务器与多客户端之间的通信
    基本步骤:
   1.创建 服务器端ServerSocket,循环调用accept()方法等待客户端连接
   2.创建一个客户端Socket,并请求连接服务器端
   3.服务器端接受客户端请求,并创建一个专线连接
   4.建立链接的两个Socket在一个单独的线程上对话
   5.服务器端继续等待新的连接







0 0