JAVA 基本数据与计算(含标识符、进制转换、前++后++、课后练习题)

一、关键字

一些被Java语言赋予了特殊含义的单词,不能随意使用的。

 这是一些常见的关键字,其实关键字还有很多但也不用刻意去记,在学习的过程中慢慢都会遇到的。

class  表示的是一个类
public 表示的是公开的权限
static 表示的是函数的类型
void   表示的是函数的返回值类型
特点:在VSCode中 关键字都是全小写的

String System 严格来说它们不是关键字 是Java自带类的名称 也不能随意使用
特点:首字母大写的单词

二、标识符

就是我们程序员在写代码的过程中自定义的一些名称。

 例如:变量名,类名,函数名,接口名...(其实main也是标识符,只不过是已经写好的。)

2.1标识符的组成规则

一般只要注意以下几点:由字母、数字、下划线_、美元$组成的;其中数字不能开头;严格区分大小写的;

不要使用关键字和Java中的自带类名称;为了提高标识符的阅读性,尽量起名字的有意义,一般都是用英文单词表示。

2.2标识符的组成规范

小驼峰式命名法:如果一个标识符是由多个单词组成的一个词,那么除了第一个单词首字母小写外,其他单词首字母大写 。

                           例如:myName yourBoy ;      主要应用在哪些地方:变量名 函数名

大驼峰式命名法:如果一个标识符是由多个单词组成的,那么所有单词的首字母大写。

                           例如:MyName YourBoy;     主要应用在哪些地方:类  接口

全大写命名法:如果一个标识符是由多个单词组成的,那么每一个单词都要大写,单词与单词之间用_连接。

                           例如:MAX_VALUE  DEFAULT_SIZE;    主要应用在哪些地方:定义常量

三、注释

为什么要有注释:代码写的过多的情况下,程序员容易忘记,注释的存在意义就是为了提示程序员

注意:注释本身不属于代码范畴的,注释不会进字节码文件。

分类:(单行里面可以套多行、多行里面可以套单行、多行中不能套多行)

单行注释://直到换行为止 都是注释的内容

多行注释:/* 注释内容 */

文档注释:/** 注释内容 */

 补充内容   : 我们可以通过文档注释去制作程序说明书(网页文档),利用javadoc.exe 工具,

                       先编译javadoc Demo01_01.java(但必须在类前面+public),打开.html文件(网页)可以查看。

四、常量与进制

常量:就是在程序中直接出现的一些数据,同时称之为是 字面量

其实它本身是一些数据 ,数据本身也不能够被改变。

常量的分类:整数、浮点数、字符、字符串、布尔、空

整数:二进制整数——————0b开头

           八进制整数——-———0开头

           十进制整数——————默认啥也不开头

            十六进制整数————0x开头

进制转换

二进制转十进制

十进制换二进制

二进制转八进制(三个二进制合成一个八进制)

二进制转十六进制(四个二进制合成一个十六进制)

八进制转十进制

十六进制转十进制

这两种情况转换与上面二进制转十进制类似

负数的二进制:将正数加一取反即可得到负数的二进制。

 整型溢出(减一取反)


浮点数:一般小数 3.14、科学计数小数 3.89e3

字符:由一个数字、字母、符号被单引号包含的数据

 

字符串:由一个或多个数字、字母、符号被双引号包含的数据,是我们最常用的一种常量类型

布尔:它只有两个值 true false 表示的是真和假这两个概念,true false  其实是关键字的一种 表示确切的某个值

空:null (关键字)

下面是一个有关上述常量和进制的打印程序。

class Test01{
    public static void main(String[] args){
        System.out.println(0b1001); //打印二进制 结果十进制
        System.out.println(012);    //打印八进制 结果十进制
        System.out.println(0xA9);   //打印十六进制 结果十进制
        System.out.println(3.14);
        System.out.println(3.89e-3);
        System.out.println('2'); //两个字符
        System.out.println('我'); 
        System.out.println("12asdgjhgasd");
        System.out.println(""); //空串
        System.out.println(' ');  
        System.out.println(true);
        System.out.println(false); 
        //空集 φ 真的就是啥也没有 
        System.out.println(null); 
    }
}

