java基础知识-起步与数据类型

Java基础

java介绍

java特点

半解释半编译

1.编译型:编译型语言如C、C++,代码是直接编译成机器码执行,但是不同的平台(x86、ARM等)CPU的指令集不同,因此,需要编译出每一种平台的对应机器码。

2.解释型:解释型语言如Python、Ruby没有这个问题,可以由解释器直接加载源码然后运行,代价是运行效率太低。

java半编译半解释:而Java是将代码编译成一种“字节码”,它类似于抽象的CPU指令,然后,针对不同平台编写虚拟机,不同平台的虚拟机负责加载字节码并执行,这样就实现了“一次编写,到处运行”的效果。

java的三个版本

  • Java SE:Standard Edition,标准版,包含标准的JVM和标准库,开发桌面应用
  • Java EE:Enterprise Edition在Java SE的基础上加上了大量的API和库,以便方便开发Web应用、数据库、消息服务
  • Java ME:Micro Edition:面向手机应用,几乎凉了

三者关系

jdk、jre、jvm三者关系

  • JRE就是运行Java字节码的虚拟机。
  • 但是,如果只有Java源码,要编译成Java字节码,就需要JDK,因为JDK除了包含JRE,还提供了编译器、调试器等开发工具。

JSR、JCP

  • JSR规范:Java Specification Request
  • JCP组织:Java Community Process

java优势

  • Java是基于JVM虚拟机的跨平台语言,一次编写,到处运行;
  • Java程序易于编写,而且有内置垃圾收集,不必考虑内存管理;
  • Java虚拟机拥有工业级的稳定性和高度优化的性能,且经过了长时期的考验;
  • Java拥有最广泛的开源社区支持,各种高质量组件随时可用。

Java语言常年霸占着三大市场:

  • 互联网和企业应用,这是Java EE的长期优势和市场地位;
  • 大数据平台,主要有Hadoop、Spark、Flink等,他们都是Java或Scala(一种运行于JVM的编程语言)开发的;
  • Android移动平台。

Java代码是怎么跑起来的

Java源码本质上是一个文本文件,我们需要先用javacHello.java编译成字节码文件Hello.class,然后,用java命令执行这个字节码文件

  • 一个Java源码只能定义一个public类型的class,并且class名称和文件名要完全一致;
  • 使用javac可以将.java源码编译成.class字节码;
  • 使用java可以运行一个已编译的Java程序,参数是类名。

基本数据类型

java的基本数据类型一共八种:

整型

注意:在Java中,整型的范围与运行Java代码的机器无关。这就解决了软件从-一个平台移植到另.
一个平台, 或者在同-一个平台中的不同操作系统之间进行移植给程序员带来的诸多问题。

浮点类型

  • double表示这种类型的数值精度是float类型的两倍
  • float类型的数值有一个后缀F (例如,3.402F)。 没有后缀F的浮点数值(如3.402) 默认为
    double类型。
  • 所有的浮点数值计算都遵循IEEE 754规范。下面是用于表示溢出和出错情况的三个特殊的
    浮点数值:
    • 正无穷大
    • 负无穷大
    • NaN (不是-一个数字)
    • 一个正整数除以0的结果为正无穷大。计算0/0或者负数的平方根结果为NaN。
    • 对应Double.POSITIVE INFINITY、 Double.NEGATIVE_ INFINITY、Double.NaN

char类型

char类型用于表示单个字符。通常用来表示字符常量。

boolean类型
boolean (布尔)类型有两个值: false和true, 用来判定逻辑条件。整型值和布尔值之间不
能进行相互转换。

数据类型之间的转换

在图中有6个实心箭头,表示无信息丢失的转换;有3个虛箭头,表示可能有精度损失的转换。

强制类型转换

可能损失精度情况下使用强制类型转化

double x = 9.997; .
int nx = (int) x;
//这样,变量nx的值为9。强制类型转换通过截断小数部分将浮点值转换为整型。

四舍五入推荐使用round函数

double x = 9.997;
int nx = (int) Math. round(x);//round返回long类型所以要强转

常量

在Java中,利用关键字final声明常量.关键字final表示这个变量只能被赋值一次一旦被赋值之后,就不能够再更改了。习惯上,常量名使用大写。

