今日内容要求:

1. 了解关键字的概念及特点,了解保留字

2. 熟练掌握标识符的含义,特点,可使用字符及注意事项

3. 了解常量的概念,进制,进制之间相互转换,了解有符号标识法的运算方式

4. 掌握变量的概念及定义过程

5. 掌握java 中的数据类型及注意事项

6. 掌握强制类型转换的格式

1. 关键字

概念:被java语言赋予特定含义的单词

特点:所有的字母都是小写的,在一些高级开发工具中,会有特殊颜色的显示

保留字:目前版本中还不是关键字,但是有可能在后续的版本中升级为关键字,如 goto; const

注意事项:在一些其他资料中,可能会把关键字称为保留字

2. 标识符

2.1 概述

概念:给类,接口,方法,变量起名字的字符序列

组成元素:

    英文字母的大小写;数字;‘$’’_’

注意事项(强制要求,否则编译不通过):

不能以数字开头;不能是java中的关键字(包括保留字);严格区分大小写(hello != Hello)

例:下面的标识符哪些合法,哪些不合法

HelloWorld(合法),DataClass(合法),,_983(合法),$b_c7(合法),class(不合法,与关键字重名),DataClass#(不合法,标识符组成元素无#),98.4(不合法,不能以数字开头),Hello World(不合法,空格不是标识符的组成元素)

2.2 约定俗称的命名规则

(1)类和接口:大驼峰命名法

  大驼峰命名法:首字母大写(多个单词的话,每个单词的首字母都大写)

  eg:HelloWorld, StudentManagementSystem

(2)方法和变量:小驼峰命名法

  小驼峰命名法: 首字母小写(多个单词的话,第一个单词首字母小写,其他单词的首字母都大写)

(3)包:包的本质是文件夹

  域名反转,用 隔开,域名www.alibaba.com

对应的包名:com.alibaba.项目名.模块名

如:

com.alibaba.taobao.user
com.alibaba.taobao.product
com.alibaba.taobao.order
com.alibaba.taobao.dealer
com.alibaba.taobao.pay

(4)常量:java程序运行的过程中,其值保持不变的量

public static final double PI = 3.14;
SECRET_KEY=”dfasjdfdaslfjsdla324$%^&*”;

3. 常量

3.1 常量的概念及分类

(1)概念:在程序运行的过程中其值保持不变的量

(2)分类:

  字面值常量:

    字符串常量:用双引号括起来的内容

    小数常量:所有的整数

    字符常量:所有的小数

    布尔常量:true   false

    空常量:用单引号括起来的内容,只能有一个字符(字母,数字,符号,中文),如:‘,’ ,    '3',    '在'

    自定义常量:用fina修饰的变量    final  int  a= 100

class ConstDemo{
public static void main(String[] args){
System.out.println("字符串");
System.out.println("100");
System.out.println("200.1");
System.out.println('好');
System.out.println(true);
System.out.println(false);
}
}

  

4 进制的相关内容

逢几进一: 计算机中用的都是二进制

常用的进制有四种::

二进制:0,1,10,11,100,101,110,111,.... 0,1 0b
八进制:0,1,..7,10,...17,20,....77, 100..... 0-7 0
十进制:0,1…9,10,…19,20…99,100…. 0-9 默认
十六进制:0,1,…9,a,b,c,d,e,f,10…. 0-9a-f 0x

进制之间的相互转换:

(1)其他进制转成10进制

1234  =  1000+ 200 + 30 + 4 = 1*10^3 + 2*10^2 + 3*10^1 + 4*10^0

规律:任何进制转换成10进制都是每一位上的数乘以对应进制位数减一次方,做累加

二进制数 0b10100 = 1*2^4 + 0*2^3 + 1*2^2+ 0*2^1 + 0*2^0 = 16 + 4 = 20

八进制数 0137 = 1*8^2 + 3*8^1 + 7*8^0 = 64 + 24 + 7 = 95

十六进制数 0x13d = 1*16^2 + 3^16*1 + 13*16^0 = 256 + 48 + 13 = 256+61 = 317

(2)10进制转成其他进制

规律:转成几进制就处以几,直到商为0,再把余数反转

如:

把76转换成2进制