五、变量与数据类型

变量:本身可以改变的数据

创建变量的目的:目的1,为了限制当前变量当中所存储的数据(变量当中的数据必须是可兼容的),目的2,为了限制当前变量空间的大小。

如何定义变量:数据类型 变量名=常量;

变量的本质是什么?

1.变量主要是用于存储一些计算当中产生的一些临时性数据

2.变量本质就是在内存当中某一个进程里的一个临时存储区域

3.每一个变量空间在创建的时候都会被随机的分配地址(真实的物理内存地址)

4.变量空间中的数据在变化的过程中必须保持是可兼容的(至少是同一类型)

5.如果直接在代码中用变量的物理地址去访问空间中的数据的话 有可能访问不到的

6.为了避免地址的不确定性,引入了变量名这个概念 由变量名-地址表 来保证变量名和变量之间的关系(底层实现)

当我们提到变量时会遇到地址这个知识点。因为当我们创建一个变量时,再分配的内存中会随机为变量分配一个地址,因为是随机分配的,所以下次在运行这个程序是时,有可能这个地址就变了,所以会有一个底层实现的变量-地址表来控制,就拿游戏LOL来说,这些都是为了让变量空间有个明确的含义而且保持这个含义不变,从而又有了变量名。

其实 ,上述当中 变量空间的地址 其实就是我们在C语言当中学的指针,常量数据一定是在变量空间当中吗?不是,所有的常量都在常量池当中,变量空间当中存的就是常量在常量池中的地址!。如下示例:

 

#include<stdio.h>
void main(){
    int a=3;    //创建一个普通变量a 存3
    int b=4;    //创建一个普通变量b 存4
    int* c;     //创建一个指针变量c 指向b,c是变量名,*只代表是一个指针
    c=&b;       //将变量b的地址赋予c
    int** d;    //创建一个指向指针变量c的指针变量d,**只能指向*
    d=&c;
    printf("a的值=%d\n",a);//3
    printf("b的值=%d\n",b);//4
    printf("a的地址=%d\n",&a);//a的地址
    printf("b的地址=%d\n",&b);//b的地址
    printf("c的地址=%d\n",&c);//c的地址
    printf("d的地址=%d\n",&d);//d的地址
    printf("c的值=%d\n",c); //打印的是c所指向的那个变量的地址,b的地址
    printf("*c的结果=%d\n",*c);// b
    printf("d的值=%d\n",d);//打印的是d所指向的那个变量的地址,c的地址
    printf("*d的结果=%d\n",*d); // c
    printf("**d的结果=%d\n",**d); // b
    // printf("%d\n",*a); warn......a只是一个普通变量
}

 在java中两个变量永远比的是地址(实质)

class Test02{
    public static void main(String[] args){
        int c=4;
        double d=4.12;
        /*
        c -> 0x444
        d -> 0x888

        c==d
        c -> 0x444 -> 4 -> 4.0 -> 0x999 0x888 !=
        c==(int)d
        d -> 0x888 -> 4.12 -> 4 -> 0x444 0x444 ==
        常量池 
                4       0x444 
                4.12    0x888
                4.0     0x999
        */
        System.out.println(c==d);   //false
        System.out.println(c==(int)d);//true
    }
}

数据类型的分类:基本数据类型、引用数据类型

1.基本数据类型:整数、浮点数、字符、字符串、布尔

整数(之所以分为四类,原因是主要看我们数字的取值范围)

byte,1字节,-2^7~2^7-1   -128~127

short,2字节,-2^15~2^15 - 1   -32768~32767

int,4字节,-2^31~2^31 - 1(整数常量默认是int类型)

long,8字节,-2^63 ~ 2^63 - 1(整数常量后面+ l或者L)

byte b1=100;

整数默认为int型(4个字节)

        00000000 00000000 00000000 01100100//100

                                                           01100100

因为整数常量100的有效数据可以直接放入byte里面,所以计算机将常量100之前的所有空的字节 阉割了,

