Java基础语法01——变量与运算符

本文是对Java基础语法的第一部分的学习,包括注释;标识符的命名规则与规范;变量的数据类型分类以及转换;以及六种运算符(算术、赋值、比较、逻辑、三元和位运算符)。

注释(commment)

书写注释是一种良好的习惯,注释是写给人看的,并不会在代码运行时展示出来。注释主要分为以下三类:单行注释、多行注释、文档注释

  1. 单行注释:一行,格式://

  2. 多行注释:一段,格式:/* 注释文字 */

  3. 文档注释:是专门为了用javadoc工具自动生成文档而写的注释,它是一种带有特殊功能的注释。

    ​ 格式:/** 文字 */ (这一部分还有很多需要扩展学习的地f方)

标识符

identifier在Java中,有很多需要自己起名字的地方,而这些就被称为标识符。

用来命名:类名、变量名、方法名、包名、接口名、常量名等。

  • 标识符命名规则:【必须遵循,否则会报错】

    1. 首字母只能以英文字母大小写、$、下划线(_)开始
    2. 首字母之后可以是英文字母大小写、$、下划线(_)或数字的任意组合
    3. 标识符的命名是大小写敏感的
    4. 不能使用关键字(被java语言赋予了特殊含义,用作专门用途的字符串,所有字母全部是小写的),但可以包含
    5. 可以使用中文命名,但是一般不建议使用
  • Java标识符的命名规范:【非必须遵守,但是一种良好的代码习惯】

    1. 类名、接口名:多单词组成时,每个单词的首字母大写:XxxYyyZzz
    2. 变量名、方法名:首个单词全部小写,其余单词首字母大写:xxxYyyZzz
    3. 包名:所有字母都小写:xxxyyyzzz
    4. 常量名:所有字母都大写且每个单词用下划线连接:XXX_YYY_ZZZ
  • 合法标识符举例:age、$salary、_value、__1_value

  • 非法标识符举例:123abc、-salary

变量

  • Java是一种强类型语言,即所有的变量都必须严格符合规定,所有变量都必须先定义再使用
  • 变量的定义格式:数据类型 变量名 = 值;
  • 变量只在它的作用域内有效,一般作用域是{}
  • 在一个作用域内不能声明重名的多个变量

数据类型

数据类型分为基本数据类型和引用数据类型两种

  • 整数类型:byte(1字节=8bit)、short(2字节)、int(4字节)、long(8字节)

​ byte范围:-128~127

​ 定义long类型时,变量的值后要加L或l,例如:long l = 1000000L

​ 整数类型常量默认为int型

  • 浮点类型:float(4字节,但其表示的数范围比long大)、double(8字节)

​ 定义float类型时,变量的值后要加F或f,例如:float f = 100.1f

​ 浮点类型常量默认为double型

  • 字符型:char(1字符=2字节)

​ 声明char类型时,使用一对单引号(‘ ’)进行赋值,只能对一个字符进行赋值

​ 表示方法:(1)表示一个字符(2)转义字符{\n——换行符,\t——制表符}(3)使Unicode字符集表 示字符{eg:\u0043——C}

  • 布尔类型:boolean,只有true\false两个值,常常用在条件判断和循环结构中

  • 拓展:\\n运行时会输出\n(不再表示换行的意义);"\"可以将符号变成普通的字符

类型转换

  • 首先知道一下基本数据类型容量大小的顺序:byte、short、char——>int——>long——>float——>double(顺序由低容量到高容量)(此处容量大小,指的是类型的数据的范围大小)
  • 类型转换有两种类型:自动转换、强制转换(注意:不包括布尔类型)
    1. 自动转换:低——高
    2. 强制转换:高——低,需使用强转符:(强转类型)变量名 【可能导致精度损失】
    3. 举例:
