Java基础知识2-Java基本语法
数据类型
1.Java程序的基本组成
- 关键字:被Java语言赋予特定含义的单词,不能作标识符,如private。
- 标识符:由数字、字母、$和_组成的字符串,用于引用变量。且首字母不能是数字。
- 变量:程序执行过程中,在某个范围内其值发生改变的量。
- 常量:在执行过程中其值不发生改变,分为字面值常量和自定义常量,如3.14。
- 表达式:Java中使用的是中缀表达式。如 double a +(b-c)/2。
2.基本数据类型:
类型 |
占用存储空间 |
值域 |
byte |
1字节 |
-128~127 |
short |
2字节 |
-2^15~2^15-1 |
int |
4字节 |
-2^31~2^31-1 |
long |
8字节 |
-2^63~2^63-1 |
float |
4字节 |
-3.403E~3.403E38 |
double |
8字节 |
-1.798E308~1.798E308 |
类型转换:
- 默认转换:byte,short,char—>int—>long—>float—>double.其中byte,short,char相互之间不能转换,他们参与运算首先转换成int类型。若强行将计算的赋值表达式与变量运算,则会发生编译失败。如
- 强制转换:目标类型 变量名 = (目标类型)(被转换的数据);转换成二进制进行考虑。比如要打印 byte a = 130,可以利用强制转换来实现。
3.运算符
运算符优先级表
(1)算术运算符(+,-,*,/,%,++,--)
A:+的用法
a:加法
b:正号
c:字符串连接符 (对+进行了重载)
B:/和%的区别
a: / 整数之间的相除,结果是整数。
向0取整
如果想得到小数,*1.0即可。
b: %
判断一个数是否是奇数
a % b = a - (a / b) *b
取余运算是一个很耗时的操作,在性能比较关键的时候最好不要使用
D:++和--的用法
a:他们的作用是自增或者自减
b:使用
**单独使用
放在操作数据的前面和后面效果一样。
a++或者++a效果一样。
**参与操作使用
放在操作数的前面:先自增或者自减,再参与操作
放在操作数的后面:先参与操作,再自增或者自减
c:底层原理:
a = a++;
int temp = a;
a++;
a = temp;
(2)赋值运算符(=,+=,-=,*=,/=,%=等)
A:=叫做赋值运算符,也是最基本的赋值运算符
int x = 10; 把10赋值给int类型的变量x。
a = b = 10;
赋值运算符是从右向左结合的。
赋值表达式有值的,值等于=右边表达式的值。
B:扩展的赋值运算符的特点
隐含了自动强制转换。
面试题:
short s = 1;
//s = s + 1;
short s = 1;
s += 1;
请问上面的代码哪个有问题?
(3)比较运算符( ==,!=,>,>=,<,<=,instanceof)
A:无论运算符两端简单还是复杂最终结果是boolean类型。
B:千万不要把==写成了=
(4)逻辑运算符(&,|,^,!,&&,||)
A:逻辑运算符用于连接boolean类型的式子
B:结论
&: 有false则false
|: 有true则true
^: 相同则false,不同则true。
情侣关系。
!: 非true则false,非false则true
&&: 结论和&是一样的,只不过有短路效果。左边是false,右边不执行。
||: 结论和|是一样的,只不过有短路效果。左边是true,右边不执行。
推荐使用 &&,||
(5)位运算符 (&, |, ^, ~, <<, >>, >>>)
A:结论:
&:同时为1,才为1,否则为0
|:同时为0,才为0,否则为1
^: 相同为0,不同为1;
a ^ b = b ^a;
a ^ 0 = a;
a ^ a = 0;
~: ~0为1,~1为0;
<<: 移除的高位丢弃,低位补0;
左移n个单位,相当于乘以 2 ^ n;
>>: 移除的低位丢弃,如果符号位是0,则高位补0,如果符号位是1,则高位补1;
右移n个单位,相当于除以2 ^ n;
>>>: 移除的低位丢弃,高位补0;
注意事项:如何移动的单位a超过了字长m, 则实际移动
a mod m (数学中的取余运算)
B:面试题
a: 判断一个数是否是奇数 a & 1 == 1;
b: 对2 ^ n 取余。 a & (2^n - 1);
c: 如何判断一个数是否是2^n a & (a-1) == 0
d: 两个整数之间的交换;
e: 有一堆数,都是成对出现的,只有一个单独的,找出这个单独的数
f: 用最有效率的方式求2 * 8的值 2 << 3;
(6)三元运算符
A:格式
比较表达式 ? 表达式1 : 表达式2;
B:执行流程:
首先计算比较表达式的值,看是true还是false。
如果是true,表达式1就是结果。
如果是false,表达式2就是结果。
C:案例:
a:比较两个数据是否相等
b:获取两个数据中的最大值
c:获取三个数据中的最大值
int max = (a > b ? a : b) > c ? (a > b ? a : b) : c;
int max = a > b ? (a > c ? a : c) : (b > c ? b : c);
语句
1.声明语句
创建某种类型的变量并用标识符为其命名,Java是一种强类型的语言,编译器会检查类型的一致性。所以在首次使用变量时一定要声明。如 int a,b;
2.赋值语句
如 c = 5,是将5这一int型常量赋值给变量c,赋值语句的左侧必须是单个变量,右侧可以是能够得到相应类型值的任意表达式。
3.条件语句
根据制定的条件执行分支代码块之一,有if和swich两种语句结构
if语句
if(<boolean expression>)
{
<block statements1>
}else
{
<block statements2>
}
switch语句
switch(<boolean expression>)
{
case value1:
<block statements1>
break; //可以结束switch语句
case value2:
<block statements2>
break;
…
default: //当所有情况都不匹配的时候,就执行该处的内容
<block statements>
break;
}
- if的关系表达式的结果必须是boolean类型
- switch的关系表达式的取值可以是:byte,short,int,char
- JDK5以后可以是枚举,JDK7以后可以是String
- case后面只能是常量,不能是变量。default,break均可以省略,但不建议
- break 与 continue 语句
- break:立即从循环中退出
- continue:立即开始下一轮循环
4.循环语句
while语句:
while(<boolean expression>)
{
<block statements>
}
循环语句中的代码段称为循环体。
for语句:
以一种更紧凑的方式来表达while的循环
for(<initialize>; <boolean expression>; <increment>)
{
<block statements>
}
5.跳转控制语句
break 中断
- 使用场景:选择结构的switch语句,循环语句,其他场景无意义,会报错
- 作用:跳出单层循环(若有多层,只跳出内层),跳出多层循环,则需要标签语句的配合
continue 继续
- 使用场景:循环语句
- 作用:退出这次迭代,开始下次迭代(循环的一次)
return 返回
- 结束一个方法,一旦遇到return,方法不会再继续往后执行
数组
1.概念:
- 数组是存储同一种数据类型多个元素的集合
2.静态初始化:
- 给出值,系统在Java中的数组必须先初始化,才能使用,一般需要三步(声明数组的名字和类型,创建数组,初始化数组元素)
3.动态初始化:
- 只给长度,系统给出默认值。如 double[] a = new double[N]; //等号左侧声明数组,右侧创建了数组。此时默认初始值是0.0。
编译时将数组初始化。如int[] a = { 1, 1, 2, 5, 8};
4.二维数组:
- 二维数组就是一维数组的数组,如 double[][] a = new double[M][N];
方法
含义:
就是完成特定功能的代码块,在Java中,类似于其他语言中的函数,被称为方法。
格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
方法体;
return 返回值;
}
修饰符:目前就用 public static。后面再详细讲解其他修饰符
返回值类型:就是功能结果的数据类型
方法名:就是起了一个名字,方便我们调用该方法。
参数类型:就是参数的数据类型
参数名:就是变量名
参数分类:
实参:调用方法时,传递的参数
形参:定义方式时,定义的参数。
方法体语句:就是完成功能的代码块
return:结束方法,并把计算结果返回给调用者。
返回值:就是功能的结果,由return带给调用者。
3.性质:
方法的参数按值传递:
- 在方法中参数变量的使用方法和局部变量相同,唯一不同的是参数变量的初始值是由调用方提供的。方法处理的是参数的值,而非参数本身。这种方式产生的结果是在静态方法中改变一个参数变量的值对调用者没有影响。
方法名可以被重载:
- 所谓重载,指的是在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数、参数类型,参数顺序不同。
- 方法重载与返回值类型无关,只看方法名和参数列表(调用时虚拟机通过参数列表的不同来区分同名的方法)
方法只能返回一个值,但是可以包含多个返回语句:
- 一个Java方法只能返回一个值,它的类型是方法签名中声明的类型,如double,int等等。任何静态方法每次都只会返回一个值,即被执行的第一条返回语句的参数。
方法可以产生副作用:
- 方法的返回值可以是void,这表示该方法没有返回值。方法的组后一条语句执行完毕后控制权将会返回给调用方。我们称void类型的静态方法会产生副作用(接受输入,产生输出,修改数组或者改变系统状态)。
Java基础知识2-Java基本语法的更多相关文章
- java 基础知识三 java变量
java 基础知识 三 变量 1.作用域 {} 包围起来的代码 称之为代码块,在块中声明的变量只能在块中使用 2.常量 就是固定不变的量,一旦被定义,它的值就不能再被改变. 3.变量 变量必须在程序 ...
- 《Java基础知识》Java异常处理详解
1. Java 中的异常 前言:Java 中的异常处理是处理程序运行错误时的强大机制之一,它可以保证应用程序的正常流程. 首先我们将了解java异常.异常的类型以及受查和非受查异常之间的区别. 1.1 ...
- 《Java基础知识》Java Lambda表达式
接触Lambda表达式的时候,第一感觉就是,这个是啥?我居然看不懂,于是开始寻找资料,必须弄懂它. 先来看一个案例: @FunctionalInterface public interface MyL ...
- Java基础知识:Java实现Map集合二级联动2
2. 定义获取省份的方法,创建一个Map集合,将上一步得到的映射集合赋值给它,使用Map集合的keySet()方法获取该集合中的所有键对象组成的Set 集合,即为省分集合,创建一个Object型一维数 ...
- Java基础知识:Java实现Map集合二级联动3
* Returns an image stored in the file at the specified path * @param path String The path to the ima ...
- Java基础知识:Java实现Map集合二级联动1
Java实现Map集合二级联动 Map集合可以保存键值映射关系,这非常适合本实例所需要的数据结构,所有省份信息可以保存为Map集合的键,而每个键可以保存对应的城市信息,本实例就是利用Map集合实现了省 ...
- 《Java基础知识》Java技术总结
1. Java 知识点总结 Java标示符.保留字和数制:https://www.cnblogs.com/jssj/p/11114041.html Java数据类型以及变量的定义:https://ww ...
- 《Java基础知识》Java注解"@"详解
Java注解含义: Java注解,顾名思义,注解,就是对某一事物进行添加注释说明,会存放一些信息,这些信息可能对以后某个时段来说是很有用处的.Java注解又叫java标注,java提供了一套机制,使得 ...
- 《Java基础知识》Java包的概念
一.什么是java中的包 Java程序中,为了开发方便,会将功能相似的类放入一个文件夹中,这个文件结构就是包. 二.java中的包的命名规范 域名反写,例如:com.baidu. 三.java中的包的 ...
- 《Java基础知识》Java集合(Collection)
作为一个Developer,Java集合类是我们在工作中运用最多的.最频繁的类.相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求: Java集合就像一个容器,可以存储任何类型的数 ...
随机推荐
- oracle 10g 搭建备库以及一次DG GAP的处理情况
1.主庫全庫備份rman target/rman> backup database format '/backup/fullbak/fullbak_%U';2.用scp傳到備庫,最好是rman目 ...
- linux使用php动态安装模块mysqli.so(ext/mysqlnd/mysqlnd.h: 没有那个文件或目录)
由于我先安装的php,再安装的mysql! 正常过程: 1.安装mysql 2.安装php configure时带–with-mysql参数 现在我不想重装,因此使用phpize动态安装mysqli, ...
- Flutter 裁剪类组件 最全总结
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 ClipRect ClipRect组件使用矩形裁剪子组件, ...
- openwrt sdk 添加软件包 Makefile 写法
参考 https://openwrt.org/start?id=docs/guide-developer/packages ,英文稍好点的自己看吧,我写出来也就是方便,英文不好的人看. 软件包的来源, ...
- vector的初始化方式及用法笔记(不断更新)
vector的初始化方式 1)第一种,类似于数组的方式:vector<string> letter(3);letter[0] = "find";letter[1] = ...
- C++ 判断两个圆是否有交集
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include <math.h> #include <easyx.h ...
- 结题报告--洛谷P3915
题目:点此. 我处理这种多组数据的方法被我叫做“mains法”,就是先假设只有一组数据,写一个代码,然后把那个main函数改成mains,最后写一个真正的main函数. 这个“真正的”main函数一般 ...
- GO系列 | 5分钟入门GO【译】
什么是Google Go? Google Go是由Robert Griesmer,Rob Pike和Ken Thompson在Google设计的一种开源编程语言. Go在语法上类似于C语言: 除了内存 ...
- 一口气说出 6种,@Transactional注解的失效场景
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 一口气说出 9种 分布式ID生成方式,面试官有点懵了 面试总被问 ...
- Vue 学习笔记(四)
一.路由简单示例 HTML <script src="https://unpkg.com/vue/dist/vue.js"></script> <sc ...