Java 基础语法 笔记

简介

Java-咖啡

Java语言是美国的Sun公司,在1995年推出的高级编程语言。

Java的字节码 : 咖啡屋宝贝

1995.5.23 Java诞生——Sun公司的Green计划

发展周期

  1. Sun初创期
  2. Sun发展期
  3. Oracle稳定期

发展历史

  • 1995年发布java1.0
  • 1997年发布java1.1
  • 1998年发布java1.2
  • 2000年发布java1.3
  • 2002年发布java1.4
  • 2004年发布java5
  • 2006年发布java6
  • 2009年Oracle公司收购Sun公司,并于2011发布java7
  • 2014年发布java8

版本

  • J2SE 标准版:客户端
  • J2EE 企业版:分布式
  • J2ME 微型版:嵌入式

Java语言能做什么

  • Web
  • 互联网
  • 移动端
  • 全场景

语言特性

  1. 简单
  2. 面向对象
  3. 健壮
  4. 多线程
  5. 动态(基于反射)
  6. 分布式设计

核心优势:跨平台

一次编译,处处运行

*.java -> *.class -> JVM执行

Java生态

Java8使用最多

中国使用最高

最受欢迎Web服务

Java基础语法

概述

JVM

  • JVM:Java虚拟机,简称JVM
  • Java程序的跨平台性的核心是JVM

JRE和JDK

  • JRE:Java程序运行环境
  • JDK:Java程序开发工具包

image20200929132634842.png

安装

Java官方网站:http://oracle.com

Java JDK SE8

环境变量:Java_Home

%Java_Home% /bin

bin目录:

java.exe

javac.exe

第一个Java程序

Java是纯面向对象高级编程语言

开发步骤

  1. 定义类 class public classclass名与源文件名一致,且一个文件只能有一个
  2. 主方法 main 入口函数
  3. 系统输出:编译

Java源文件--javac-->Java字节码文件 --java -->执行程序

public class HelloWorld 
{ 
  /**
   * public class:公共类名,一个文件只有一个
   * 类名:HelloWorld 与文件名一致
   */
    public static void main(String[] args)
    {
      /**
       * static:静态
       * void:返回值的类型
       * main:方法名,严格定义
       * String:字符串
       * []:数组
       * args:参数名
       */
        Syetem.out.print("1.Hello World!"); // 不换行输出
        System.out.println("2.Hello World"); // 换行输出
        
    }
}

编码规范

标识符

标识符:字符序列

标识符规范:

image20210623151855271.png

命名规范

  1. 类、接口

    单个单词:小驼峰命名 Hello

    多个单词:大驼峰命名 HelloWorld

  2. 变量、方法

    单个单词:全小写 check()

    多个单词:首单词全小写,后面每个单词首字母大写 checkUserName()

  3. 常量

    单个单词:全大写 NUMBER

    多个单词:全大写中间下划线 MAX_VALUE

注释

注释:不进行编译处理 可读性

类型:

  • 单行注释

    // 单行注释 可嵌套
    
  • 多行注释(区块注释)

    /*
     多行注释 不可嵌套
    */
    
  • 文档注释 javadoc

    /**
     * 文档注释 Javadoc生成文档
     */
    

javadoc 用法:

javadoc [options] [packagenames] [sourcefiles]

数据类型和变量

变量

存储程序的数据 -> 申请存储空间 -> 变量

使用步骤
  1. 声明变量,即根据数据类型在内存申请空间

    // 数据类型 变量名;
    int age;
    
  2. 赋值,即将数据存储至对应的内存空间

    // 变量名 = 数值;
      age = 20
    
  3. 使用变量

1 和 2 可进行合并

变量名:标识符 -> 遵循规范

变量类型
  • 局部:某方法或代码块
  • 全局:类的属性
  • 静态:static修饰,整个类成员共享

作用域:全局 局部

数据类型

数据类型 –> 分类数据

graph LR 1(Java) --> 2[基本数据类型 8种] 1 --> 3[引用数据类型]
基本数据类型

整型

整型bit范围
byte8-128~127
short16-32768~32767
int32-231 ~ 231-1
long64-263 ~ 263-1

整型数据存在有符号为类进行补码:

bit符号
0正数
1负数

浮点型

浮点型bit
float32
double(默认类型)64
float a = 3.14f;double b = 3.14;

布尔类型

只有两个值 truefalse

boolean flag1 = true;
boolean flag2 = false;
if (flag1)
{    
    System.out.println("flag1 is true");
}else if(flag2)
{    
    System.out.println("flag2 is true");
}

字符型

编码:二进制类型映射到字符

编码表:如何编码字符

image20210623162225439.png

ASCII码:编码美国字符(8位) 7位二进制 剩下一位为0

Unicode码:万国码(16位) 65536个字符

char 2字节 [0, 65536]

char c = "中" ;
int i = c;// 数据类型自动转换
char c = 20013;
数据类型转换

大范围 -> 小范围 强制转换

小范围 -> 大范围 自动转换