向下自动类型转换int->byte 从大字节到小字节,

byte b2=300;//报错:不兼容的类型: 从int转换到byte可能会有损失

byte b2=(byte)300;

如果你想强行的将300放到byte中-强制类型转换,强转一定是从大到小的

byte b3=100;  byte b4=100;   

byte b5=(byte)(b3+b4);//对于b5而言 它的后面跟着的是两个变量,b5不能确定 b3 b4变量的值,所以只有强转不然会报错(同上报错)

00000000 00000000 00000000 11001000//首位是1,所以为负数

                                                   11001000

11001000 -1 

11000111 取反 

00111000 56       再加上负号得到 -56

 

 

 

浮点数(浮点型常量默认是double类型)

float 4字节(float类型的常量后面+F)

double 8字节

byte->short->int->long->float->double

        在整数/浮点数变量之间进行运算的时候

        谁是最大的 那么结果就是谁

        小字节+大字节=大字节

字符

char 2字节、0~65535(指的就是字符的编号)

在计算机当中是如何存储字符的呢?如图所示:

布尔(boolean true/false)

在Java当中并没有给boolean一个明确的大小,主要和底层虚拟机相关

如果boolean是一个变量的话 1字节;如果boolean是一个数组的话 每个空间是4个字节。

2.引用数据类型:字符串、null、数组、对象

字符串

String 也不存在具体的大小,它的大小是根据字符串的内容而决定的

目前而言,可以像用基本类型一样去使用String类型数据、String其实是java中自带的一个类。

六、运算符

1.算术运算符:

+ 加法运算(如果+号的两边都是数字的话,那么这个+表示的数学上的加法;如果+号的两边,只有有一个字符串,那么这个+表示的是字符串连接符)

- 减法运算

* 乘法运算

/ 除法运算(如果两边都是整数 结果就是整数(整除);如果两边至少存在一个小数,结果就是小数)

% 取余运算(相当于是整除运算,但是得到的结果是余数)

++ 自加运算(重点)

(前++  ++i)、i本身直接+1再参与运算

(后++  i++)、i先参与运算再本身+1

i++
        1.先开辟一个临时存储区
        2.将i的值复制到存储区
        3.i自身+1
        4.临时存储区的值等待被调用(参与运算,输出,赋值)

下面来看一个程序就能更清楚的了解自加运算

 

class Test05{
    public static void main(String[] args){
        int i=3;
        i++;
        System.out.println(i);  //4
        System.out.println(i++);//4
        int j=i++;
        System.out.println(j);  //5
        System.out.println(i);  //6
        i=i++;
        System.out.println(i);  //6
        i=i++;
        System.out.println(i);  //6
    }
}

-- 自减运算(原理与自加运算一样)

2.赋值运算符

+=、-=、*=、/=、%=、=

3.比较运算符(运算的结果肯定是一个boolean类型)

>、<、>=、<=、==(不管是在基本数据类型还是在后期面向对象 ==永远比的是两个变量(常量)当中所存储的那个数据的地址!
常量在常量池中的地址;对象在堆内存中的地址)、!=

4.逻辑运算符(运算的结果肯定是一个boolean类型)

与   同真则真,遇假则假     单与 &、双与 &&(&&的话,左边一旦为假,右边无论真假,结果都是假,所以右边可以不运行)

或   有真则真,同假则假     单或 |、双或 ||(||的话,左边一旦为真,右边无论真假,结果都是真,所以右边可以不运行)

非   非真就是假,非假就是真 !(英文)

异或   相同为假,不同为真  ^

5.位运算符(指的就是二进制之间的运算)

&、|、^、>>、<<

6.三目运算符(变量=布尔表达式 ? 值1 : 值2;)

布尔表达式的意思是,计算的结果必须是boolean类型;如果布尔表达式的结果是true,则将值1赋予变量;如果布尔表达式的结果是false,则将值2赋予变量;它在一定程度上简化了if语句的功能。

七、代码例习题

