java 1(概要、变量与运算符)

news2024/9/20 10:50:30

java ——概要、变量与运算符

✍作者:电子科大不知名程序员

🌲专栏:java学习指导

各位读者如果觉得博主写的不错,请诸位多多支持;如果有错误的地方,欢迎在评论区指出

目录

  • java ——概要、变量与运算符
    • 命令行
    • java的环境搭建
    • HelloWorld
    • 注释(Comment)
    • java API的文档
    • 总结
    • 关键字与保留字
    • 标识符
    • java的命名规范
    • 变量
    • 数据类型
      • 整型
      • 浮点型
      • 字符类型
      • 布尔型
    • 基本数据类型间的运算
    • 编码情况
    • String
    • 进制与进制间的转换
    • 运算符
      • 算术运算符
      • 赋值运算符
      • 比较运算符
      • 逻辑运算符
      • 位运算符
      • 三元运算符

命令行

d: 到D盘

dir 呈现目录

md java 创建文件夹,名字为java

cd d:\java 进入d盘中的java文件夹

cd… 退回到上一层目录(文件夹)

cd/ 回到整个盘(D)下

用上下键可以调出之前使用到过的指令

del 1.doc 删除文件名为1.doc的文件

del *.txt 删除所有以.txt结尾的文件

rd team2 删除名为team2的文件夹(目录)(前提:team2是空文件)

del team1 删除team1内容中的文件(删除的还是文件)

cd/ 推到盘的根目录位置

java的环境搭建

JDK java开发工具包(包含JRE:运行环境(虚拟机(JVM)+核心类库))

JVM:java虚拟机(使java程序具有跨平台性)

image-20220911180058483

JDK在不同的操作系统不一样(因为不同操作系统对应的JVM不一样)

HelloWorld

创建一个java格式的文件

image-20220911180710276

image-20220911182717956

实现流程:

image-20220911180917238

先创建一个以java为后缀的文件,通过记事本打开后,形成源文件;然后再通过命令javac.exe来对该文件进行编译;形成.class文件(字节码文件);再对此进行java.exe形成结果

在编译文件前,我们首先要到该文件所在的路径下;生成字节码文件的名字是我们创建的类名

image-20220911182740208

按提示将其添加:

image-20220911182911188

然后将main内添加一些内容:

image-20220911183616821

源文件修改后需要重新编译

image-20220911183532304

注意:java中需要严格区分大小写

注释(Comment)

image-20220911184707272

特点:注释内容不参与编译(生成的.class文件中不包含注释的信息)

文档注释:java特有

image-20220911185415388

注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页形式体现的该程序的说明文档(包含作者和版本)

多行注释不能嵌套使用!

java API的文档

总结

1.JDK,JRE,JVM三者之间的关系

image-20220911191757670

JDK=JRE+java开发工具(javac.exe,java.exe,javadoc.exe)

JRD=JVM+Java核心类库

2.为什么要配置path环境变量?

使某个程序,比如javac.exe,在任意目录下都可以运行

package my_first_java_code;

public class 输出 {
	public static void main(String[] args) {
		System.out.println("name:");
		System.out.println(); 
		System.out.println("address:");
	}
}

System.out.println();//这里是println,意思是输出的占一行,因此这里什么都不写的意思就是换一行

println理解为输出一段字符串后换行,我们也可以使用print然后加\n达到换行的目的

运行结果如下:

image-20220911194837835

关键字与保留字

关键字

保留字:现java版本尚未使用,但以后版本可能会作为关键字使用(goto、const)

标识符

java对各种变量、方法、类等要素取名时使用的字符序列称为标识符

技巧:凡是可以自己取名字的地方都叫标识符

标识符的命名规则:

1.26个英文大小写、下划线、0-9或$;

2.数字不能作为开头;

3.不能使用关键字和保留字,但可以包含它们

4.严格区分大小写,长度无线制

5.标识符不能含有空格

java的命名规范