//强转类型举例
public class Demo01{
public static void main(String[] args){
double d1 = 129.4;
int i1 = (int)d1;//将double型强转为int型
System.out.println(i1);//运行结果为129
}
}
//自动提升类型举例
public class Demo02{
public static void main(String[] args){
byte b1 = 12;
char c1 = 'a';
int i1 = 129; int i2 = b1 + c1;//byte\char\short互相做运算或自身做运算时,都将自动转换成int类型
int i3 = b1 + i1;//当容量大的和容量小的做运算时,结果为容量大的类型
System.out.println(i2);//int型——12+97
System.out.println(i3);//int型——12+129
}
}

拓展1——String字符串类型

  • 属于引用数据类型
  • 声明String类型时,使用一对双引号,表示字符串
  • String类型可以与其他8中基本类型做运算,且只能是连接运算:+,运算结果仍为String类型

拓展2——不同进制间的转换(了解)

所有数字在计算机底层都以二进制存在

二进制(以0b或0B开头)、十进制、八进制(以0开头)、十六进制(以0x或0X开头,用0-9及A-F[16]表示)

public class Test1{
public static void main(String[] args){
int num1 = 0b110;//二进制???为啥这条运行不了???
int num2 = 123;//十进制
int num3 = 0127;//八进制
int num4 = 0x123A;//十六进制
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
System.out.println("num3 = " + num3);
System.out.println("num4 = " + num4);
}
}

运算符

算术运算符

算术运算符包括正负号(+、-)、加减乘除(+、-、*、/)、取模(取余)(%)、++(前++、后++)、--(前--、后--)

通过下面的程序代码解释相关的运算(正负号和加减乘比较简单就不说了):

  • //除法运算
    public class Demo01{
    public static void main(String[] args){
    int num1 = 12;
    int num2 = 7;
    int num3 = num1 / num2;
    System.out.println("num3 = " + num3);//1 double num4 = num1/num2;//自动类型提升为double
    System.out.println("num4 = " + num4);//1.0 double num5 = num1/num2+0.0;
    System.out.println("num5 = " + num5);//1.0 double num6 = num1/(num2+0.0);
    System.out.println("num6 = " + num6);//1.714...(除不尽)
    }
    }
    //掌握住基本数据类型运算的本质
  • //取余运算
    public class Domo02{
    public static void main(String[] args){
    int i1 = 12;
    int i2 = 5;
    System.out.println("i1%i2 = " + i1%i2);//2 int ii1 = -12;
    int ii2 = 5;
    System.out.println("ii1%ii2 = " + ii1%ii2);//-2 int iii1 = 12;
    int iii2 = -5;
    System.out.println("iii1%iii2 = " + iii1%iii2);//2 int iiii1 = -12;
    int iiii2 = -5;
    System.out.println("iiii1%iiii2 = " + iiii1%iiii2);//-2
    //取模结果的符号于被取模数相同
    }
    }
  • //前++(--):先自增(减)1.后做运算
    //后++(--):先做运算,后自增(减)1
    public class Demo03{
    public static void main(String[] args){
    int a = 5;
    int b = ++a;
    System.out.println("a="+a+",b="+b);//a=6,b=6 b = a++;
    System.out.println("a="+a+",b="+b);//a=7,b=6 b = --a;
    System.out.println("a="+a+",b="+b);//a=6,b=6 b = a--;
    System.out.println("a="+a+",b="+b);//a=5,b=6
    }
    }
    //自增运算不改变 变量的数据类型

赋值运算符

赋值运算符号:=

扩展赋值运算符:+=、-=、*= 、/=、%=

//+=(其余的类似)
public class Demo04{
public static void main(String[] args){
int i1 = 7;
i1 += 2;//相当于i1=i1+2
System.out.println(i1);//9 short i2 = 7;
//i2 = i2 + 2;//编译失败,因为数据类型
i2 += 2;//结论:不会改变变量的数据类型
System.out.println(i2);//9 int i3 = 1;
i3 *= 0.2;//i3=i3*0.2(注意数据类型是整型的)
System.out.println(i3);//0
i3 += 1;//i3=i3+1
System.out.println(i3);//1
}
}
/*
1. 在开发中,使得整数+2的方法:
num=num+2;
num+=2;(推荐)
2. 在开发中,使得整数+1的方法:
num=num+1;
num+=1;
num++;(推荐)
*/

