[Java]Java入门笔记(二):数据类型、程序结构、数组、控制台输入
二、基本语法
2.1 标识符
定义:给类、方法、变量等起的名字
规则:
可以使用字母(26个英文字母的大小写、各国的一些语言、…)、数字、下划线、美元符号;
不能以数字开始(可以$开始);
不能是Java中的关键字;
[▲Java]类名必须以大写字母开始
标识符的规范:
- 见名知义
- 有多个单词时,使用驼峰命名法(userName)
- 常量名全部大写
- 包名小写
- 类名首字母大写
- 工程名首字母大写
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;//常量的值不可被修改
注意:
- 必须在方法外定义常量;
- 常量的值不可被修改;
2.3 变量
注意:
- 必须给局部变量赋值;
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, >>>
位移运算(没有 <<< )。
右移运算符
>>
:用最高位的
1
或0
补。无符号右移运算符
>>>
:
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字节
- 单个字符
*注意
- String类型不是基本数据类型;
- 字符串与什么相加都是字符串;
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表中的字符。
注意:
- 取值范围由大变小可能会造成数据溢出,如:
int x = 130;
byte b = (byte)x;//b=-128
转换前的数据类型与转换后的数据类型兼容。
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;
注意:
对于动态初始化一维数组,如果只new没有赋值,数组中的所有元素会自动获得默认初始值。如下:
数组类型 元素默认初始值 整型数组 0 浮点型数组 0.0 布尔型数组 false 字符型数组 /u0000 类类型数组 null
5.1.3 数组的下标与长度
引用方式:arrayName[index]
数组下标可以是整型常数或者表达式。
如果下标(index)越界,则会报异常。
获取数组的元素个数(长度):数组变量名.length
intArray.length
5.1.4 遍历数组
- for语句
int[] arr={1,2,3,4}
for(int i=0;i<5;i++) {
System.out.println(arr[i]);
}
- foreach
for(int num:arr) {
//arr数组中的元素,会依次赋给num
System.out.println("num="+num);
}
*注意
- 数组越界会报错
六、输入
6.1 控制台输入
import java.util.*;
Scanner sc = new Scanner(System.in);
先构造一个 Scanner
Scanner sc = new Scanner(System.in);
使用 next 等方法
String name = in.nextLine(System.in);
- next方法:字符串;
- nextLine方法:读取一行字符串;
- nextInt方法:读取整型;
- nextDouble方法:读取浮点数;
- ......
[Java]Java入门笔记(二):数据类型、程序结构、数组、控制台输入的更多相关文章
- C#学习笔记二:C#程序结构
从最简单的HelloWorld开始入手,这是一个最低限度的C#程序结构. C# Hello World 示例 一个C#程序主要由以下几部分组成: 命名空间声明 一个类 类方法 类属性 一个Main方法 ...
- Java NIO入门(二):缓冲区内部细节
Java NIO 入门(二)缓冲区内部细节 概述 本文将介绍 NIO 中两个重要的缓冲区组件:状态变量和访问方法 (accessor). 状态变量是前一文中提到的"内部统计机制"的 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer
作者:Grey 原文地址:Java IO学习笔记二:DirectByteBuffer与HeapByteBuffer ByteBuffer.allocate()与ByteBuffer.allocateD ...
- muduo学习笔记(二)Reactor关键结构
目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...
- Java初学者作业——编写Java程序, 在控制台输入数字,计算表达式1-2+3-4……+(2*n-1)+2*n的结果。
返回本章节 返回作业目录 需求说明: 编写Java程序, 在控制台输入数字 计算表达式1-2+3-4--+(2*n-1)+2*n的结果. 实现思路: (1)声明变量 n 和 sum,用于存储用户输入的 ...
- Java初学者作业——编写JAVA程序,在控制台输入一位学生的英语考试成绩,根据评测规则,输出对应的成绩等级。定义方法实现学生成绩的评测功能。
返回本章节 返回作业目录 需求说明: 编写JAVA程序,在控制台输入一位学生的英语考试成绩,根据评测规则,输出对应的成绩等级.要求:定义方法实现学生成绩的评测功能. 学生的英语考试成绩进行评测,评测规 ...
- day03运算符、表达式、自增自减、三目运算符、程序结构、用户输入
复习 1.java的输出语句 1)System.out.println(); 2)System.out.print(); 2.注释 1)单行注释 // 2)多行注释 /* .... */ 3.变量 1 ...
- java加密算法入门(二)-对称加密详解
1.简单介绍 什么是对称加密算法? 对称加密算法即,加密和解密使用相同密钥的算法. 优缺点: 优点:算法公开.计算量小.加密速度快.加密效率高. 缺点: (1)交易双方都使用同样钥匙,安全性得不到保证 ...
- [原创]java WEB学习笔记70:Struts2 学习之路-- 输入验证,声明式验证,声明是验证原理
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- Spring系列4:依赖注入的2种方式
本文内容 基于构造器的依赖注入 基于setter的依赖注入 基于构造器的依赖注入 案例 定义2个简单的bean类,BeanOne 和 BeanTwo,前者依赖后者. package com.crab. ...
- 基于SpringBoot如何实现一个点赞功能?
基于SpringBoot如何实现一个点赞功能? 解析: 基于 SpringCloud, 用户发起点赞.取消点赞后先存入 Redis 中,再每隔两小时从 Redis 读取点赞数据写入数据库中做持久化存储 ...
- Servlet Listener(监听器)
监听器 Listener 是一个实现特定接口的 Java 程序,这个程序专门用于监听另一个 Java 对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即自动执行.监听器的相关概 ...
- gin中的路由参数
package main import ( "fmt" "github.com/gin-gonic/gin" ) func main() { router := ...
- 阿里巴巴发布最佳实践 | 阿里巴巴DevOps实践指南
编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电 ...
- springboot 配置springmvc?
package com.aaa.zxf.config; import org.springframework.boot.SpringBootConfiguration; import org.spri ...
- C++学习Day 1
c++的函数需要声明才能再写他的定义,声明可以写多次,如果执行在main之前可以不写,全写不会犯错,现在看好像c++的函数定义里没有out,也没有变量的public和private(后面有再改) 声明 ...
- AT2163 [AGC006B] Median Pyramid Easy
需要一点灵感的题目. 可以发现这样一个事情,当三个数中有两个数相同时,中为数一定是这两个相同的数. 基于这个观察,我们想让每一行都存在这样两个相同的两个数,就一定能保证第一层的值为 \(x\) 了. ...
- AFN框架
0.AFN框架基本使用 0.1 AFN内部结构 AFN结构体 - NSURLConnection + AFURLConnectionOperation(已经被废弃) + AFHTTPRequestOp ...
- CentOS 7中的系统语言包及UTF-8、en_US.UTF-8和zh_CN.UTF-8的区别
UTF-8.en_US.UTF-8和zh_CN.UTF-8的区别 en_US.UTF-8.zh_CN.UTF-8叫做字符集,就是说'A'.'B'.'中'.'国'等对应的整数值,en_US.UTF-8只 ...