强制转换语法:

// 目标数据类型 变量名 = (目标数据类型)值/变量
int c = 5;
short s = (short) c;
graph LR 1(byte) --> 2(short) 3(char) --> 4(int) 2 --> 4 4 --> 5(long) 5 --> 6(float) 6 --> 7(double)
引用类型

在C和C++通过指针操作内存中的元素,Java使用“引用”,java中一切都被视为对象

引用数据类型:

  • 数组
  • 接口
  • 对象

引用类型在内存中的存储方式:

image20210623202017056.png

引用类型==比的是值,即内存地址

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);

运行结果:

false

运算符

简介:对常量或变量进行操作的符号

表达式:运算符和操作数的组合
$$
\begin

\underbrace{Y = X * \overbrace{(2+10)}^{子表达式}}_{表达式} \end

$$
分类:

根据功能:

  • 算术运算符
  • 赋值运算符
  • 逻辑运算符
  • 关系运算符

根据操作数:

  • 单目运算符
  • 双目运算符
  • 三目运算符

赋值运算符

自右向左运行

int a,b,c;
a = b = c = 1; 

算术运算符

int a = 5;
int b = 2;
double c = 4.00;
double m = 20.00;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b); // 值为 int
System.out.println(a%b);
System.out.println(a/c); // 值为 float
System.out.println(m/b); // 值为 float

复合运算符:赋值运算符+算术运算符 (自左向右) 效率高于算术运算符

int a = 1;
a += 2;
a -= 1;
a *= 10;
a /= 2;
a %= 26;
a += a += 6 // 等价于 a = a+(a+6)

自增/自减运算

前缀运算“先运算后使用”

int a = 5;
int b = ++a;
System.out.println("a="+a);
System.out.println("b="+b);

后缀运算“先使用后运算”

int a = 5;
int b = a++;
System.out.println("a="+a);
System.out.println("b="+b);

关系运算符

运算结果为boolean类型 truefalse

int a = 10;
int b = 15;
System.out.println(a >= b);
System.out.println(a <= b);
System.out.println(a == b); 
// 引用类型不能使用 == 进行比较
System.out.println(a > b);
System.out.println(a < b);

逻辑运算符

逻辑运算符也叫短路运算符 -> 复杂的逻辑表达式 -> boolean类型

boolean a = true;
boolean b = false;
a && b; // false
a || b; // true
!a; // false

三目运算符

语法:布尔表达式?表达式1:表达式2

布尔表达式 --> ture --> 表达式1
布尔表达式 --> false --> 表达式2

instanceof运算符

判断类的实例是否属于该类

引用实例 --属于 instanceof--> 引用数据类型

位运算符

C语言的低级操作 -> 操作二进制位

位操作符含义说明
&
|
^异或
<<左移高位丢弃,低位补0
>>右移低位丢弃,高位补1或0,根据计算结果
>>>无符号右移忽略符号位,高位补0

运算符优先级:

顺序运算符
1() []
2++ -- !
3* / % + -
4> >= < <= == !=
5&& ||
6?: = *= /= += -=

逻辑流程控制语句

main函数和顺序结构

默认运行 public class -> main (可以传入参数)

public static void main(String[] args){}

顺序结构 自上而下运行

选择结构

image20210624094807166.png

if语句:

// if形式
if(expr)
{
    code block
}
// if-else形式
if(expr)
{
    code block 1
}else
{
    code block 2
}
// if-else形式 多条件分支
if(expr1)
{
    code block 1
}
else if(expr2)
{    
    code block 2
}else
{
    code block 3    
}

switch语句:

switch(expr)
{ 
    case value1:
        codeBlock1;
        break;
    case value2:
        codeBlock2;
        break;
    default:codeBlockn;
}

JDK 1.5 以前 expr: byte short int char

JDK 1.5 支持 enmu

JDK 1.7 支持 String

graph LR A[表达式的值] --> B[case值] B -- true --> C[代码] B -- false --> D[default] D --> E[代码]

if条件分支 可以进行嵌套,灵活性更高

switch-case条件分支 不能嵌套:

  • 效率更高
  • 批处理
  • 可读性更高

循环结构

image20210624094747664.png

while循环结构:

while(expr)
{
    Loop body
}

image20210624094719748.png

do-while循环结构:

do
{
    Loop body
}while(expr)

for循环结构:

循环最清晰,for循环,预定次数执行语句

int result = 0;
for(int i = 1;i<=100;i++){
    result += i;
}
System.out.println(result);

for(;;)
{   
    //死循环 for三个语句都去掉依然可以执行
}

循环控制

break 结束当前循环,语句块

continue 结束本次循环,进入下次循环

return 方法的结束,返回指定类型的值,也可以是对象

return; // 无 void
return i; // 有

循环嵌套

for(int i=1;i<=9;i++)
{
    for(int j=1;j<=i;j++)
    {        
        System.out.print(j+"*"+i+"="+(j*i)+" ");    
    }    
    System.out.println();
}

Q.E.D.