Java 学习笔记(一)——Java 基础入门
——前言——
各位 CSDN 的朋友大家好,我目前正在从零基础开始学习 Java 编程语言。我将把我的学习
过程在我的博客中记录下来,方便获取和比较学习成果,提升自己的编程水平,并期望在未
来成为一名合格的程序员。
我的学习笔记的书本课程来自于:《Thinking in Java》和《Head First Java》
视频课程主要来自于:廖雪峰老师《Java 基础课程》
如涉及版权侵犯请联系我更正。
初来乍到,文笔稚嫩,学识浅薄,请多指教。
一、Java 基础概念
简介:
1.Java 语言是目前世界排名第一的编程语言,拥有强大和丰富的开发者社区支持
2.Java 语言广泛应用于企业和互联网后端开发、Android 开发和大数据开发中
特点:
1.Java 是一种面向对象的编程语言
2.Java 语言以字节码的形式在 JVM 中运行
3.具有良好的跨平台特性,可以胜任多种编程环境
4.Java 语言的逻辑简单,运行安全
版本:
1.Java SE:Standard Edition 标准版,主要面向一般开发者和小型开发团队
2.Java EE:Enterprise Edition 企业版,主要面向企业级应用开发
3.Java ME:Micro Edition 移动版,适用于移动终端的 Java 版本
一些名词解释:
1.JSR(Java Specification Request)——Java 开发规范
2.JCP(Java Community ProcessJava)——共享社区
3.RI(Reference Implementation)——参考文献
4.TCK(Technology Compatibility Kit)——技术兼容包
5.JDK(Java Development Kit)——Java 开发工具包
6.JRE(Java Runtime Environment)——Java 运行环境
开发环境:
1.操作系统:Mac OS X/Windows
2.开发工具:Oracle JDK
3.编译软件:Eclipse 等
二、Java 程序基础
Java 程序基本结构
在 Java 编程语言中,我们希望通过编程开发出我们需要的计算机程序,来帮助我们解决现
实生活中的问题,我们把现实世界中的一切事物都抽象为对象,通过创建不同的类(class)
来表示不同的对象,将所有事件产生的方式都抽象为方法(method),将事件产生的结果
抽象为计算机程序的输出结果,从而完成整个计算机编程与现实世界相关联的模型搭建。
我们可以将程序的类(class)理解为生物学中的物种分类,即每一个事物都拥有表现各自
特点的类别,我们通过创建不同的 class 来区分我们需要操作或引用的对象的抽象形式。
我们通过不同的方法定义(method)来让程序按照我们希望的逻辑运行,最后输出我们希
望得到的结果,从而通过编程解决问题。
Java 代码的基本格式:
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello,World!");
}
}
类名的规范和命名习惯
public class HelloWorld{
}
//public是修饰词,HelloWorld是创建的类名
1.类名必须是英文字母、数字和下划线组成
2.类名必须以英文字母开头
3.类名的设置需要遵守明明习惯,避免与 Java 常用的类名冲突
public 修饰词
public 表示访问修饰符,表示该 class 是空开的 class,如果不编写 public 也可以完成代码
编译,但无法通过命令行去执行代码
方法定义
在 class 的内部可以定义多个方法,我个人将它理解为实现某个目的的具体做法,有些类似
于 C 语言中的函数的概念,通过定义各种方法, 来帮助我们完成程序所需要的各项功能,
无数个定义的类和方法,如同细胞一样构成了各种功能模块最基础的部分
1.在方法定义中,语句是真正的执行代码
2.每一行语句必须以分号结束
3.编译器会自动忽略注释
单行注释以//开头,到当前行尾结束
多行注释以/*…*/表示
特殊多行注释以/**…*/表示,写在类和方法的定义处,可以用来自动创建文档
/**
特殊多行注释
*/
public class 类名{
public static void 方法名 (参数){
//单行注释
}
}
/*多行注释
*多行注释
*/
4.static 表示静态方法(后面的章节会详细讲解……)
5.Java 程序规定的入口代码:
public static void main(String[] args){
}
变量和数据类型
变量
public class 类名{
public static void 方法名 (参数){
String s = "Hello,World";
//String表示字符串变量,通过"..."来表示一个字符串
}
}
1.定义变量:变量类型(String)变量名称(s)= 初始值(”Hello,World”)
2.变量可以持有某个基本类型的数值,或指向某个对象
3.变量必须先经过定义之后再使用
4.变量可以被重新赋值
5.在 Java 代码中,等号“=”代表赋值,而非数学意义上的相等,在 Java 中,用“==”
来表示相等含义
基本数据类型
1.整数类型:long,int,short,byte
2.浮点类型:double,float
3.布尔类型:boolean
4.字符类型:char
内部存储单元
1.计算机内存的最小存储单元是字节(byte)
2.一个字节是 8 位二进制数组成:00000000~11111111(0~255)
3.内存的单元从位置 0 开始编号,我们称它为内存地址
4.内存占用:
byte:1 个字节
short:2 个字节
int:4 个字节
long:8 个字节
float:4 个字节
double:8 个字节
整数类型
1.byte:8 位,1 字节,表示-128~+127
2.short:16 位,2 字节,表示-32768~+32767
3.int:32 位,4 字节,表示-2147483648~+2147483647
4.long:64 位,8 字节,long 类型需要在数字结尾加“L”标注表示,否则编译器将视为
int 类型进行处理
浮点数据类型
1.float:32 位,4 字节,float 类型需要在数字结尾加“f”标注表示
2.double:64 为,8 字节,用来表示较大的浮点数据类型
布尔类型
1.布尔类型只有两个值:true(真)和 false(假)
2.布尔类型通常用来判断计算结果的真伪性
字符类型
1.char:保存一个字符
2.这里需要我们明确区分字符类型与字符串类型的区别
3.字符类型用单引号表示,只能存储一个字符
4.如果同时输入多个字符,编译器将会报错
char s1 = "Hello,World";//这表达一个字符串
char s2 = 'A';//这表达一个字符
char s3 = 'ZERO';//格式错误,编译器将会报错
常量
final double PI = 3.1415926;
//设置一个double类型的常量并赋值(这里我们设置的是圆周率π)
double r = 5.0;//设置半径r的值为5.0
double area = PI * r * r;//进行圆形的面积计算
System.out.println(area);//输出area的运行结果
1.常量是使用 final 修饰词修饰的变量
2.常量被初始化后不可被再次赋值
3.常量的名字通常全部大写
4.常量用来避免进行意外赋值
5.常量的使用有助于理解程序的意图
整数运算
运算规则
整数运算的运算规则基于数学中的四则运算法则,其除法结果为去除余数的整数,除数为 0
时编译器将会报错
++运算和–运算:
1.n++:n=n+1
2.n–:n=n-1
3.n+=100:n=n+100
4.n-=100:n=n-100
在进行整数运算时,如果计算结果溢出编译器将不会报错,而是在其数据类型可以表示的范
围内循环表示,我们可以通过使用表示范围更大的类型替换原有类型来解决这个问题
移位运算
1.左移:<<
2.带符号右移:>>
3.不带符号右移:>>>
在运算过程中,byte 和 short 类型都会先转换为 int 类型再进行移位运算
位运算
1.与运算&都是 1 结果才为 1
2.或运算|至少一个 1 结果就是 1
3.异或运算^不相同结果为 1
4.非运算~都不相同结果为 1
运算优先级
1.~、++、–
2.*、/、%
3.+、-
4.<<、>>
5.&
6.|
类型的自动提升与强制转型
short s = 12;//s = 12
int i = s + 100;//i = 112.00
long n = 200 * i;//n = 22400.00
int x = n ‐ 123;//编译错误
int x1 = (int)(n ‐ 123);//x1 = 22277.00
int x2 = (int)n ‐ 123;//x2 = 22277.00
int x3 = (int)(n * 100000000);//计算结果溢出,超出了int类型可以表示的范围
1.在运算过程中,计算结果为较大类型的整型
2.可以将结果进行强制转型
3.强制转型可能会丢失精度
4.计算时需要选择合适范围的整数类型
浮点数运算
浮点数运算的特点
double a = 0.1;
//由于 0.1 的二进制表示为 0.0 0011 0011 0011 ...的无限循环
//无限趋近于 0.1
//0.099999999999...
double d = 1 ‐ 9.0 / 10;//计算结果并不等于 0.1
double d1 = 1.2 + 24.0 / 5;//6.0,计算过程中会将 5 转型为 5.0 再进行计算
double d2 = 1.2 + 24 / 5;//5.2,24/5 不会进行类型转换,其计算结果为 4
1.很多浮点数无法精确表示
2.计算会有误差
3.整型可以自动提升到浮点类型
特殊值
double d1 = 0.0 / 0;//NaN
double d2 = 1.0 / 0;//Infinity
double d3 = ‐1.0 / 0;//-Infinity
1.NaN 表示 Not a Number
2.Infinity 表示无穷大
3.-Infinity 表示负无穷大
强制转型
int n1 = (int)12.3;//12
int n2 = (int)12.7;//12
int n3 = (int)(12.7 + 0.5);//13
int n4 = (int) 1.2e20;//2147483647
1.强制转型会直接舍弃小数位
2.利用四舍五入技巧进行转型
3.超出整数范围自动变为最大值
布尔运算
关系运算符
int n = 5;
boolean t1 = n > 0;//true
boolean t2 = n < 0;//false
boolean t3 = n == 5;//true
boolean t4 = n != 5;//false
boolean and = t1 && t2;
boolean or = t1 || t2;
boolean not = ! t1;
1.>:大于
2.>=:大于等于
3.<:小于
4.<=:小于等于
5.==:相等
6.!=:不等
短路运算符
1.与运算&&:在与运算过程中,只要有一个参与运算的操作数的计算结果为 false,由于整
个计算结果的结果一定为 false,那么后面的计算过程将不会继续进行计算
2.或运算||:在或运算过程中,只要有一个参与运算的操作数的计算结果为 true,由于整个
计算结果的结果一定为 true,那么后面的计算过程将不会继续进行计算
public static void main(String[] args){
int n = 0;
//boolean b = 5 / n > 0;
boolean and = (5 < n) && (5 / n > 0);
boolean or = (5 > n) || (5 / n > 0);
System.out.println(and);//false
System.out.println(or);//true
}
三元运算符
1.三元运算符的作用是根据条件 b 计算 x 或 y:b ? x : y
2.x 和 y 只计算其中一个
3.x 和 y 的类型不许相同
int n = 200;
boolean positive = n >= 0;
int abs = positive ? n : ‐n;
字符和字符串
字符类型
1.字符类型是基本类型:char,它保存一个字符
char c1 = 'A';
char c2 = '中';
2.Java 使用 Unicode 编码来表示字符
int n1 = c1;//65
int n2 = c2;//20013
3.可以直接用 Unicode 编码来表示一个字符,使用“\u”加十六进制编码
char c3 = '\u0041';//'A'
char c4 = '\u4e2d';//'中'