final double PI=3.1415926;

类常量:在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类
常量。可以使用关键字static final设置-一个类常量。

class Main{
    public static final PI=3.1415926;
}

变量

声明一个变量之后,必须用赋值语句对变量进行显式初始化,千万不要使用未被初始化的
变量。例如,Java编译器认为下面语句序列是错误的:

int vacationDays;
System.out.print1n(vacationDays); // ERROR--variable not initialized

运算符

加减乘除

  • +、-、*、/加减乘除
  • 除0会得到NaN结果

自增自减运算符

int m=7;
int n=7;
int a=2*++m;//a=16,m=8
int b=2*m++;//b=14,m=8
//原因;
//m++的返回值还是原来是数本身7,但是m++这个过程使得m变为8了
//++m的返回值是8,而m++这个过程使得它变成了8

注释:尽量少使用这种方法,防止bug

关系运算符和Boolean运算符

  • 使用两个等号= =检测是否相等
  • 使用!=检测是否不相等
  • 另外,经常使用的运算符还有< (小于)、> (大于),<= (小于等于)和>= (大于等于)。
  • 逻辑运算&&、||、!
  • 三元操作 x<y?x:y

位运算符

1.& ("与"). | ("或"). ^ ("异或")、-("非")

		int m=8;
	    int n=12;
	    System.out.println(Integer.toBinaryString(m));
	    System.out.println(Integer.toBinaryString(n));
	    System.out.println(Integer.toBinaryString(m&n));
	    System.out.println(Integer.toBinaryString(m|n));
	    System.out.println(Integer.toBinaryString(-m));
	    System.out.println(Integer.toBinaryString(-n));
	    System.out.println(Integer.toBinaryString(m^n));

2.“>>”和“<<”运算符将二进制位进行右移或左移操作。当需要建立位模式屏蔽某些位时,使用这两个运算符十分方便:

		int m=8;
	    System.out.println(Integer.toBinaryString(m));
	    System.out.println(Integer.toBinaryString(m>>1));
	    System.out.println(Integer.toBinaryString(m<<1));

3.>>>运算符将用0填充高位; >> 运算符用符号位填充高位。没有< << <运算符。

	    int m=-8;
	    System.out.println(Integer.toBinaryString(m));
	    System.out.println(Integer.toBinaryString(m>>1));
	    System.out.println(Integer.toBinaryString(m>>>1));

括号与运算优先级

如果不使用圆括号,就按照给出的运算符优先级次序进行计算。同一个级别的运算符按照从左到右的次序进行计算(除 了表中给出的右结合运算符外。)

枚举类型

自定义枚举类型。枚举类型包括有限个命名的值。

enum Size { SMALL, MEDIUM, LARGE, EXTRA_ .LARGE };
Size s = Size.MEDIUM;//可以声明自己定义的类型,Size类型只能存储枚举值或者null

字符串类型

特点

  • 字符串类型不在8种基础类型中,它是一个对象
  • 字符串默认值是null
  • 字符串是不可变的
  • 字符串判断是否内容相等要用equals方法不能直接用,否则出问题,因为比较的是引用
  • 如果经常要进行拼接操作,建议使用StringBuilder(线程不安全,效率相对高),StringBuffer(线程安全,效率相对低)
  • String 被声明为 final,因此它不可被继承
  • String 内部使用 char 数组存储数据

字符串类型常用方法

1.求长度

s.length()//求字符串长度
//注意如果s是个数组求长度是s.length

2.拼接

Strng s1="Hello";
String s2=" World!"
s1+s2//Hello World

3.数字转字符串

int a=10;
String b="";
String c=a+b;//"10"

4.取出字符

String s="xiaoming";
char a=s.charAt(0);//'x'

5.判断字符串是否相等

s.equa1s(t)//不忽略大小比较
"e1o".equalsInoreCase("helo")//忽略大小比较

6.其他

img

包装类型

基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成。

Integer x = 2;     // 装箱 调用了 Integer.valueOf(2)
int y = x;         // 拆箱 调用了 X.intValue()

参考
*《java核心技术卷》

posted @ 2020-02-01 18:11  梦小冷  阅读(195)  评论(0)    收藏  举报