包名:多单词组成所有字母都小写

类目、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz

变量名,方法名:多单词组成,第一个单词首字母小写,第二个单词开始每个单词首字母大写

常量名:所有字母都大写。多单词用下划线连接

以上要求,如果不遵守也不会对编译产生什么影响,但建议还是要遵守

起名字的时候,尽量做到见名知意,不要出现中文;

变量

类型:字符串、整型、浮点型、布尔类型…(java要求的是强类型,使用变量时需要规定变量类型)

包含:变量类型、变量名、储存的值

变量需要先声明赋值再使用(未定义、未被赋值都不行)

定义格式:数据类型 变量名=变量值;

package my_first_java_code;

public class 定义变量 {
	public static void main(String args) {
		int myAge=18;
		System.out.println(myAge);//注意,这里不加双引号,因为不是字符串了
	}
}

变量都定义在作用域内(作用域即是{}内),出作用域后不能使用;同一个作用域内不能定义同名的变量

数据类型

image-20220911213022731

整型

image-20220911213828839

分析,一个byte有8个比特位,由0、1组成一共有2^8=256种组合,由于要区分正负,我们将它对半分开,即可得到它的表数范围

特别的,声明long型变量,必须以“l”或"L"结尾

long L1=1234567;

通常定义整型变量时使用int型

浮点型

float(4字节)\double(8字节)

浮点型,表示带小数点的数值;

image-20220912004340824

1.如图即可产生一个问题:同样都是占4个字节的空间,为什么float表数范围比int、long还要大?

​ 因为float表示数值的方式是以幂次+小数的方式

2.定义float变量时,变量值的末尾从应该用“f”或“F”来表示

double d1=123.1;
System.out.println(d1);
float d2=123.1F;
System.out.println(d2);

3.通常定义浮点型变量时用double:范围更大、精度更高、书写时可以省区f/F

字符类型

char:一字符=2字节

1.定义char型变量通常使用一段单引号’ ’

char c1='a';
char c2='AB';    //wrong:只能声明一个字符
char c3='中';    //right:可以写一个汉字(或其它语言)    

2.表示方式:声明一个字符;转义字符

char c4='\n';     //right:换行符

于是下列两端代码表示相同的意思:

System.out.println("hello");
System.out.print("hello+c4");

3.直接使用Unicode值来表示字符型常量

char c5='\u0043';

布尔型

boolean

1.只能取两个值之一:true/false

boolean bb1=true;
boolean bb2=false;

注意: 与C语言不同,C语言用0/1来判断,而java就是用的true和flase来表示

2.常常在条件判断、循环结构中使用

基本数据类型间的运算

基本数据类型之间的运算规则:

前提:这里讨论的是7种数据类型变量间的运算,不会包含boolean类型的

1.自动类型提升:

byte b1=2;
int i1=129;
byte b2=b1+i1;     //wrong
int i2=b1+i1;      //right
long l1=b1+i1;     //right
float f1=b1+i1;    //right

​ byte、char、short------> int------> long ------>float ------>double

​ 结论:当表示数的容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型

​ 特别的:当byte、char、short三种类型的变量做运算时,结果为int类型**(就算是short和short这种同类型的,它们的结果仍是int来接收)**

2.强制类型转换:自动类型提升的逆运算

double d1=12.3;
int i1=d1;           //wrong
double d1=12.3;
int i1=(int)d1;      //若输出i1,值为12,该操作为截断操作

需要使用强转符:();强制类型转换后可能导致精度损失

编码情况

1.定义long型未加L------> 系统会默认为int型,若遇到过大的整数则会编译失败

​ 若float型未加F:编译失败

2.对于整型常量,默认类型为int型;浮点常量默认类型为double型

short s1=1;
short s2=s1+1;    //wrong:1的类型为int型

String

String类型变量的使用:

1.String属于引用数据类型,翻译为:字符串

2.声明String类型变量时,**使用一对" "*8