比较运算符

比较运算符:==、!=、<、>、<=、>=、instanceof

比较运算符的结果都是布尔类型:true或false

//注意区分好==和=
public class Demo05{
public static void main(String[] args){
boolean b1 = true;
boolean b2 = false;
System.out.println(b2 == b1);//false
System.out.println(b2 = b1);//true
}
}

逻辑运算符

  • 逻辑运算符:&(逻辑与)、&&(短路与)、|(逻辑或)、||(短路或)、!(逻辑非)、^(逻辑异或)
  • 逻辑运算符两边操作的都是布尔类型的变量
  • 区分:&和&&(二者的运算结果相同,只是运行过程不同)【|、||的区分类似】

​ &:左右两边都运行

​ &&:如果左边的值可以判断出整体的值,那么右边的就不再运行

//举例说明两者区别
public class Demo05{
public static void main(String[] args) {
boolean b1=false;
int n1 =10;
if(b1 & (n1++ >0)){
System.out.println("我在北京");
}else{
System.out.println("我在南京");
}
System.out.println("n1=" + n1);
//我在南京
n1=11
boolean b2=false;
int n2 =10;
if(b2 && (n2++ >0)){
System.out.println("我在北京");
}else{
System.out.println("我在南京");
}
System.out.println("n2=" + n2);
//我在南京
n1=10
}
}

位运算符

(了解即可,平时用到的不太多)

  • 位运算符:<<(左移)、>>(右移)、>>>(无符号右移)、&(与)、|(或)、^(异或)、~(取反)

  • 位运算符运算的是整数的二进制,操作的是整数

  • 左移<<:将整数的二进制数整体向左移,在空缺位补0【规律:<<n(左移n位) = 相当于原数乘2^n】

    右移>>:将整数的二进制数整体向右移,如果原整数为正数,则在空缺位补0;若为负数,则补1【规律:<<n(右移n位) = 相当于原数除以2^n】

    无符号右移>>>:右移,补0

  • 与运算&:12&5——写成二进制——只有都是1才1,其余情况是0——结果:4

    ​ 00001100——12

    ​ 00000101——5

    ​ 00000100——4

    或运算|:12|5——写成二进制——只要有一个1就是1——结果:13

    ​ 00001100——12

    ​ 00000101——5

    ​ 00001101——13

    异或运算:125——写成二进制——两者不相同就是1——结果:9

    ​ 00001100——12

    ​ 00000101——5

    ​ 00001001——9

    取反运算12——写成二进制——包括最高位按位取反

    ​ 00001100——12

    ​ 11110011—— -13

三元运算符

  • 三元运算符结构:(条件表达式)?表达式1:表达式2

  • 注意几点:条件表达式的结果须是布尔类型

​ 若条件表达式的结果为true,则执行表达式1;若条件表达式的结果为false,则执行表达式2

​ 表达式1与表达式2的值要求可以统一为一个数据类型

