JAVA基础知识点

一、概述

  • JAVA语言是美国Sun公司(Stanford University Network)在1995年推出的高级变成语言。

  • 2009年Oracle甲骨文公司收购Sun公司,并于2011年发布Java7版本

  • DOS命令

    Win+R,cmd		//启动dos
    > D:			//切换盘符
    > cd \目录\	   //切换目录
    > cd ..			//返回上一级目录
    > dir			//查看当前文件夹内容
    > cls			//清屏
    > exit			//退出
    

    二、开发环境搭建

    1. Java虚拟机——JVM

    • JVM (Java Virtual Machine)
    • 是运行所有java程序的假想计算机,是java程序的运行环境
    • 跨平台特性

    2. JRE和JDK

    • JRE (Java Runtime Environment):是Java程序运行时的环境,包含JVM和运行时所需要的核心类库
    • JDK (Java Development Kit):是Java程序开发工具包,包含JRE和开发人员使用的工具

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9PZ2HJAk-1678240645854)(C:\Users\LQN\AppData\Roaming\Typora\typora-user-images\image-20230301175104134.png)]

三、HelloWorld入门程序

  • Java程序开发三步骤:编写、编译、运行
  • javac.exe:编译器
  • java.exe:解释器
javac HelloWorld.java -> HelloWorld.class
java HelloWorld
  • 步骤:
    1. 编写.java源程序
    2. 编译源程序成.class的java字节码文件
    3. JVM运行
  • 源代码编写
//第一行的类名必须和所在的文件名称完全一致
//public class 后面代表定义一个类的名称,类是Java当中所有源代码的基本组织单位
public class HelloWorld{
    //第二行内容是万年不变的固定写法,代表main方法,是程序执行的起点
    public static void main(String[] args){
        System.out.println("Hello,World!");	//打印输出语句
    }
}
  • 注释
//单行注释
/*
	多行注释
*/
  • 关键字

    keywords

    完全小写的字母

  • 标识符

    类的名字、方法的名字、变量的名字
    命名规则:

    1. 可以包含英文字母(区分大小写)、0-9数字、$(美元符号)、_(下划线)
    2. 不能以数字开头
    3. 不能是关键字

    命名规范:

    1. 类名:首字母大写,后面每个单词首字母大写(大驼峰式)
    2. 变量名:首字母小写,后面每个单词首字母大写(小驼峰式)
    3. 方法名:同变量名

四、常量

  • 常量:在程序运行期间,固定不变的量
    1. 字符串常量:用双引号引起来的部分
    2. 整数常量
    3. 浮点数常量
    4. 字符常量:用单引号引起来的单个字符
    5. 布尔常量:true、false
    6. 空常量:null
public class Const01{
    public static void main(String[] args){
        System.out.println("ABC");			//字符串常量
        System.out.println("");
        System.out.println(20);				//整数常量
        System.out.println(-30);
        System.out.println(3.14);			//浮点数常量
        System.out.println(-2.5);
        System.out.println('A');			//字符常量
        System.out.println('5');
        System.out.println('');				//报错!两个单引号中间必须有且仅有一个字符,不能没有
        System.out.println(true);			//布尔常量
        System.out.println(flase);
        System.out.println(null);			//报错!空常量不能直接打印输出
    }
}

五、数据类型

  • Java的数据类型分类:
    1. 基本数据类型:整数、浮点数、字符、布尔
    2. 引用数据类型:字符串、类、数组、接口、Lambd
数据类型关键字内存占用
字节型byte1个字节
短整型short2个字节
整型int4个字节
长整型long8个字节
单精度浮点数float4个字节
双精度浮点数double8个字节
字符型char2个字节
布尔类型boolean1个字节
  • 默认类型:整数(int)、浮点(double)
  • 字符串不是基本类型,而是引用类型

六、变量

  • 程序运行期间,内容可以发生改变的量
  • 数据类型 变量名 = 数据值;