练习:
把75 转成2 进制0b1001011
把135 转成8 进制0207
把143 转成16 进制0x8f

(3)快速转换法:

a .2进制和10进制之间的相互转换

8421码:,

它表达的意思是每一个二进制位上的数据对应一个固定的值,只需把对应1位置上的数据值给相加,即可得到该二进制对应的十进制的值,如下:

例:

0b10011001 = 128+16 + 9 = 153
0b11101100 = 128+64+32 + 12 = 192 + 44 = 236

20 = 16 + 4 =0b10100

b.  2进制和8进制之间的快速转换

二转八: 三位二进制转成1 位的8 进制
八转2: 把一位8 进制拆成3 位2 进制

0b10101010101110

相应的8进制为:010    101    010    101    110  =025257

07764 = 07(111)  7(111) 6(110) 4(100)

相应的二进制为:0b111101010

c. 二进制和十六进制间的转换

二转16: 四位二进制转成1 位的16 进制
16 转2: 把一位16 进制拆成4 位2 进制

0b11 1010 1011 1111 0101 = 0x3abf5
0b1 0101 1110 1011 =0x15db
0x7ade = 0b0111 1010 1101 1110

d. x进制和y进制相互转换:

如,6 进制转7 进制:中间使用10 进制作为桥梁

有符号的表示法

为了解决负数在计算机中的存储,就出现了原码,反码,补码
(1)原码: 用最高位代表符号, 正数的符号位是0,负数的符号位是1,其他位代表数值
  使用8 位二进制来表示(计算机中存的数据单位一般是byte)
  7 的原码: 0 000 0111
  -7 的原码: 1 000 0111

(2)反码: 正数的反码就是原码, 负数的反码,符号位不变,其他为取反

  7 的反码: 0 000 0111
  -7 的反码: 1 111 1000

(3)补码: 正数的补码就是原码,负数的补码,在反码的基础上末位加1

  7 的补码: 0 000 0111
  -7 的补码: 1 111 1001

计算机中存储的都是二进制的补码

练习:
已知某数X 的原码为0b10110100,试求X 的补码和反码。
补码: 11001100
反码: 11001011

已知某数X 的补码0b11101110,试求其原码。
原码: 10010010

5.  变量

概念: 在java 程序运行的过程中,其值可以在一定范围内发生改变的量

定义格式:
    数据类型变量名= 初始化值;
    数据类型:
        整数: int
        字符串: String
    变量名: 小驼峰
    初始值: 变量的初始化值

变量的声明:
    数据类型  变量名;

 1 class VarDemo{
2 public static void main(String[] args){
3 int age = 18; //定义变量
4 String nickName = "一缕82 年的清风~";
5 int golds = 300;
6 int level = 1;
7 System.out.println(nickName);//一缕82 年的清风~
8 golds = 3000;// 对变量重新赋值,不加数据类型
9 age = 19;
10 nickName = "哈哈之力";
11 int weight = 100;
12 System.out.println(golds);//3000
13 System.out.println(age);//19
14 System.out.println(nickName);//哈哈之力
15 System.out.println(weight);//错误: 可能尚未初始化变量weight
16 }
17 }

变量的注意事项

    1. 定义在方法中的变量叫做局部变量, 局部变量不赋初值不能使用
      int weight;
      //定义在方法中的变量叫做局部变量, 局部变量不赋初值不能使用
      System.out.println(weight);//错误: 可能尚未初始化变量weight
    2. 变量所在的大括号叫做变量的作用域,同一个作用域中不能存在多个名字相同的变量
      int golds = 300;
      int golds = 30;//报错,已存在的变量golds
    3. 同一行可以定义多个变量,但是不建议这么使用.因为可读性差
      int a,b,c=10;//  等价于int a;int b;int c=10;
      System.out.println(a);// 错误: 可能尚未初始化变量a

6.数据类型

6.1 分类和范围:

(1)基本数据类型
  四类八种
    整数类: byte  short   int   long
    小数类: float    double
    字符类: char
    布尔类: boolean

(2)引用数据类型: 除了基本数据类型以外的所有类型
  类: String
  接口
  数组

