Java学习笔记(一)
Java简介
Java的历史
Java是SUN公司高司令在上个90年代开发的一种编程语言,原名是Oak,最初是针对小型家电设备的嵌入式应用,互联网的崛起后,SUN公司对Oak进行了改造,正式发布了Java。
介于解释性和编译型的语言
Java介于解释性和编译型语言之间。编译型语言如C和C++,是直接编译成机器码执行。解释性语言Python、Ruby由解释器加载源码直接运行。Java是将代码编译成一种抽象的“字节码”,然后针对不同的平台编写虚拟机。
Java的一些版本
- Java SE:Standard Edition,标准版本,包含了标准的JVM和标准库
- Java EE:Enterprise Edition,在Java SE的基础上增加了大量的API和库,以方便开发Web应用、数据库和消息服务器,其虚拟机与Java SE完全相同
- Java ME:Micro Edition,针对嵌入式设备的的“瘦身版”,虚拟机和标准库都进行了缩减
Java版本
JavaSE
一般来说,Java的学习路线是,先学习Java SE,掌握一些Java的基础知识,继续学习Java EE,主要包括Spring框架、数据库开发、分布式框架等,之后可选Java的大数据开发或者移动应用开发方向。
Java中的一些基本概念
- Java语言的主要特征:
- 强制面向对象
- 分布式
- 健壮的
- 安全的
- 跨平台
- 解释性
- Java技术体系平台
- Java SE
- Java EE
- Java ME
- Java Card
- Java两种核心机制
- Java虚拟机
- 垃圾回收机制
- JSR和JCP
为了保证在给Java平台增加功能时的规范性,JCR组织指定了一系列JSR规范:
- JSR规范:Java Specification Request,一般包括RI(参考实现)和TCK(兼容性测试套件)
- JCP组织:Java Community Process
基本数据类型及其运算
- 整型
Java只定义了带符号的整型,即最高位表示的符号
- byte: -128~127
- short: -32768~32767
- int: -21 4748 3648~ 21 4748 3647
- long: -922 3372 0368 5477 5808~922 3372 0368 5477 5807
public class Main {
public static void main(String[] args) {
int i = 2147483647;//int最大值
int i2 = -2147483648;//int最小值
int i3 = 2_000_000_000; // 加下划线更容易识别,编译器会自动去除下划线
int i4 = 0xff0000; // 十六进制表示的16711680,0x开头
int i5 = 0b1000000000; // 二进制表示的512,ob开头
long l = 9000000000000000000L; // long型的结尾需要加L
}
}
- 浮点型
float f1 = 3.14f;//float型定义的要在后面加上f后缀
float f2 = 3.14e38f; // 科学计数法表示的3.14x10^38
double d = 1.79e308;
double d2 = -1.79e308;
double d3 = 4.9e-324; // 科学计数法表示的4.9x10^-324
- 布尔类型
虽然理论上只需要1bit存储布尔类型,但通常JVM内部会使用4字节整数 - 引用类型
非基本数据类型即为引用类型,最常见的如String字符串 - 常量
即加上final修饰符 - 字符型
用占用两个字节的Unicode编码来表示
char c3='\u0041';
char c1='A';
var关键字
有时候类型名字太长时,可以使用var关键字指代省略的变量类型,编译器会根据右值自动推断出左值的数据类型
在进行基本数据类型的运算时,有时会出现运算符两遍数据类型不同的情况,此时在未强制使用类型转换的情况下,会进行类型的自动提升.
基本数据类型的自动转化如下所示
Java中运算符如下:
- 移位运算
是有符号右移位,>>>是无符号右移位,做移位类似
int n=7;// 00000000 00000000 00000000 00000111;
int a=n<<1;//00000000 00000000 00000000 000011;
int c=n>>3;//00000000 00000000 00000000 00000000;
int n = -536870912;//怎样输出n的二进制表示
//11100000000000000000000000000000
for(int i=0;i<32;i++){
int t=(n & 0x80000000>>>i)>>>(31-i);
System.out.print(t);
}
int a1=n>>1;//11110000 00000000 00000000 00000000 = -268435456
int a2=n >>>1;// 01110000 00000000 00000000 00000000
- 位运算
- 与&
- 或|
- 非~
- 浮点数运算
在计算机中浮点数很难精确的表示,常常会出现误差,因此在判断两个浮点数是否相等时,正确的比较方法是判断两个浮点数之差的绝对值是否小于一个很小的数:
double r=Math.abs(x-y);
if(r<0.0001){
//equal
}else{
}
浮点数在除数为0时,不会报错,但会返回几个特殊值:
double d1 = 0.0 / 0; // NaN
double d2 = 1.0 / 0; // Infinity
double d3 = -1.0 / 0; // -Infinity
浮点数在转化成整数时,小数部分会被截去,如果超过了整型能表示的最大范围,将返回整型的最大值,四舍五入取整可以加上0.5
double d=2.6;
int n=(int)(d+0.5);
String
String是最常用的引用类型,用"“或者”"" “”"(可以用来表示多行字符串)来表示
Java中用于处理字符串常用的有三个类:
- java.lang.String
- java.lang.StringBuffer
- java.lang.StringBuilder
三者都是final类,不允许被继承。StringBuffer是线程安全的,StringBuilder非线程安全的,改两者都可以通过append,insert来进行操作
Java一维数组(一)
- 动态初始化(分配空间与赋值分开)
int[] arr=new int[3];
arr[0]=3; - 静态初始化(定义数组的同时就为其分配空间并赋值)
int arr[]= new int[]{3,8,9}; - 求长度 a.length
- 数组的默认初始化:数组是引用类型,动态初始化时相当于使用默认的构造方法,数字类型是0,对象默认类型为null
Java多维数组
- int[][] ii=new int[][] {{1,2},{4,2}};
- int[][] ii0=new int[2][3];
- int[] arr[];
数组排序算法
int[] arr=new int[]{4,2,7,1,3,5};
- 插入排序 直接插入排序、折半插入排序、shell排序
- 交换排序 冒泡排序、快速排序
- 选择排序 简单选择排序、堆排序
- 归并排序
- 基数排序