二、基本语法

2.1 标识符

  • 定义:给类、方法、变量等起的名字

  • 规则:

    1. 可以使用字母(26个英文字母的大小写、各国的一些语言、…)、数字、下划线、美元符号;

    2. 不能以数字开始(可以$开始);

    3. 不能是Java中的关键字;

  • [▲Java]类名必须以大写字母开始

  • 标识符的规范

    1. 见名知义
    2. 有多个单词时,使用驼峰命名法(userName)
    3. 常量名全部大写
    4. 包名小写
    5. 类名首字母大写
    6. 工程名首字母大写

Unicode

前128个是ASCII表

  • '0':48
  • 'A'-Z':65-90
  • 'a'-'z':97-122

Java关键字

2.2 常量

  • 定义:一个值保持不变的量(容器)。

  • 格式:public static final 类型名 常量名 = 常量值;

    public static final double PAI = 3.14;//常量的值不可被修改
  • 注意:

    1. 必须在方法外定义常量
    2. 常量的值不可被修改;

2.3 变量

注意:

  1. 必须给局部变量赋值;

2.3.1 变量定义的语法规范

变量定义、初始化

  • 变量定义格式:

    [变量修饰符] 变量数据类型 变量名1, 变量名2 [=变量初值];
  • 变量修饰符

    [public/protected/private] [static] [final] [transient] [volatile]
  • 成员变量的类型可以是Java中的任意类型,包括简单数据类型、类、接口、数组。

  • 变量的初始化

数据类型 初值
整型(byte/short/int/long) 0
float 0.0f
double 0.0d
boolean false
char /u0000
对象类型 null

变量分类、作用域

  • 变量的作用域

    • 决定了变量可以使用的范围:

      • 全局变量(Global variables):变量可以在整个类中被访问。
      • 局部变量(Local variables):变量只能定义在其的代码段中被访问。使用前必须初始化
    • 作用域规则:

      在一个代码段中定义的变量,只能在该代码段或者该代码段的子代码段中可见。

  • 变量分类

    • 全局变量:

      • 实例成员变量:单个对象独有,修改对象自己的实例变量,不影响别的对象
      • 类成员变量(类变量、静态变量):被所有对象共享,使用static修饰。
    • 成员变量默认的初始值。
    • 局部变量:定义在方法体中的变量,使用之前必须初始化。加载到栈空间
    • 类属性:具有相应的 set / get 方法。加载到堆空间
  • 注意:

    变量名首字母一般小写

* 成员变量 和 局部变量 的区别

2.4 运算符

2.4.1 算术运算符

+, -, *, /, %

2.4.2 关系运算符

==, ===, !=, >, >=, <, <=
  • 做运算之后一定是boolean型值。

  • >, >=, <, <=比较数值,

    ==, !=除了比较数值之外,还可以比较相同类型

    flag = "我" >= "你";//×错误
    flaf = "我" == "你";//√正确
  • 其中,使用 == 做比较时,

    • 基本类型:比较数据值

    • 引用类型:比较地址值,所以比较字符串内容是否相同应该调用 equals() 方法。

      str1.equals(str2) ,相同返回 True ,否则 False

2.4.3 逻辑运算符

&&, ||, !, &, |
  • &&,||进行“短路”运算

    即,有假必假,有真必真。

  • &, |则不进行,两边都要进行运算。

2.4.4 赋值和复合运算符(优先级垫底)

+=, -=, *=, /=, %=;
>>=, <<=, >>>=

2.4.5 位运算符

>> /2, << *2, >>>

位移运算(没有 <<< )。

  • 右移运算符 >>

    用最高位的 10 补。

  • 无符号右移运算符 >>>

2.5 运算符优先级

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

三、Java数据类型

3.1 基本数据类型(8大)

*基本数据类型的数据储存在栈内存中。

3.1.1 逻辑类型 boolean

  • boolean:1字节

    • 也叫布尔型。
    • 有两个值:true和false。

3.1.2 整型 byte / short / int / long

  • byte:1字节,-27~(27-1),-128 ~ 127,256个值。
  • short:2字节,-215~(215-1),
  • int:4字节,-2147483648~2147483647
  • long:8字节

3.1.3 浮点类型 double / float

  • float:4字节

    • 结尾加上F/f;
  • double:8字节
    • 结尾加上D/d;

3.1.4 字符类型 char

  • char:2字节

    • 单个字符

*注意

  1. String类型不是基本数据类型;
  2. 字符串与什么相加都是字符串;

3.2 复合数据类型/引用数据类型

  • 引用类型的变量,只可能存储两类值:null地址值(含变量的类型)

  • 数组储存在堆内存中。

3.3 类型转换

数据类型的优先级(低→高)

byte,short,char→ int → long → float → double