类型        字节        位数       默认值          范围
byte     1     8       0         -128~127
short       2     16       0         -32768~32767 -2^15-- 2^15 -1
int      4      32         0        -2147483648~2147483647
long      8      64      0      -9223372036854775808~9223372036854775807
float      4      32         0.0     -3.4E38~3.4028235E38
double     8      64       0.0     -1.79E-308~1.7976931348623157E308
char      2      16       \u0000      0~65535
boolean      1        8       false       true 或false

bit: 一个二进制位
字节(byte) 8 个bit 256
1kb = 1024byte
1mb = 1024kb
1gb = 1024mb
1tb = 1024gb
1pb = 1024tb
…….

案例:使用8种数据类型定义变量

class DataTypeDemo{
public static void main(String[] args){
byte b1 = 22;
short s1 = 10;
int i1 = 44;
long l1 = 55;
float f1 = 12.4f;//从double(8字节)转换到float(4字节)可能会有损失,所以此处要加f将12.4变为float类型的小数
double d1 = 12.56;
char ch = '凡';
boolean b2 = true;
System.out.println(b1);
System.out.println(s1);
System.out.println(i1);
System.out.println(l1);
System.out.println(f1);
System.out.println(d1);
System.out.println(ch);
System.out.println(b2);
}
}

定义的注意事项

1. 整数的默认类型是int, 小数的默认类型是double
  System.out.println(70);// 70 是int 类型的
  System.out.println(123.4);// double 类型的
2. 定义float 类型的小数, 要在小数的后面加上f
  float f1 = 12.4;//.错误: 不兼容的类型: 从double 转换到float 可能会有损失
  原因: 这是一条赋值语句,是把等号右面的值,赋值给等号左边的变量,等号右面的值12.4,默认是double 类型的,把double 赋值给float,可能会造成损失
  解决方案: 在小数的后面加上f(F), float f1 = 12.4f; //12.4f 代表一个float 类型值
3. 3byte b1 = 123; 是把int 类型的123 赋值给byte,也是把大类型的数据赋值给小类型,但是并不会报错. 定义byte,short 类型的变量的时候,如果=右面的数值在等号左边的类型的范围之内,就可以赋值;
  byte by = 129;// 错误: 不兼容的类型: 从int 转换到byte 可能会有损失
4. 定义long 类型的变量的时候,如果等号右边的值在int 的范围之内,则可以直接赋值,如果等号右边的数值超出int 的范围,需要在数值的后面加上一个L(l),推荐使用大写的
  long l1 = 2147483649;// 2147483649 超出int 的最大值,会报错
  // 错误: 过大的整数: 2147483649

6.2 默认值

8 种基本数据类型,都有各自对应的默认值:

  byte,short,int ,long   默认值为0
  float double      默认值0.0
  char         \u0000 (空格)
  boolean         false

局部变量是没有默认值的,全局变量有默认值
定义在方法中的变量是没有默认值的,要想使用,必须赋值
静态的方法中只能调用外部用static 修饰的变量或方法

具体验证代码如下

class DataTypeDemo2{
int a;
static double b;
static boolean bo;
public static void main(String[] args){
// 定义在方法中的变量叫做局部变量,局部变量不赋初值不能使用
byte b1;
//System.out.println(b1);//错误: 可能尚未初始化变量b1
//System.out.println(a);//错误: 无法从静态上下文中引用非静态变量a
System.out.println(b);//0.0
System.out.println(bo);//false
}
}

6.3 运算规则

byte,short,char 不能直接做运算,要想做运算必须先转成int,给byte,short, 赋值的时候,先看等号的右边有没有变量,

         如果有变量,就按照上面的规则做运算,如果结果的类型范围超出左边的范围,就会产生错误        

   如果都是常量,就看最终的结果是否在左边的范围之内,如果在,就可以直接赋值

解释:当右边的值为变量时,只有在运行时才知道值,编译时只能知道其类型,所以就不知道值是否在范围内,只能通过数据类型的范围大小来判断,当右边的值为常数时,在编译时就知道了编译             结果,就可以直接判断其在不在范围内。

byte,short,char和int运算时得到的是int,int和long运算得到的是long 依次递推

byte,short,char  —> int  —> long —> float —>double

float 3.4*10 ^38 > 3.4*8^38 = 3.4*(2^3)^38 = 3.4*2^114 
long: 2^63 -1