public class Variable {
public static void main(String[] args){
	byte b = 100;
    short s = 1000;
    int i = 123456;
    long l = 12345678900L;
    double d = 8.5;
    boolean bool = false;
    float f = 5.5F;
    char c = 'A';
	System.out.println(b);
}
}

七、数据类型转换

  • 自动转换:将取值范围小的类型自动提升为 取值范围大的类型

    范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为 int 。

    byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double

  • 强制转换:将 取值范围大的类型 强制转换成 取值范围小的类型

    数据类型 变量名 = (数据类型)被转数据值;

  • 浮点转成整数,直接取消小数点,可能造成数据损失精度

  • int 强制转成 short 砍掉2个字节,可能造成数据丢失

  • boolean类型不能发生数据类型转换

  • 对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char)

    1. 如果没有超过左侧的范围,编译器补上强转
    2. 如果右侧超过了左侧范围,纳闷直接编译器报错
  • 在给变量进行赋值的时候,如果左侧的表达式当中全都是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到的结果。
    short result = 5 + 8; //等号右边全都是常量,没有任何变量参与运算
    编译之后,得到的.class字节码文件当中相当于直接就是:
    short result = 13;
    右侧的常量结果数值,没有超过左侧范围,所以正确。
    这称为“编译器的常量优化”。
    当时一旦表达式当中有变量参与,就不能进行这种优化了。(会报错)

  • s += 1 就是 s = (short)(s + 1)

八、ASCII编码表

( American Standard Code for Information Interchange 美国标准信息交换码)

字符数值
048
957
A65
Z90
a97
z122

Unicode码表:万国码

九、运算符

  • 算数运算符:+ - * / % ++ –

  • + 符号在字符串中的操作:

    符号在遇到字符串的时候,表示连接、拼接的含义

    “a”+"b"的结果是“ab”,连接含义

public class HelloWorld{
    public static void main(String[] args){
        System.out.println("5+5="+5+5);
        //输出5+5=55
    }
}
  • 任何数据类型和字符串进行连接的时候,结果都会变成字符串

  • 赋值运算符:= += -= *= /= %=

  • 比较运算符:== >= <= != > <

  • 比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值 true 或者 false

  • 逻辑运算符

    && 短路与1. 两边都是true,结果是true 2. 一边是false,结果是false 短路特点:符号左边是false,右边不再运
    || 短路或1. 两边都是false,结果是false 2. 一边是true,结果是true 短路特点: 符号左边是true,右边不再运算
    ! 取反1. ! true 结果是false 2. ! false结果是true
  • 逻辑运算符,是用来连接两个布尔类型结果的运算符,运算结果都是布尔值 true 或者 false

  • 三元运算符:数据类型 变量名 = 布尔类型表达式?结果1:结果2

十、方法

  • 方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。

  • 方法的定义:

    修饰符 返回值类型 方法名 (参数列表){
    	方法体
    	return 返回值;
    1. 修饰符: 目前固定写法 public static
    2. 返回值类型: 目前固定写法 void
    3. 方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法
    4. 参数列表: 目前无参数
    5. return:方法结束。因为返回值类型是void,方法大括号内的return可以不写
    public static void methodName() {
    	System.out.println("这是一个方法");
    }
    
  • 方法的调用:在主方法main中来调用我们自己定义好的方法

    public static void main(String[] args) {
    	//调用定义的方法method
    	method();
    }
    //定义方法,被main方法调用
    public static void method() {
    	System.out.println("自己定义的方法,需要被main调用运行");
    }
    
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println(sum(5,3));
        }
        public static int sum(int a,int b){
            return a+b;
        }
    }
    
  • 注意事项:

    1. 方法必须定义在一类中方法外
    2. 方法不能定义在另一个方法的里面
  • 定义方法:

    1. 明确返回值类型
    2. 明确参数列表
  • 返回值类型,必须要和 return 语句返回的类型相同,否则编译失败 。

  • 方法重载:

    (overload)

    指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返 回值类型无关。

    参数列表:个数不同,数据类型不同,顺序不同。

    重载方法调用:JVM通过方法的参数列表,调用不同的方法。

