目录
1 Java介绍
Sun公司(Stanford University NetWork):美国的斯坦福大学)在1995年推出的高级编程语言。sun公司在2009年被甲骨文(Oracle)公司收购了。Java之父是詹姆斯·高斯林(James Gosling)
Java:Windows平台,它的JDK和Linux平台的JDK不一样。
window:Java源代码(.java),JVM编译器,Java字节码(.class)。
JDK再拿着字节码进行解释执行。
Java不像Python,直接拿着源代码解释执行,
Java是通过JVM把源代码编译成了字节码,拿着字节码,来解释执行的。
Java跨平台。Java源代码是一次编写,到处运行。
JVM跨平台吗,不是。
Java:编译型语言,需要编译+解释(JDK)的过程。
编译型语言是指使用专门的编译器,针对特定平台(操作系统)将某种高级语言源代码一次性“翻译”成可被该平台硬件执行的机器码(机器指令和操作数),并包装成该平台所能识别的可执行性程序的格式,这个转换过程成为编译。
Scala是编译型语言。
Java平台版本说明
J2SE: 标准版。也就是其他两个版本的基础, 在JDK1.5的时候, 正式更名为: JavaSE
J2ME: 小型版。一般是用于研发嵌入式程序, 已经被android替代了, 在JDK1.5更为为 JavaME
J2EE: 企业版。一般开发企业级互联网程序, 在JDK1.5的时候正式更为为JAVAEE
JDK和JRE的概述
JDK:Java开发工具包(Java Development Kit)。包含开发工具 和 JRE。
常用的开发工具:javac,java
JRE:Java运行时环境(Java Runtime Environment)。包含运行Java程序时所需的核心类库和 JVM。核心类库: java.lang,java.util,java.io
JVM:Java虚拟机(Java Virtual Machine),作用是用来保证Java程序跨平台性的。但是JVM本身并不能跨平台。
使用的集成环境为IDEA,常见的快捷键如下:
shit+回车:不管此时光标在哪自动换行
编码过程中的快捷方法:
sout:
psvm:
2 JAVA语法
2.1 注释
// 单行注释
/*
多行注释
多行注释
*/
/**
文档注释
文档注释
*/
2.2 关键字
常见的关键词:
public:公开的,公共的,大家都能用
class:表示在创建一个类。
static:静态的,不需要创建对象就可用
void:无返回值类型,也就是这个方法没有返回值
main:特殊的方法,所有程序的入口
eg:static 和 final 是 Java 中两个关键字,它们分别用于修饰类、方法和变量。
static: 用于表示静态的、与类关联的成员,可以通过类名直接访问。
修饰变量:静态变量属于类本身,而不是类的实例。静态变量在内存中只有一份拷贝,被所有的对象共享。可以通过类名直接访问静态变量,无需创建对象。
修饰方法:静态方法属于类本身,而不是类的实例。静态方法不能直接访问非静态成员,只能访问静态成员。可以通过类名直接调用静态方法,无需创建对象。
修饰代码块:静态代码块在类加载时执行,且只执行一次。一般用于初始化静态变量或执行静态方法。
修饰内部类:静态内部类与外部类无关,可以直接访问外部类的静态成员,但不能直接访问外部类的非静态成员。
特点:
1.随着类的加载而加载.
2.优先于对象存在.
3.被static修饰的内容, 能被该类下所有的对象共享.
解释: 这也是我们判断是否使用静态关键字的条件.
4.可以通过类名.的形式调用.
final: 用于表示不可修改的常量、不可重写的方法、不可继承的类。
修饰变量:final 变量表示常量,一旦赋值后不可修改。final 变量必须在声明时或构造函数中进行初始化。
修饰方法:final 方法不能被子类重写。
修饰类:final 类不能被继承,即不能有子类。
2.3 变量
在程序的执行过程中,其值可以在某个范围内发生改变的量就叫变量。Java中要求一个变量每次只能保存一个数据,而且必须要明确保存数据的数据类型
2.4 数据类型
Java是一种强类型语言, 针对于每一个数据都给出了明确的数据类型.
基本数据类型(简称: 基本类型) :byte, short, char, int, long, float, double, boolean
引用数据类型(简称: 引用类型): String, 数组, 类, 接口
基本类型占用字节大小以及取值范围
注:
1.变量未赋值,不能使用
2.变量只在它所属的范围内有效
3.一行上可以定义多个变量,但是不建议
数据类型转换
数据类型转换分类两类:自动(隐士)类型转换和强制(显示)类型转换
1.范围小的类型向范围大的类型提升,byte、short、char 运算时直接提升为int。
2.boolean类型的数据只有true和false这两个, 所以boolean类型的数据不参与类型转换。
即: byte、short、char–>int–>long–>float–>double
格式:数据类型 变量名 = (数据类型)要被转换的数据值;
b2 = (byte)(b1 + i1)
2.5 运算符
1、+号运算符
(1)当与字符串使用时,+号表示拼接
(2)当与非字符串使用时,+号表示数学
2、算术运算符: +, -, *, /, %, ++, –
3、赋值运算符: =, +=, -=, *=, /=, %=
4、比较(关系)运算符:==, !=, >, >=, <, <=
5、逻辑运算符:
符号 | 作用 | 说明 |
---|---|---|
& | 与 | 并且的意思. 不管前者是否满足,左右两侧都执行. |
&& | 短路与 | 并且的意思.左侧不满足,则不执行右侧,提高程序的判断效率,实现类似短路的效率. |
|| | 短路或 | 或者的意思, 有true则整体为true, 都为false, 则整体为false,有短路效应. |
! | 逻辑非 | 取反的意思, 以前为true, 取反后为false, 以前为false, 取反后为true. |
^ | 逻辑异或 | 异同的意思, 相同为false, 不同为true. |
6、三元(三目)运算符
int max=a>b?a:b;
2.6 Scanner
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
/**
* 键盘输入在工作中很常用,比如银行密码,转账金额输入等
* java中键盘输入和python不一样,需要通过Scanner类,创建对象来完成
* 这个对象在util工具包中,需先导包
*/
Scanner sc=new Scanner(System.in);
System.out.print("请输入:");
// int num接受外界输入的整数
int num=sc.nextInt();
System.out.println("num="+num);
}
}
2.7 流程控制
2.7.1 选择结构
也叫分支结构,主要分为以下两种:
1、if语句,主要用于范围的判断
单分支格式:
if(判断条件){
// 满足条件的内容
}
双分支:
if(判断条件){
// 满足条件的内容
} else {
// 不满足条件的内容
}
多分支:
if(判断条件){
// 满足条件的内容
} else if (判断条件) {
// 满足条件的内容
}else if (判断条件) {
// 满足条件的内容
} else {
// 不满足条件的内容
}
2、switch case语句,主要用于固定值的判断,格式如下
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
... //根据需求, 可以写多组case.
default:
语句体n;
break;
}
2.7.2 循环结构
1、for循环
开发中应用到的最多的循环, 它一般适用于循环次数固定的情况.,格式如下:
for(初始化条件1; 判断条件2; 控制条件3) {
//循环体;
}
初始化条件:用来记录 循环的初始状态的. 即: 从哪开始循环。
判断条件:用来决定循环是否继续执行的, 条件成立, 则循环继续执行, 条件不成立, 整个循环就结束了。
控制条件:用来控制初始化条件变化的, 一般是每循环一次, 初始化条件+1。
循环体:需要用来重复做的事情(代码)。
2、while循环
一般适用于循环次数不固定的情况,格式如下:
初始化条件1;
while(判断条件2) {
//循环体3;
//控制条件4;
}
3、死循环
在Java中,死循环的写法格式常用有以下2种:
for(; ; ) { }
while(true){ }
public class DeadLoop {
public static void main(String[] args) {
/*for(;;) {
System.out.println("Loop!");
}*/
while(true) {
System.out.println("Loop!");
}
}
}
4、循环嵌套
所谓的循环嵌套指的是循环结构中还包裹着循环结构,外边的循环结构叫外循环,里边的循环结构叫内循环。
循环嵌套输出九九乘法表:
public class Demo09_MutiTable {
public static void main(String[] args) {
for (int i=1;i<=9;i++){// 外层循环,控制9行
for (int j=1;j<=i;j++){// 内存循环,控制每一行的打印次数
System.out.print(j+"*"+i+"="+(i*j)+"\t");
}
System.out.println(); //换行
}
}
}
3 JAVA数组
1、数组的定义
两种方法:
① 数组类型[] 数组名
② 数组类型 数组名[]
// 定义int类型数组类型
int arr[]=null;
int[] arrr=null;
// 定义double类型数组类型
double[] doubles=null;
double dou[] = null;
2、数组的初始化
① 静态初始化:数组类型[] 数组名=new 数据类型[]{元素1,元素2,元素3…}
手动指定数组的元素,系统会根据元素的个数,计算出数组的长度。
② 动态初始化:数据类型[] 数组名 = new 数据类型[数组的长度];
手动指定数组长度,由系统给出默认初始化值。
// 1.数组的定义
int[] arr =null;
int[] arr1 =null;
// 2.数组的初始化
// ① 静态初始化:开发、测试常用:new 数组类型[]{数组的元素(可以为空)}
arr1 =new int[]{};
// 上面两行等价于下面一行
int [] arr2 =new int[]{11,22};
// ② 动态初始化:工作中常用 => 数组类型[] 变量名=new 数据类型[5]
String[] arrs=new String[5];
System.out.println(arrs);
// 3.数组的使用
System.out.println(arr1); //[I@1b6d3586,内存地址池
System.out.println(arr1.length);
数组常见问题
当访问了数组中不存在的索引,就会引发索引越界异常。
最小索引:0;最大索引:数组的长度 - 1=》数组名.length - 1
int[] arr = {1,2,3,4,5,5,5,5,5};
//用索引来访问数组中的元素
System.out.println(arr[10]);//报错:ArrayIndexOutOfBoundsException
int[] arr =null;
System.out.println(arr.length); //报错:NullPointerException(空指针异常)