String s1="hello world";
System.out.println(s1);

3.String类型" "内可以什么都没有,而char’ '内必须且只能放一个字符

String s="";   //right
char c='';     //wrong

4.String可以和8种基本数据类型变量做运算,且运算只能是连接运算;运算结果仍为String类型

int number=1001;
String numberStr="学号:";
String info=numberStr+number;    //+:连接运算

我们来分析如下程序

情况1:

public class StringTest {
	public static void main(String[] args) {
		String str ="hello";
		char c='a';  //a:97
		int num=10;
		System.out.println(c+num+str);      //107hello
		System.out.println(c+str+num);      //ahello10
		System.out.println(c+(num+str));    //ahello10
		System.out.println((c+num)+str);    //107hello
		
	}
}

由于a的ASCII码值为97,因此再做c+num(a+10)时是一个字符类型+整型的运算,使用ASCII码来计算

情况2:

package my_first_java_code;

public class StringTest2 {
	public static void main(String[] args) {
		//输出*	*
		System.out.println('*'+'\t'+'*'); //ASCLL码作加法运算,结果为int型
		System.out.println('*'+"\t"+'*'); //有Strin后+代表连接
		System.out.println('*'+'\t'+"*"); //前面的是char类型加法,后面为String再连接
		System.out.println('*'+('\t'+"*"));
	}
}

运行结果如下:

image-20220912151830188

进制与进制间的转换

2进制:以0b或0B开头

8进制:以数字0开头表示

16进制:0-9及A-F,以0x或0X开头

public class Conversion_between_bases {
	public static void main(String[] args) {
		int num1=0b110;
		int num2=110;
		int num3=0127;
		int num4=0x110A;
		
		System.out.println("num1= "+num1);
		System.out.println("num2= "+num2);
		System.out.println("num3= "+num3);
		System.out.println("num4= "+num4);
	}
}

运行结果如下:

image-20220912153546112

系统会将他们的值转为10进制

运算符

算术运算符

image-20220912154554736

+:正号、加、字符串连接

1.除号

int num1=12;
int num2=5;
int result1=num1/num2;
System.out.println(result1);    //2

int result2=num1/num2*num2;
System.out.println(result2);    //10

double result3=num1/num2;
System.out.println(result3);    //2.0

double result4=num1/(num2+0.0);   
System.out.println(result4);    //2.4

double result5=(double)num1/num2; 
System.out.println(result5);    //2.4

2.取模号

​ %:取余运算------>结果的符号与被模数的符号相同 被模数%模数=余数

3.自增/自减

++a:先让a自增1后再使用;a++先使用再让a自增1(对于--来说同理)

注意:自增从自减不会改变本身变量的数据类型

short s1=10;
s1=s1+1;            //wrong:这里的1是int型
s1=(short)(s1+1);   //right
s1++;               //right:自增1不会改变本身变量的数据类型

问题:

byte b1=127;
b1++;
System.out.println("b1="+b1);    //-128(按二进制的本质来理解即可)

赋值运算符

= += -= *= /= %=

1.赋值

//连续赋值
int i1,i2;  
i1=i2=10;                   //right

int i1=10;i2=10;            //right

2.对于 += -= *= /= %=它们来说,和自增自减一样不会改变本身变量的数据类型

3.开发中如果希望变量实现+2的操作的方法:

num=num+2;      
num+=2;      //更好

比较运算符

image-20220912163759387

比较运算符"==“不能误写成”="

public class CompareTest {
  public static void main(String[] args) {
  	int i=10;
  	int j=20;
  	
  	System.out.println(i==j);  //判断是否相等
  	System.out.println(i=j);   //将j的值赋值给i后输出
  	
  	boolean b1=true; 
  	boolean b2=false;
  	System.out.println(b2==b1); //判断是否相等
  	System.out.println(b2=b1);  //赋值后输出
  }
}

逻辑运算符