3.3.1 自动/自动转换

  • 低优先级转换为高优先级

  • char隐式转换:字符在Unicode的编号。

  • boolean型数据和其他基本数据类型之间不能相互转换。

  • 复合赋值操作:

    short s = 10;
    s = s + 1;//错误,s+1是int型 short s2 = 10;
    s2 += 1;//正确,使用复合赋值操作时,编译器会把得到的s2+1转换成short型
  • byte, short, char这三者不管怎么组合运算得到的都是int型数据。

3.3.2 强制/显式转换

  • 高优先级转换为低优先级

  • 方式:(目标类型)变量名

double dou2 = 3.14;
int myInt = (int)dou2;//myInt==3
  • int和long转换char:会根据整型值对应的Unicode表中的字符。

  • 注意:

    1. 取值范围由大变小可能会造成数据溢出,如:
    int x = 130;
    byte b = (byte)x;//b=-128
    1. 转换前的数据类型与转换后的数据类型兼容。

      String str = "1";
      int x = (int)str;//错误

四、程序的三种基本结构

4.1 顺序结构

4.2 分支结构

  • 单分支、双分支、多分支。

  • 语句:

    • if-else语句(可以嵌套)

      if (expression) {
      expression;
      } else if (expression) {
      expression;
      } else {
      expression;
      }
      • 即使只有一个语句,也尽量不要省略大括号{}
    • switch-case语句

      switch (expression) {
      case 常量1:{
      statements
      break;
      }
      case 常量2: {
      statements
      break;
      }
      ...
      default: {
      statements
      break;
      }
      }
      • 常量的数据类型要和expression一致。
      • expression的值不能是浮点型,可以是字符串,字符,整型,枚举。

4.3 循环结构

for循环

  • 格式:

    for(1初始化计数;2条件测试;4再求值参数) {
    3expression;//如果有多个语句,{}不能省略
    }

    例:

    int sum = 0;
    for(int i = 0; i<=5; i++) {
    sum += i;
    }
    • for循环中的三个表达式都可以省略,但不能省略';'号。

    • ▲使用for循环可以不包含任何循环体(语句),有助于提高某些算法的效率和创建时间延迟循环。

      for(int i=0; i<xyz_value; i++)

while循环

  • 格式:

    while(expression1) {
    expression2;
    }
    • expression1用于判断,结果为true则执行循环体中的语句(expression2);结果为false则退出循环。

do-while循环

  • 格式:

    do {
    expression1;
    } while (expression2);
    • 循环体中的代码先执行一次再来根据expression2来判断。
    • 注意最后的分号';'

*注意

  • 如果循环次数在执行循环体之前就已确定,一般用for语句;如果循环次数是根据循环体的执行情况确定的,一般用while语句或者do-while语句

    (循环次数已经确定→for;否则其他)

  • 当循环体至少执行一次时,用do-while语句;反之,如果循环体可能一次也不执行时,用 while语句。

五、数组

5.1 一维数组

5.1.1 定义

  • type arrayName[]; 或者 type[] arrayName;
int[] intArray;
int intArray[];
  • 可以定义复合类型(即类类型)的数组。
People[] pArray;

5.1.2 初始化

静态初始化

  • 可在定义时初始化:
int intArray[] = {1,2,3,4};
int[] arr = {1,2,3,4};//不能给数字

动态初始化

  • 用new运算符为数组分配空间
  • 格式:type[] arrayName = new type[num];
int[] arr1 = new int[2];//{0,0}
arr1[0] = 123;
arr2[1] = 456;
  • 注意:

    1. 对于动态初始化一维数组,如果只new没有赋值,数组中的所有元素会自动获得默认初始值。如下:

      数组类型 元素默认初始值
      整型数组 0
      浮点型数组 0.0
      布尔型数组 false
      字符型数组 /u0000
      类类型数组 null

5.1.3 数组的下标与长度

引用方式:arrayName[index]

  • 数组下标可以是整型常数或者表达式

  • 如果下标(index)越界,则会报异常。

  • 获取数组的元素个数(长度):数组变量名.length

    intArray.length

5.1.4 遍历数组

  1. for语句
int[] arr={1,2,3,4}
for(int i=0;i<5;i++) {
System.out.println(arr[i]);
}
  1. foreach
for(int num:arr) {
//arr数组中的元素,会依次赋给num
System.out.println("num="+num);
}

*注意

  • 数组越界会报错

六、输入

6.1 控制台输入

import java.util.*;
Scanner sc = new Scanner(System.in);
  1. 先构造一个 Scanner

    Scanner sc = new Scanner(System.in);
  2. 使用 next 等方法

    String name = in.nextLine(System.in);
    • next方法:字符串;
    • nextLine方法:读取一行字符串;
    • nextInt方法:读取整型;
    • nextDouble方法:读取浮点数;
    • ......