通过最大值的比较,得出结论, float 的最大值远大于long 的最大值,  所以我们可以把long 赋值给float 类型的变量
案例如下:

class DataTypeDemo3{
public static void main(String[]args){
byte b1=3,b2=4,b;
//b=b1+b2;//错误: 不兼容的类型: 从int 转换到byte 可能会有损,
b=3+4;//正确的, byte b = 7;
float f = 12.4f;
float f1 = 134L;
float f2 = 120;//正确的
// float f3 = 120.0; 错误的,要加f,因为小数默认类型为double
System.out.println(f1);//134.0
}
}

6.4  char类型

char 类型代表的是字符.用单引号括起来,里面只能有一个字符:
char 占两个字节(0-65535),用的是unicode
utf-8: 表示英文和数字用1 个字节,表示中文用3 个字节
gbk: 表示英文和数字用1 个字节,表示中文用两个字节

char 类型直接打印,用的是他所代表的字符
char 类型参与运算,用的是他底层的编码

定义char 类型:
      char ch = ‘a’;
      char ch1 = 98;
      char ch2 = ‘\u0061’//a
char 类型的默认值其实就是编码是0 的字符,表现形式是一个空格,也可以表示成'\u0000'

class DataTypeDemo4{
  public static void main(String[] args){
    //char: 如果直接打印,用的是他所代表的字符,一旦参与运算,使用编码来运算
    char ch = 'a';
    System.out.println(ch);//a
    System.out.println(ch+1);//98
    char ch2 =98;
    System.out.println(ch2);//b
    char ch3 = '\u0063';// 后面是4位的十六进制,99
    System.out.println(ch3);//c
    //char 默认值: 0 \u0000 表现形式是一个空格
    System.out.println('3'+4);//55
    System.out.println('3'+'4');//103
  }
}

6.5 加法运算

+ : 正号, 加法运算, 字符串的拼接

要注意运算的顺序: 从左往右依次运算,有括号先算括号里的(先算乘除,后算加减)

String 和任意类型做加法,得到的都是String,值就是拼接后的结果

布尔类型不能和其他的基本数据类型做运算

class DataTypeDemo5{
  public static void main(String[] args){
    int a = +10;
    System.out.println('a');// a
    System.out.println('a'+1);//98
    System.out.println("hello"+'a'+1);// helloa1
    System.out.println('a'+1+"hello");//98hello
    System.out.println("5+5="+5+5);//5+5=55
    System.out.println("5+5="+(5+5));//5+5=10
    System.out.println(5+5+"=5+5");//10=5+5
    //System.out.println(true+'1');//: 错误: 二元运算符'+' 的操作数类型错误
    System.out.println(true+"1");// true1
  }
}

7. 强制类型转换

强制类型转换的格式:
      目标类型变量名= (目标类型) 要转的值(常量或变量);
基本数据类型: 除了boolean 类型以外,其他7 中类型都可以互相转换
        一般是在把大类型转成小类型的时候用强转
引用数据类型: 必须具备子父类的关系     向下转型

  

class ForceTypeZH{
public static void main(String[] args){
int a = 10;
long b = a;//默认转换小的给大的
System.out.println(b);//
long c = 10;
//int d = c;// 错误: 不兼容的类型: 从long 转换到int 可能会有损失
//非要转,就强转
int d = (int)c;
byte by = (byte)130;
System.out.println(by);//-126
}
}

为什么130强制转换成byte类型时,其值就变成-126,原因如

此处因为130开始为int类型(4byte),转为byte类型后,其位数为8,则丢弃前面3字节