十一、JShell脚本工具

  • JShell脚本工具是JDK9的新特性
  • 当我们编写的代码非常少的时候,而又不愿意编写类,main方法,也不愿意去编译和运 行,这个时候可以使用JShell工具
C:\Users\LQN>jshell
|  欢迎使用 JShell -- 版本 11.0.8
|  要大致了解该版本, 请键入: /help intro

jshell> System.out.println("Hello,World!");
Hello,World!

jshell> int a = 10
a ==> 10

jshell> int b=20
b ==> 20

jshell> int result=a+b;
result ==> 30

jshell> System.out.println("结果是:"+result);
结果是:30

jshell> int a=3;a=(1>2?1:0);System.out.println(a);
a ==> 3
a ==> 0
0
    
jshell> /exit
|  再见

C:\Users\LQN>

十二、流程控制

  • 顺序结构:根据编写的顺序,从上到下运行

  • 选择结构:

    1. 单if语句

      if(关系表达式){
      	语句体;
    2. if…else

      if(关系表达式) {
      	语句体1;
      }else {
      	语句体2;
      }
      
    3. if…else if…else

      if (判断条件1) {
      	执行语句1;
      } else if (判断条件2) {
      	执行语句2;
      }
      ...
      }else if (判断条件n) {
      	执行语句n;
      } else {
      	执行语句n+1;
      }
      
    4. switch

      switch(表达式) {
      	case 常量值1:
      		语句体1;
      		break;
      	case 常量值2:
      		语句体2;
      		break;
      		...
      	default:
      		语句体n+1;
      		break;
      }
      
  • switch语句中,表达式的数据类型,可以是byte,short,int,char,enum(枚举),JDK7后可以接收字符串。

  • case的穿透性:在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运 行,直到遇到break,或者整体switch结束。

  • 循环结构:

    1. for

      for(初始化表达式①; 布尔表达式②; 步进表达式④){
      		循环体③
      }
      
    2. while

      初始化表达式①
      while(布尔表达式②){
      	循环体③
      	步进表达式④
      }
      
    3. do…while

      初始化表达式①
      do{
      	循环体③
      	步进表达式④
      }while(布尔表达式②);
      

      do…while循环的特点:无条件执行一次循环体,即使我们将循环条件直接写成false,也依然会循环一次。

  • 在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while

  • 跳出语句

    1. break:终止switch或者循环
    2. continue:结束本次循环,继续下一次的循环
  • 死循环:也就是循环中的条件永远为true,死循环的是永不结束的循环。例如:while(true){}。

  • 嵌套循环:是指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。总 共的循环次数=外循环次数*内循环次数

十三、开发工具IntelliJ IDEA

  • IDEA是一个专门针对Java的集成开发工具(IDE),由Java语言编写。所以,需要有JRE运行环境并配置好环境变量。

  • 所谓包,就是文件夹,用来对类文件进行管理。

  • out 目录是存储编译后的.class文件

  • src 目录是存储我们编写的.java源文件

  • 常用快捷键:

    快捷键功能
    Alt+Enter导入包,自动修正代码
    Ctrl+Y删除光标所在行
    Ctrl+D复制光标所在行的内容,插入光标位置下面
    Ctrl+Alt+L格式化代码
    Ctrl+/单行注释
    Ctrl+Shift+/选中代码注释,多行注释,再按取消注释
    Alt+Ins自动生成代码,toString,get,set等方法
    Alt+Shift+上下箭头移动当前代码行
    Ctrl+空格补全代码
    psvm自动补全main函数
    soutSystem.out.println();
    Ctrl+Shift+F10执行
    5.forifor (int i = 0; i < 5; i++) {}