[Java]Java入门笔记(二):数据类型、程序结构、数组、控制台输入的更多相关文章

  1. C#学习笔记二:C#程序结构

    从最简单的HelloWorld开始入手,这是一个最低限度的C#程序结构. C# Hello World 示例 一个C#程序主要由以下几部分组成: 命名空间声明 一个类 类方法 类属性 一个Main方法 ...

  2. Java NIO入门(二):缓冲区内部细节

    Java NIO 入门(二)缓冲区内部细节 概述 本文将介绍 NIO 中两个重要的缓冲区组件:状态变量和访问方法 (accessor). 状态变量是前一文中提到的"内部统计机制"的 ...

  3. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  4. Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer

    作者:Grey 原文地址:Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer ByteBuffer.allocate()与ByteBuffer.allocateD ...

  5. muduo学习笔记(二)Reactor关键结构

    目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...

  6. Java初学者作业——编写Java程序, 在控制台输入数字,计算表达式1-2+3-4……+(2*n-1)+2*n的结果。

    返回本章节 返回作业目录 需求说明: 编写Java程序, 在控制台输入数字 计算表达式1-2+3-4--+(2*n-1)+2*n的结果. 实现思路: (1)声明变量 n 和 sum,用于存储用户输入的 ...

  7. Java初学者作业——编写JAVA程序,在控制台输入一位学生的英语考试成绩,根据评测规则,输出对应的成绩等级。定义方法实现学生成绩的评测功能。

    返回本章节 返回作业目录 需求说明: 编写JAVA程序,在控制台输入一位学生的英语考试成绩,根据评测规则,输出对应的成绩等级.要求:定义方法实现学生成绩的评测功能. 学生的英语考试成绩进行评测,评测规 ...

  8. day03运算符、表达式、自增自减、三目运算符、程序结构、用户输入

    复习 1.java的输出语句 1)System.out.println(); 2)System.out.print(); 2.注释 1)单行注释 // 2)多行注释 /* .... */ 3.变量 1 ...

  9. java加密算法入门(二)-对称加密详解

    1.简单介绍 什么是对称加密算法? 对称加密算法即,加密和解密使用相同密钥的算法. 优缺点: 优点:算法公开.计算量小.加密速度快.加密效率高. 缺点: (1)交易双方都使用同样钥匙,安全性得不到保证 ...

  10. [原创]java WEB学习笔记70:Struts2 学习之路-- 输入验证,声明式验证,声明是验证原理

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. Go Error 嵌套到底是怎么实现的?

    原文链接: Go Error 嵌套到底是怎么实现的? Go Error 的设计哲学是 「Errors Are Values」. 这句话应该怎么理解呢?翻译起来挺难的.不过从源码的角度来看,好像更容易理 ...

  2. day 20 C语言顺序结构基础3

    (1).若有定义:int a=100:则语句printf("%d%d%d\n",sizeof("a"),sizeof(a),sizeof(3.14)); 则输出 ...

  3. 基于Node和Electron开发了轻量版API接口请求调试工具——Post-Tool

    Electron 是一个使用 JavaScript.HTML 和 CSS 构建桌面应用程序的框架. 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 Java ...

  4. 达索CATIA许可证(License)管理使用和优化

    现下主流的V6版本CATIA,是由达索公司提供授权的浮动型License,其客户端通过企业内网从许可证服务器获得许可证,最少要有一个服务器端DS License Server提供一定数量的Licens ...

  5. 《剑指offer》面试题67. 把字符串转换成整数

    问题描述 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数.   首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. ...

  6. 【小记录】android下opencv的cv::dft()函数,CPU版本与opencl版本的性能相差16倍

            cv::dft  相差15.9倍         cpu版本  单次调用  0.029448 毫秒         opencl版本  单次调用  0.468688  毫秒   差别仅 ...

  7. java类的反射机制

    1.获得一个类的类对象有哪些方式? - 方法1:类型.class,例如:String.class- 方法2:对象.getClass(),例如:"hello".getClass()- ...

  8. Postman 支持 gRPC 了!继续领先 ~

    最近国产API管理工具比较热,几款产品在API管理层面做得也都还不错,但主要还是对HTTP相关的API管理,毕竟这类API的应用目前还是最为广泛的.但显然,还有不少其他应用场景目前没有覆盖到,DD在之 ...

  9. 深度评测丨 GaussDB(for Redis) 大 Key 操作的影响

    本文分享自华为云社区<墨天轮评测:GaussDB(for Redis)大Key操作的影响>,作者: 高斯 Redis 官方博客. 在前一篇文章<墨天轮评测:GaussDB(for R ...

  10. servlet单例模式以及servlet的请求流程

    ​ 目录 一.servlet 单例模式: 二.servlet的请求流程: ★ 流程: ★ 详细过程如下: 一.servlet 单例模式: tomcat服务器,通过Java的反射机制来自动调用servl ...