零基础学习java------day2------关键字、标志符、常量、进制键的转换、java中的数据类型、强制类型转换的格式的更多相关文章

  1. 李洪强iOS开发之零基础学习iOS开发【02-C语言】03-关键字、标识符、注释

    上一讲中已经创建了第一个C语言程序,知道了C程序是由函数构成的,这讲继续学习C语言的一些基本语法.C语言属于一门高级语言,其实,所有的高级语言的基本语法组成部分都是一样的,只是表现形式不太一样.就好像 ...

  2. 零基础学习java------40---------Maven(maven的概念,安装,maven在eclipse中使用),springboot(spring整合springmvc(注解),spring整合mybatis(常见的配置文件)),前端页面(bootstrap软件)

    一 maven 1. Maven的相关概念 1.1 项目开发中遇到的问题 (1)都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? (2)为什么在我的机器上可以正常打包,而配置管理 ...

  3. salesforce零基础学习(一百二十)快去迁移你的代码中的 Alert / Confirm 以及 Prompt吧

    本篇参考: https://developer.salesforce.com/blogs/2022/01/preparing-your-components-for-the-removal-of-al ...

  4. java字节数组和16进制之间的转换

    /* * To change this template, choose Tools | Templates * and open the template in the editor. */ pac ...

  5. 总结了零基础学习Java编程语言的几个基础知识要点

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这 ...

  6. 音乐出身的妹纸,零基础学习JAVA靠谱么

    问:表示音乐出身的妹纸一枚  某一天突然觉得身边认识的是一群程序员   突然想 要不要也去试试... 众好友都觉得我该去做个老师,可是我怕我会误人子弟,祸害祖国下一代..... 要不要 要不要 学Ja ...

  7. HTML5零基础学习Web前端需要知道哪些?

    HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...

  8. Yaf零基础学习总结4-Yaf的配置文件

    在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...

  9. 【零基础学习iOS开发】【转载】

    原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开 ...

随机推荐

  1. 链表中倒数第K个结点 牛客网 程序员面试金典 C++ Python

    链表中倒数第K个结点 牛客网 程序员面试金典 C++ Python 题目描述 输入一个链表,输出该链表中倒数第k个结点. C++ /* struct ListNode { int val; struc ...

  2. 前端面试手写代码——模拟实现new运算符

    目录 1 new 运算符简介 2 new 究竟干了什么事 3 模拟实现 new 运算符 4 补充 预备知识: 了解原型和原型链 了解this绑定 1 new 运算符简介 MDN文档:new 运算符创建 ...

  3. 记一次排查CPU高的问题

    背景 将log4j.xml的日志级别从error调整为info后,进行压测发现CPU占用很高达到了90%多(之前也就是50%,60%的样子). 问题排查 排查思路:  看进程中的线程到底执行的是什么, ...

  4. Effective java 读书笔记(2)

    第四条:通过私有构造器强化不可实例化的能力 有时可能需要编写只包含静态方法和静态域的类,这样的工具类不希望被实例化,因为实例化对它来说没有意义. 然而,在缺少显式构造器的情况下,系统会自动提供一个缺省 ...

  5. Jmeter接口数据流测试及持续集成部署:(一)Jmeter环境搭建:安装JDK、安装Jmeter、安装Fiddler、安装ant

    Jmeter环境搭建 1.安装JDK 官方下载地址:https://www.oracle.com/java/technologies/downloads/ 安装方法:双击jdk安装包,一直下一步安装即 ...

  6. [Vue warn]: Unknown custom element: <sapn> - did you register the component correctly? For recursive components, make sure to provide the "name" option. found in ---> <Evaluate> at src/views/index/

    关于vue报错: [Vue warn]: Unknown custom element: <sapn> - did you register the component correctly ...

  7. layui表格-template模板的三种用法

    问题情境: layui中将数据库数据通过layui table渲染到前端表格,非常简单,但是如果数据库存储的信息不能被直接展示,项目中该页面有好几个这样的字段,会员类型,支付类型,会员时长还有平台类型 ...

  8. 大爽Python入门教程 1-1 简单的数学运算

    大爽Python入门公开课教案 点击查看教程总目录 1 使用pycharm建立我们的第一个项目 打开pycharm,点击菜单栏,File->New Project 在Location(项目地址) ...

  9. [loj3175]排列鞋子

    贪心与最近的鞋子匹配(大小相同且方向相反),记$a_{x}$表示第x双鞋子的左位置,$b_{x}$表示右位置 若$a_{x}>b_{x}$,那么可以交换这两双鞋子并令答案+1,所以不妨设$a_{ ...

  10. 【Tool】Node.js 安装

    Node.js 安装 2019-07-29  14:56:14  by冲冲 1. 说明 电脑使用node.js存在两种方式: ① 第一种,下载(.exe)到本地电脑,不需要安装,下载后点击 node. ...