Java的标识符,数据类型与各种运算符
一.标识符
用作给变量、类和方法命名
java强调标识符有如下命名规则:
- 标识符必须以字母,下划线_,美元$开头
- 标识符其他部分可以是字母,下划线"_",美元符"$"和数字的任意组合
- 标识符大小写敏感,长度无限制
- 不可以是java关键字
JAVA不采用通常语言使用的ASCII字符集,而是采用unicode这样标准的国际字符集。
因此这里的字母的含义:英文,汉字
合法的字符集:
int a = 3;
int _123 = 3;
int $12aa = 3;
int 变量1 = 55;
不合法的标识符:
int 1a = 3; //不能用数字开头
int a# = 3; //不能包含#这样的特殊字符
int int = 3; //不能使用int关键字
二.关键字
Java关键字是Java语言保留供内部使用的,如class用于定义类。 关键字也可以称为保留字,它们的意思是一样的。
需要注意的是goto和const作为java中的关键字不进行任何使用,也称为保留字
三.数据类型
数据类型: java数据类型分为基本数据类型和引用数据类型:
1.基本数据类型
基本数据类型又分为整数类型(int byte short long),浮点类型(float double),字符类型(char),布尔类型(boolean)
整型
整型用于表示没有小数部分的数值,它允许是负数。
取值范围是
byte -128~127
short -215 ~ 215-1 (-32768~32767)
int -231 ~ 231-1
long -263 ~ 263-1
浮点型
float 4字节 取值范围:-3.403E38~3.403E38
float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。
double 8字节 取值范围:-1.798E308~1.798E308
double表示这种类型的数值精度是float类型的两倍,又被称作双精度,绝大部分应用程序都采用double类型。
Java 浮点类型常量有两种表示形式
十进制数形式,例如:
3.14 314.0 0.314
科学记数法形式,如
314e2 314E2 314E-2
需要注意的是Float声明的时候需要在后缀加上F或f,因为小数类型默认为double类型,会产生编译错误
2.引用数据类型(数组,类和接口)
四.变量
在程序运行中其值可以发生改变的量,相当于向程序申请一个存储空间,里面的东西随时可能改变,其申请的空间大小与数据类型相对应
声明变量
数据类型 变量名 = 初始值;
int num = 10;
示例代码:
public class Test1{
public static void main(String[] args){
byte b=20;//范围-128~127
System.out.println("byte--->b="+b);
byte b2=012;//八进制
System.out.println("byte--->八进制b2="+b2);//将八进制12--->十进制10
byte b3=0x12;//十六进制
System.out.println("byte--->十六进制b2="+b3);//将十六进制12--->十进制18
short s=300;//范围-32768~32767
System.out.println("short--->s="+s);
int i=10000;//范围大约21亿
System.out.println("int--->i="+i);
long l=5555555555L;//5555555555默认int类型,5555555555L为long类型
System.out.println("long---->l="+l);
float f=3.14f; //3.14默认为double类型,3.14f为float
System.out.println("float--->f="+f);
//科学计数法:314E2=314*10^2
float f2=314e2F;//314e2默认为double类型
System.out.println("科学计数法的314E12==>"+f2);
double d=314e2;
System.out.println("double科学计数法的314E12==>"+d);
double d2=1.123456789012345678;//精度四舍五入
System.out.println("double--->d2="+d2);
}
}
结果如下:
五.常量
常量:在程序运行过程不能更改其值的变量
在java中声明常量使用final,一旦变量使用final修饰,该变量为常量,无法为其重新赋值。
变量命名经常大写(便于与变量进行区分)。
示例代码
public class TestVar4{
public static void main(String[] args){
/*
常量在程序运行过程中无法被修改,在java中使用final修饰,
常量的单词一般为大写单词或字符
3.1415926
*/
final double PI = 3.1415926;
//PI = 3.14;错误: 无法为最终变量PI分配值,无法继续为PI分配值了
double r = 5;
double s = r*r*PI;
double c = 2*r*PI;
System.out.println("圆的面积为:" + s);
System.out.println("圆的周长为:" + c);
}
}
常量代码
结果如下:
六.使用Scanner类获取用户输入
Scanner处于 java.util.*包下,使用其中的方法可以获取用户输入的内容(字符串,整型,浮点型,双精度浮点类型,布尔类型等)。
示例:
import java.util.Scanner;//使用前导包
public class TestScanner{
public static void main(String[] args){
//创建对象:类名 对象名 = new 类名(参数);
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的姓名:");
//调用方法 对象名.方法名()
String name = scanner.nextLine();//获取用户输入的字符串信息
System.out.println("请输入您的年龄:");
int age = scanner.nextInt();
System.out.println("请输入您的身高:");
float height = scanner.nextFloat();
System.out.println("请输入您的体重:");
double weight = scanner.nextDouble();
System.out.println("是否已婚:");
boolean is = scanner.nextBoolean();
System.out.println("===========个人信息=========");
System.out.println("您的姓名是" + name);
System.out.println("您的年龄是" + age);
System.out.println("您的身高是" + height);
System.out.println("您的体重是" + weight);
System.out.println("是否已婚" + is);
}
}
Scanner使用
七.运算符
1.算术运算符:+,-,*,/,%,++(自增),--(自减)
i++和++i的异同:
相同:最后i都会加1;
不同:++在变量前是先自增1,再参与运算,再变量后是先参与运算再自增
2.赋值运算符:=
复合赋值运算符: +=,-=,*=,/=,%=
3.比较运算符:>,>=,<=,<=,!=,==
4.逻辑运算符:
短路与&&:如果两个表达式中第一个为false,第二个表达式将不再进行运算。
逻辑与&:不论表达式1是否为真,表达式2都将进行运算。
短路或||:如果两个表达式中第一个为true,第二个表达式将不再进行运算。
逻辑或|: 不论表达式1是否为真,表达式2都将进行运算非!:
5.位运算符(了解):
运算符 |
含义 |
示例 |
~ |
按位非(NOT)/取反 |
b = ~a |
& |
按位与(AND) |
c = a & b |
| |
按位或(OR) |
c = a | b |
^ |
按位异或(相同为0相异为1) |
c = a ^ b |
>> |
右移;左边空位补最高位即符号位 |
b = a >> 2 |
>>> |
无符号右移,左边空位补0 |
b = a >>> 2 |
<< |
左移;右边空位以补0 |
b = a << 1 |
6.条件运算符(三目运算符): ?代替if…else条件结构
int max = a>b?a:b;
等同于
int max;
if(a>b){
max=a;
}else{
max=b;
}
7.运算符的优先级
八.类型转换
自动类型转换:容量小的数据类型可以自动转换为大的数据类型
byte--short-int -long-float-double(从左至右)
转换的前提:
- 两种数据类型相互兼容
- 目标类型大于源类型
在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失。
特例: 可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围
Short b = 12; //合法
short b = 1234567; //非法
强制类型转换
强制类型转换,又被称为造型,用于显式的转换一个数值的类型. 在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
强制类型转换的语法格式:“(type)var”,运算符“()”中的type表示将值var想要转换成的目标数据类型。
例如:
double x = 3.14;
int nx = (int)x; //值为3
char c = 'a';
int d = c+1;
System.out.println(d);
System.out.println((char)d);
当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值。
例如:
int x = 300;
byte bx = (byte)x; //值为44
不能在布尔类型和任何数值类型之间做强制类型转换。
思考题:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
import java.util.Scanner;
public class HomeWork4{
public static void main(String[] args){
/*
解题思路:
1,先获取用户输入的数字,定义一个Scanner对象
2,将这个数字的个十百千位取出来
3,将值进行加密操作,先加5在除以10取余
3,利用异或运算交换个位和千位,十位和百位
4,输出数字
*/
System.out.println("请输入4位整数:");
//定义一个Scanner对象
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
//将这个数字的个十百千位取出来
int ge = num%10;
int shi = num/10%10;
int bai = num/100%10;
int qian = num/1000;
//将值进行加密操作,先加5在除以10取余
ge = (ge+5)%10;
shi = (shi+5)%10;
bai = (bai+5)%10;
qian = (qian+5)%10;
//利用异或运算交换个位和千位,十位和百位
ge = ge^qian;
qian = ge^qian;
ge = qian^ge;
shi = shi^bai;
bai = bai^shi;
shi = shi^bai;
System.out.println("加密后的数据为:"+qian+bai+shi+ge); }
}
java code
结果如下:
思考题2:利用”异或”运算的性质,对几个字符进行加密并输出密文,然后再解密。加密算法是:密钥是字符’8’,明文的每个字符和密钥进行异或运算,得到密文。
密钥和密文的每个字符再次进行异或运算,重新得到明文。结果如图所示。
这个题利用了一个数字被另一个数字异或运算2次会得到这个数字本身的原理
比如 int a=1;
int b=2;
a=a^b^b;通过计算会发现a=1;一个数字被另一个数字异或两次会得到这个数字本身
答案:
public class HomeWork5{
public static void main(String[] args){
char a = '十';
char b = '点';
char c = '进';
char d = '攻';
char e = '8';
System.out.println("加密前的数据为:"+a+b+c+d);
a = (char)(a^e);
b = (char)(b^e);
c = (char)(c^e);
d = (char)(d^e);
System.out.println("加密后的数据为:"+a+b+c+d);
a = (char)(a^e);
b = (char)(b^e);
c = (char)(c^e);
d = (char)(d^e);
System.out.println("解密后的数据为:"+a+b+c+d);
}
}
额外话题:为什么byte的取值范围是-128至127;而不是-127-127呢?
这个困扰了我很久,问了很多人一直得不到标准的答案,最后在一位帅哥的博客中找到了,很激动
1,byte是1个字节,8位
2.最大的应该是0111 1111,因为第一位是符号位,0表示正数
3.最小的应该是1000 0000,同理,表示负数最小的(1111 1111是最大的负数-1)
4.01111111就是127;
5.计算机分为补码,反码,原码,正数的补码反码原码都一样,负数的反码是按位取反0变1,1变0,比如1 000 1110 反码是 1 111 0001,1是符号位,补码是反码的基础上加1
6.补码的补码就是原码
7计算机用补码表示一个数的,1 000 0000 在计算机中就是补码,求其原码,可以求它的补码就是原码
8 1 000 0000反码是 1 1111111 补码是 1 10000000 就是-128
9 所以喽,byte的取值范围就是-128 - 127
Java的标识符,数据类型与各种运算符的更多相关文章
- JAVA:变量,数据类型,运算符,流程控制(简介)<1>
一.安装和配置jdk 1.jdk是什么? (1).jdk全称是Java Development Kit, Java开发工具包; (2).jdk是sun公司开发的; (3).jdk主要包括:jre(Ja ...
- java基础(数据类型,运算符)
java基础之数据类型(变量) java中存在的数据有常量和变量 常量:在程序执行的过程中其值不可以发生改变 常量的分类 字面值常量 字面值常量的分类 常量 描述 字符串常量 用双引号括起来的内容 整 ...
- Java基础:Java变量、数据类型、运算符(2)
1. 标识符和关键字 1.1 标识符 标识符是用来标识类名.对象名.变量名.方法名.类型名.数组名.文件名的有效序列. Java规定,标识符由字母.数字.下划线“_”.美元符号“$”组成,并且首字母不 ...
- java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;
<java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...
- 乐字节Java变量与数据类型之一:Java编程规范,关键字与标识符
大家好,我是乐字节的小乐,这次要给大家带来的是Java变量与数据类型.本文是第一集:Java编程规范,关键字与标识符. 一.编程规范 任何地方的名字都需要见名知意: 代码适当缩进 书写过程成对编程 对 ...
- Java 基础标识符
标识符: 程序员为自己定义的类,方法或者变量等起的名称. 标识符由大写字母,数字,下划线(_)和美元符号组成,但不能以数字开头.Java 语言中严格区分大小写. 包名: 使用小写字母. 类名和接口名: ...
- java基础标识符,关键字,常量
1关键字1.1关键字的概述Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名.方法名.类名.包名.2标识符2.1什么是标识符就是程序员 ...
- Java 基础-基本数据类型与表达式
基本数据类型 基本概念 标识符 标识符与内存中的某个位置对应,Java 中标识符的规范如下: 必须由大小写字母.下划线.美元符号.数字组成 首字母只能是大小写字母.下划线.美元符号 变量 变量的值可以 ...
- 【Java】标识符
一.标识符 文章目录 一.标识符 1.标识符的命名规则 2.关键字.保留字.特殊值 3.code Java 对各种变量.方法和类等要素命名时使用的字符序列称为标识符.简单的说,凡是程序员自己命名的部分 ...
随机推荐
- 动态样式语言—LESS
博客原文地址:Claiyre的个人博客 https://claiyre.github.io/ 博客园地址:http://www.cnblogs.com/nuannuan7362/ 如需转载,请在文章开 ...
- php文件上传分类
<?php/** * 文件上传类 * @author lijiamin * @time 2017-02-17 * @email 1195989301@qq.com */class Upload{ ...
- 在vim中,使用可视化拷贝(剪切)粘贴文本
1 定位光标到你想要开始剪切的位置 2 按v选择字符(按V是选择整行) 3 移动光标到你想要结束剪切的位置 4 按d是为了剪切(按y是为了拷贝) 5 移动光标到你想要粘贴的位置 6 按P是在光标之前 ...
- git 命令用法 流程操作
Git 是一款免费的.开源的.分布式的版本控制系统.旨在快速高效地处理无论规模大小的任何软件工程. 每一个 Git克隆 都是一个完整的文件库,含有全部历史记录和修订追踪能力,不依赖于网络连接或中心服务 ...
- SCP实现无需密码传输文件
SCP概述 Linux为我们提供了两个用于文件copy的命令,一个是cp,一个是scp,但是他们略有不同 CP ----- 主要是用于在同一台电脑上,在不同的目录之间来回copy文件 SCP --- ...
- 实例了解js面向对象的封装和继承等特点
1.面向对象特点 相比之前按照过程式写法,面向对象有以下几个特点; 1.抽象:抓住核心问题,就是将很多个方法放在一个对象上.对象由属性和方法组成,属性就是我们定义的变量,它是静态的:方法就是行为操作, ...
- 1详细解析HTML基础结构
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- RAC之常用方法-----新手入门
年后换工作新入职,公司开发在使用RAC,之前居然一直没有了解过,独立开发的弊端,信息闭塞,而且自己也懒,这几天看了下RAC,确实很强大有木有. 什么是ARC 简单的说,RAC就是一个第三方库,他可以大 ...
- webpack 引用 jquery + bootstrap 报错解决
webpack 引用 jquery + bootstrap , error : jQuery is not defind 在webpack.dev.conf.js plugins[] 加入 new w ...
- 读书笔记 effective c++ Item 29 为异常安全的代码而努力
异常安全在某种意义上来说就像怀孕...但是稍微想一想.在没有求婚之前我们不能真正的讨论生殖问题. 假设我们有一个表示GUI菜单的类,这个GUI菜单有背景图片.这个类将被使用在多线程环境中,所以需要mu ...