/*
数据:摄氏温度 华氏温度
指令:输入 按照公式计算 输出
步骤:
1.提示用户输入摄氏温度
2.利用已知公式将摄氏温度转换为华氏温度
3.将摄氏温度和华氏温度输出
Scanner 扫描仪扫描器
        是一个Java自带的一个类 主要负责的就是数据输入的问题
        对于内存而言 数据的输入来源有很多
        1.可以是从硬盘上读取数据
        2.可以是从互联网上读取数据
        3.可以是从输入设备(键盘)读取数据
        nextByte()
        nextShort()
        nextInt()       常用
        nextFloat()
        nextDouble()    常用

String/System -> 开学学校给你们发的书
Scanner -> 图书馆里面的书
*/
//错误: 找不到符号
import java.util.Scanner;
class Demo02_01{
    public static void main(String[] args){
        //类名 变量名=new 类名();
        //1.
        System.out.print("请输入摄氏温度:");
        Scanner scanner=new Scanner(System.in);
        double cel=scanner.nextDouble();
        //2.
        double fah=cel * 9 / 5 + 32;
        //3.
        System.out.println("摄氏温度" + cel + ",是华氏温度" + fah);    
    }
}

/*
数据:半径 高 圆周率 面积 体积
指令:输入 计算 输出
步骤:
1.提示用户输入半径和高
2.按照公式计算底面积
3.按照公式计算体积
4.输出
*/
import java.util.Scanner;
class Demo02_02{
    public static void main(String[] args){
        //1.
        System.out.print("请输入半径和高:");
        Scanner scanner = new Scanner(System.in);
        double radius = scanner.nextDouble();
        double length = scanner.nextDouble();
        //2.
        double area = radius * radius * 3.1415926;
        //3.
        double volume = area * length;
        //4.
        System.out.println("圆柱体的体积为"+volume);
    }
}

 

/*
数据:输入的一个数字 个位 十位 百位
指令:取余 自除过滤数字 
步骤:
1.提示用户输入一个数字(3位数之内)
2.分解数字 统一按照3位数的长度分解
    123%10 ~    3   a
    123/10 ~ 12
    12%10  ~    2   b
    12/10  ~ 1
    1%10   ~    1   c 
3.将分解数来的数字相加即可
*/
import java.util.Scanner;
class Demo02_03{
    public static void main(String[] args){
        //1.
        System.out.print("请输入一个数字:");
        Scanner scanner = new Scanner(System.in);
        int number = scanner.nextInt();
        //2.
        int a=number%10;    //得到的是个位
        number/=10;
        int b=number%10;    //得到的是十位
        number/=10;
        int c=number%10;    //得到的是百位
        //3.
        int sum=a+b+c;
        System.out.println(sum);
    }
}

 

import java.util.Scanner;
class Demo02_04{
    public static void main(String[] args){
        System.out.print("请输入时区:");
        Scanner scanner=new Scanner(System.in);
        int offset=scanner.nextInt();
        //总毫秒数
        long totalMillis=System.currentTimeMillis();
        //总秒数
        long totalSeconds=totalMillis/1000;
        //总分钟数
        long totalMinutes=totalSeconds/60;
        //总小时数
        long totalHours=totalMinutes/60;
        
        //当前小时数 
        long currentHour=(totalHours+offset)%24;
        //当前分钟数
        long currentMinute=totalMinutes%60;
        //当前秒数
        long currentSecond=totalSeconds%60;

        System.out.println(currentHour+":"+currentMinute+":"+currentSecond);
    }
}

import java.util.Scanner;
class Demo02_06{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        //1.提示用户输入第一个坐标 两个值
        System.out.print("请输入第一个坐标:");
        double x1=scanner.nextDouble();
        double y1=scanner.nextDouble();
        
        //2.提示用户输入第二个坐标 两个值
        System.out.print("请输入第二个坐标:");
        double x2=scanner.nextDouble();
        double y2=scanner.nextDouble();
        
        //3.计算两点之间的距离
        //Math.pow(a,b) a^b
        double distance=Math.pow(Math.pow(x2-x1,2)+Math.pow(y2-y1,2),0.5);
        System.out.println(distance);
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值