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.服务器端继续等待新的连接
- Java基础01:基础
- Java基础:基础加强
- Java基础-基础
- java基础的基础
- JAVA基础---基础常识
- Java基础:基础加强
- [Java 基础]基础语法
- Java基础
- java基础
- java 基础
- java基础
- Java基础
- Java基础
- Java基础
- JAVA基础
- JAVA基础
- JAVA基础
- java基础
- (七)ROS使用OpenCV读取图像并发布图像消息在rviz中显示
- 欢迎使用CSDN-markdown编辑器
- ubuntu环境下下载FFMpeg(1)
- SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
- go语言xml文件的解析及生成代码示例
- java基础
- AngularJS 项目创建
- Linux初级学习之软件安装 第十三章学习笔记
- Ant Design of React Modal显示数据错乱问题
- 记一次KafkaClient poll阻塞的问题
- 用PHP实现一个关于德州扑克算法的程序(二):排序
- Linux学习笔记(3)
- Windows 7下Git SSH 创建Key的步骤(by 星空武哥)
- Strust2+Spring+iBatis 20170413