Java基础语法01——变量与运算符的更多相关文章

  1. JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)

    Java基础语法(变量.常量.数据类型.运算符与数据类型转换) 1.变量 Java中.用户能够通过指定数据类型和标识符来声明变量.其基本的语法为: DataType identifier; 或 Dat ...

  2. 005 01 Android 零基础入门 01 Java基础语法 01 Java初识 05 Eclipse简介

    005 01 Android 零基础入门 01 Java基础语法 01 Java初识 05 Eclipse简介 Eclipse是一款集成开发工具--IDE. 集成开发环境(IDE,Integrated ...

  3. 003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程

    003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程 Java程序长啥样? 首先编写一个Java程序 记事本编写程序 打开记事本 1.wi ...

  4. Java基础语法(2)-变量

    title: Java基础语法(2)-变量 blog: CSDN data: Java学习路线及视频 1.什么是变量? 变量的概念 内存中的一个存储区域 该区域的数据可以在同一类型范围内不断变化 变量 ...

  5. 006 01 Android 零基础入门 01 Java基础语法 01 Java初识 06 使用Eclipse开发Java程序

    006 01 Android 零基础入门 01 Java基础语法 01 Java初识 06 使用Eclipse开发Java程序 Eclipse下创建程序 创建程序分为以下几个步骤: 1.首先是创建一个 ...

  6. 004 01 Android 零基础入门 01 Java基础语法 01 Java初识 04 Java程序的结构

    004 01 Android 零基础入门 01 Java基础语法 01 Java初识 04 Java程序的结构 Java程序的结构 Java程序外层--类 程序外层,如下面的代码,是一个类的定义. c ...

  7. 002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介

    002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介 学习Java的基础语法 Java是一门编程语言,学习的逻辑其实和现实世界的语言是一样的,需要了 ...

  8. 001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学

    001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学 welcome to Java World 欢迎来到Java世界 一起领略Java编程世界的奥秘与奥妙 ...

  9. Java基础二(变量、运算符)

    1.变量2.运算符 ###01变量概述 * A: 什么是变量? * a: 变量是一个内存中的小盒子(小容器),容器是什么?生活中也有很多容器,例如水杯是容器,用来装载水:你家里的大衣柜是容器,用来装载 ...

随机推荐

  1. SourceTree代码变更和FoxMail邮件管理(效率小计俩)

    代码变更溯源 工作时,我们经常会想要查看一个类文件的变更历史,最常见的场景是:"卧槽,谁改了我的代码" 新版本的Xcode溯源自我感觉相当难用,所以这里我们介绍一个工具 Sourc ...

  2. 分布式 PostgreSQL 集群(Citus),分布式表中的分布列选择最佳实践

    确定应用程序类型 在 Citus 集群上运行高效查询要求数据在机器之间正确分布.这因应用程序类型及其查询模式而异. 大致上有两种应用程序在 Citus 上运行良好.数据建模的第一步是确定哪些应用程序类 ...

  3. gdk-pixbuf tiff_image_parse函数整数溢出漏洞

    受影响系统:gdk-pixbuf gdk-pixbuf 2.36.6描述:CVE(CAN) ID: CVE-2017-2870 gdk-pixbuf是一个用于以各种格式加载图像和像素缓冲处理的库. 使 ...

  4. ORM,Django对数据库的连接和使用

    ORM,Django对数据库连接和使用数据 ORM(对象关系映射) 很多语言中的web框架都有这个概念 为什么要有ORM? 写程序离不开数据 新的语法,不需要我们自己写SQL语句 我们按照新的语法写代 ...

  5. python中判断为None

    python中经常会有判断一个变量是否为None的情况,这里列举三种方式: if not x if x is None if not x is None *********************** ...

  6. CVE-2017-12635(Couchdb垂直权限绕过漏洞)

    简介 Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库".它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapRedu ...

  7. 53端口反弹shell

    shell反弹 由于防火墙策略,导致并不能按预期的反弹shell,端口被封禁,可以使用53端口进行反弹shell 命令如下: bash -c 'sh -i &>/dev/tcp/210. ...

  8. swing 实现用户登录注册界面(不使用数据库)

    swing 实现用户登录注册界面(不使用数据库) 实现的功能 先说一下具体实现的功能吧:用户注册后会将注册的对象存入内存中,登录时会遍历注册的对象列表,判断是否登录成功: 登录和注册界面: 本次实验分 ...

  9. 架构师成长之路也该了解的新一代微服务技术-ServiceMesh(上)

    架构演进 发展历程 我们再来回顾一下架构发展历程,从前往后的顺序依次为单机小型机->垂直拆分->集群化负载均衡->服务化改造架构->服务治理->微服务时代 单机小型机:采 ...

  10. C/C++ 文件读写

    •前言 第一次接触文件读写是在大一的C语言教材中,当时哼哧吧唧的学的贼费劲,虽然最后也学会了,但好像没怎么用过. 在后来,就是在OJ上刷题的时候,编写的代码有时候连样例都不能通过: 这个时候就需要各种 ...