&      逻辑与
|      逻辑或
!      逻辑非
&&     短路语
||     短路或
^      逻辑异或(两者不同值为true,两者相同值为false

image-20220912181444561

我们发现,&和&&;|和||好像一样,那它们有什么区别呢

说明:逻辑运算符操作的都是boolean类型的变量

1.&和&&的区别(且)

​ &和&&的运算结果相同 ;当符号左边是false时,两者都会执行符号右边的结果

​ 不同:当符号左边是false时,&会继续执行符号右边的运算,&&不再执行符号右边的运算**(短路)**

2.|和||的区别(或)

​ |和||的运算结果相同 ;当符号左边是false时,两者都会执行符号右边的结果

​ 不同:当符号左边是false时,|会继续执行符号右边的运算,||不再执行符号右边的运算**(短路)**

【总结】:开发者用短路语&&、||更好

位运算符

image-20220912183715555

其中&、|、^在逻辑运算符中也存在

移位操作符:移动的是二进制

我们先引入进制的概念:

例如数值15 15-十进制表示=1*101+5*100 而15换算成八进制即为17

那么我们知道,15的二进制表示为1111,1111称为15的二进制序列

整型的二进制表示:原码、反码、补码

15 整数,在C语言可以存放到int类型的变量中,int类型是4个字节-32bit,其中最高位(32位)叫做符号位

15 00000000 00000000 00000000 00001111 -原码

15 00000000 00000000 00000000 00001111 -反码

15 00000000 00000000 00000000 00001111 -补码

正整数的原码、反码、补码相同


-15 由于它是负数,它的最高位是1表示负数

-15 10000000 00000000 00000000 00001111 -原码 :负数的原码最高位为1,其它位不变

-15 11111111 11111111 11111111 11110000 -反码:原码的符号位不变,其他位按位取反

-15 11111111 11111111 11111111 11110001 -补码:反码的二进制位加一即得补码

整数在内存中的存储是二进制的补码,移位操作符移动的是存储在内存中的补码

左移

#include<stdio.h>
int main(){
    int a = 4;
    //00000000 00000000 00000000 00000100  - 4的原码、补码
    int b = a << 1;     //把a向左移动一位
    printf("a=%d b=%d\n", a, b);

    return 0;
}

运行结果如下:

image-20220906192729968

00000000 00000000 00000000 00000100 - 4的补码向左移动移位后移动后结果是00000000 000000000 00000000 00001000(补码向左移动一位),那么对应的值b为8

左移有扩大一倍的效果

右移

1.逻辑右移:右边丢弃,左边补0

2.算术右移:右边丢弃,左边补原符号位(一般编译器采用算术右移)

右移方式取决于编译器

对于移位操作符,不要移动负数位,这个标准是未定义的

右移有缩小一倍的效果

三元运算符

格式:(条件表达式)?表达式1:表达式2

逻辑:条件表达式==true ------>表达式1(且表达式1作为整个表达式的值)

​ 条件表达式==false------>表达式2(且表达式2作为整个表达式的值)

//找a,b中的较大值
int max=(m>n)?m:n    //a如果大于b则输出a否则输出b

要求:表达式1和表达式2要统一类型

三元运算符是可以嵌套使用的

//获取三个数的最大值(n1,n2,n3)
int max1=(n1>n2)?n1:n2;
int max2=(max1>n3)?max1:n3;
//这里可以嵌套,但可读性太差了

三元运算符与if-else:

凡是可以使用三元运算符的地方,都可以改写成if-else,但逆过来就不一定了

  • 4的补码向左移动移位后移动后结果是00000000 000000000 00000000 00001000(补码向左移动一位),那么对应的值b为8

左移有扩大一倍的效果

右移

1.逻辑右移:右边丢弃,左边补0

2.算术右移:右边丢弃,左边补原符号位(一般编译器采用算术右移)

右移方式取决于编译器

对于移位操作符,不要移动负数位,这个标准是未定义的

右移有缩小一倍的效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/378180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux | 压缩和解压文件详细

linux系统中针对不同的文件&#xff0c;有不同的压缩命令。本文对常见压缩和解压命令进行总结zip文件1.1.unzip解压单个文件unzip 命令可以查看和解压缩 zip 文件。该命令的基本格式如下&#xff1a;unzip filename.zip (文件后可添加压缩相关参数)-d 目录名 将压缩文件解压到指…

牛客网--加法模拟器---题号:NC22007

链接&#xff1a;https://ac.nowcoder.com/acm/problem/22007 来源&#xff1a;牛客网 题目描述 牛牛渐入佳境&#xff0c;他准备做一个加法模拟器来玩玩&#xff0c;输入两个数&#xff0c;分别打印这两个数的横式和竖式运算式子。 输入描述: 输入两个整数a, b 以空格隔开…

大家一起做测试的,凭什么你现在拿20k,我却还只有10k?...

最近我发现一个神奇的事情&#xff0c;我一个97年的朋友居然已经当上了测试项目组长&#xff0c;据我所知他去年还是在深圳的一家创业公司做苦逼的测试狗&#xff0c;短短8个月&#xff0c;到底发生了什么&#xff1f; 于是我立刻私聊他八卦一番。 原来他所在的公司最近正在裁…

softmax与simod如何选择?

前言&#xff1a;博主最近在复现代码的时候遇到一个问题&#xff0c;有的代码使用softmax有的使用sigmod&#xff0c;两者使用到底有什么区别呢&#xff1f; 一、softmax函数 1.1公式 &#xff08;一般只用于最后一层进行分类&#xff09;深度学习中使用Softmax进行分类。 1…

数据结构与算法——5.空间复杂度分析

这篇文章让我们来讨论一下空间复杂度 目录 1.概述 2.java中常见内存占用 2.1基本数据类型内存占用情况 2.2计算机访问内存的方式 2.3引用大小 2.4对象大小 2.5一般内存占用 2.6数组占用地址大小 3.算法的空间复杂度 4.小结 1.概述 计算机的软硬件都经历了一个比较漫…

大数据面试题集锦-Hadoop面试题(四)-YARN

你准备好面试了吗?这里有一些面试中可能会问到的问题以及相对应的答案。如果你需要更多的面试经验和面试题&#xff0c;关注一下"张飞的猪大数据分享"吧&#xff0c;公众号会不定时的分享相关的知识和资料。 文章目录1、为什么会产生 yarn,它解决了什么问题&#xf…

Linux系统常用的2种切换用户命令

文章目录一、su命令二、sudo命令总结一、su命令 1、语法&#xff1a;&#xff08;英文全拼&#xff1a;switch user&#xff09; su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]2、参数说明&#xff1a; -f或--fast&#xff1a;不必读启动档&…

值得收藏!适合小微企业的万元数字化攻略!

编者按&#xff1a;小微企业数字化之路困难重重&#xff1f;看看这款全新的全面数字化方案&#xff0c;低成本、部署效率、免安装、免维护、数据安全&#xff0c;小微企业的数字化福音&#xff01;关键词&#xff1a;低成本&#xff0c;开箱即用&#xff0c;免安装免维护&#…

数据结构——树(一):二叉树

前言 在这篇文章中&#xff0c;荔枝会整理一下自己学习二叉树的学习笔记。主要内容包括树与二叉树的基本定义以及基础概念、二叉树的存储结构、二叉树的四种遍历方法以及二叉查找树的基本内容。 文章目录 前言 一、树形存储结构 二、二叉树 2.1 二叉树的基本定义 2.2 二叉…

【项目笔记】尚硅谷《云原生实战》

尚硅谷《云原生实战》1、云服务器nginx测试2、子网3、Docker4、Redis尚硅谷云原生项目 官方笔记 1、云服务器nginx测试 在云服务器供应商购买云服务器&#xff0c;配置弹性公网ip&#xff1a;121.37.230.200。外部访问使用公网ip&#xff0c;弹性公网每次会变&#xff1b;服务…

Docker中安装并配置单机版redis

1、使用docker安装redis 搜索Reis镜像&#xff0c;这里展示的是官方最新的镜像docker search redis 使用官方dockerhub搜索redis 2、选用常用的redis5.0作为安装的版本docker pull redis:5.0 3、运行redis容器的两种方式 3.1 不映射外部配置文件直接运行redis5.0镜像docker …

【C#基础】C# 正则表达式

序号系列文章7【C#基础】C# 常用数据结构8【C#基础】C# 面向对象编程9【C# 基础】C# 异常处理操作文章目录前言1&#xff0c;Regex 的概念2&#xff0c;Regex 的创建3&#xff0c;Regex 常用操作4&#xff0c;Regex 类的使用5&#xff0c;学习资源推荐结语前言 &#x1f33c; h…

软件测试之【性能测试】

性能测试的定义 性能测试的定义&#xff1a;通过自动化测试工具或者代码手段&#xff0c;来模拟正常、峰值负载访问被测系统&#xff0c;来观测系统各项性能指标是否合格的过程。 性能测试的分类 基于代码的性能测试&#xff08;关注点是函数或方法执行的效率&#xff09; 基于…

acwing1562 微博转发(宽搜)

微博被称为中文版的 Twitter。 微博上的用户既可能有很多关注者&#xff0c;也可能关注很多其他用户。 因此&#xff0c;形成了一种基于这些关注关系的社交网络。 当用户在微博上发布帖子时&#xff0c;他/她的所有关注者都可以查看并转发他/她的帖子&#xff0c;然后这些人…

铰链、弹簧,特殊的物理关节

title: 铰链、弹簧&#xff0c;特殊的物理关节 date: 2023-02-28T13:32:57Z lastmod: 2023-02-28T14:24:06Z 铰链关节&#xff08;Hinge Join&#xff09;组件 组件-Physics-Hinge Join Anchor 当物体挂载铰链组件以后&#xff0c;组件下Anchor等同于边长为1的立方体。当这…

机器学习笔记之流形模型——标准流模型基本介绍

机器学习笔记之流形模型——标准流模型基本介绍引言回顾&#xff1a;隐变量模型的缺陷标准流(Normalizing Flow\text{Normalizing Flow}Normalizing Flow)思想分布变换的推导过程引言 本节将介绍概率生成模型——标准流模型(Normalizing Flow\text{Normalizing Flow}Normalizi…

第九节 常用API(String/ArrayList)

常用API(String/ArrayList) java写好的程序&#xff0c;我们可以直接调用。 String类定义的变量可以用于存储字符串&#xff0c;同时String类提供了很多操作字符串的功能&#xff0c;我们可以直接使用。 ArrayList简单介绍 1.ArrayList代表的是集合类&#xff0c;集合是一种容…

《C++ Primer Plus》(第6版)第6章编程练习

《C Primer Plus》&#xff08;第6版&#xff09;第6章编程练习《C Primer Plus》&#xff08;第6版&#xff09;第6章编程练习1. 大小写转换2. 平均值3. 菜单4. 成员5. 收入所得税6. 捐款7. 统计单词8. 统计文件字符数9. 重写编程练习6《C Primer Plus》&#xff08;第6版&…

taobao.top.secret.appkey.bill.detail( 服务商解密账单查询 )

&#xffe5;免费不需用户授权 服务商解密账单查询,分页返回所有店铺的账单&#xff0c;每个店铺每天仅包含两条数据&#xff0c;当天产生的号租费 和 当天产生的通话费&#xff0c;仅对90天内的账单提供SLA保障。查询账单详情请使用taobao.top.secret.bill.detail接口。 公共参…

计算机的发展

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。个人爱好: 编程&#xff0c;打篮球&#xff0c;计算机知识个人名言&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石…