十四、数组

  • 容器:是将多个数据存储到一起,每个数据称为该容器的元素。

  • 数组概念: 数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致。

  • 数组的初始化:

    1. 动态初始化(指定长度)

      • 数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];

        int[] arr = new int[3];

        int[] arr; arr = new int[3];

      • 使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值

        整数类型(0)、浮点类型(0.0)、字符类型(‘\u0000’)、布尔类型(false)、引用类型(null)

    2. 静态初始化(指定内容)

      • 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3…};

        int[] arr = new int[]{1,2,3,4,5};

        int[] arr; arr=new int[]{1,2,3,4,5};

      • 数据类型[] 数组名 = {元素1,元素2,元素3…};

        int[] arr = {1,2,3,4,5};

  • 数组的访问

    • 直接打印数组名称,得到的是数组对应的内存地址哈希值

    • 索引: 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始到“数组的长度-1”,这个自动编号称为数组索引 (index),可以通过数组的索引访问到数组中的元素。

    • 数组名[索引]

    • 数组名.length

  • 特点:

    1. 数组是一种引用数据类型
    2. 数组当中多个数据,类型必须统一
    3. 数组的长度在程序运行期间不可改变
  • Java的内存划分

    1. 栈(Stack):存放的都是方法中的局部变量。方法的运行一定要在栈当中运行。一旦超出作用域,立刻从栈内存当中消失。
    2. 堆(Heap):存储对象或者数组,new来创建的,都存储在堆内存当中,堆内存里面的东西都有一个地址值:16进制。堆内存里面的数据都有默认值。
    3. 方法区(Method Area):存储可以运行的.class文件,包含方法的信息。
    4. 本地方法栈(Native Method Stack):JVM在使用操作系统功能的时候使用。
    5. 寄存器(pc Register):给CPU使用。
  • 常见问题:

    1. 数组索引越界异常( ArrayIndexOutOfBoundsException)
    2. 数组空指针异常(NullPointerException)
  • 数组遍历

    数组的索引是 0 到 lenght-1

    public static void main(String[] args) {
    	int[] arr = { 1, 2, 3, 4, 5 };
    	for (int i = 0; i < arr.length; i++) {
    		System.out.println(arr[i]);
    	}
    }
    
  • 获取最值元素

    public static void main(String[] args) {
    	int[] arr = { 5, 15, 2000, 10000, 100, 4000 };
    	int max = arr[0];
    	for (int i = 0; i < arr.length; i++) {
    		if (arr[i] > max) max = arr[i];
    	}
    	System.out.println("数组最大值是: " + max);
    }
    
  • 数组反转

    public static void main(String[] args) {
    	int[] arr = { 1, 2, 3, 4, 5 };
    	for (int min = 0, max = arr.length ‐ 1; min <= max; min++, max‐‐) {
    //利用第三方变量完成数组中的元素交换
    		int temp = arr[min];
    		arr[min] = arr[max];
    		arr[max] = temp;
    	}
    // 反转后,遍历数组
    	for (int i = 0; i < arr.length; i++) {
    		System.out.println(arr[i]);
    	}
    }
    
  • 数组作为方法参数和返回值

    1. 数组作为方法参数传递,传递的参数是数组内存的地址。

      public static void main(String[] args) {
      	int[] arr = { 1, 3, 5, 7, 9 };
      	printArray(arr);
      }
      public static void printArray(int[] arr) {
      	for (int i = 0; i < arr.length; i++) {
      		System.out.println(arr[i]);
      	}
      }
      
    2. 数组作为方法的返回值,返回的是数组的内存地址

      public static void main(String[] args) {
      	int[] arr = getArray();
      	for (int i = 0; i < arr.length; i++) {
      		System.out.println(arr[i]);
      	}
      }
      public static int[] getArray() {
      	int[] arr = { 1, 3, 5, 7, 9 };
      	return arr;
      }
      
  • 方法的参数为基本类型时,传递的是数据值. 方法的参数为引用类型时,传递的是地址值.

  • 一个方法只能有0或者1个返回值,不能有多个返回值

十五、面向对象

=编写中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值