栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

软构笔记4

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

软构笔记4

1. 初识Java & 数据类型与运算符

美其名曰软构笔记4?!最近课翘得厉害。。。别问我怎么跑到Java这儿来了,既然写了那就希望能和C/C++联系着写。分方向可能要挑软工,因为我相中它大四没课了,想想就开心,没有课程的压力,我就可以四处流浪了~ 当然了我还是主攻cpp

正文开始@一个人的乐队

1. 初识Java中的main函数

Java是一门半编译型、半解释型语言。

  • 先通过Javac(Java Compiler)把源文件进行编译,编译后生成的**.class文件是由字节码组成的与平台无关、面向JVM的文件(“一次编译,到处运行”**,是一门跨平台语言)。
  • 最后启动Java虚拟机来运行.class文件,此时JVM会将字节码转换成平台能够理解的形式来运行。
public class Test {
    
	public static void main(String[] args) {
		System.out.println("hello Java");
	}
}
  • 若这个类是public修饰的,类名要与文件名儿一致。

  • 不是一个文件对应一个字节码.class文件,而是一个类对应一个字节码文件(我们一般一个文件放一个类)。好处是用到哪个类就去加载哪个类,而不是一股脑都加载。

  • 关于JDK、JRE、JVM

  • 注:javac 编译时默认是以GBK格式编译的,但是文件是以utf-8编辑的。因此含中文时编译时要带上

    javac -encoding utf-8 文件名.java
    

关于Java中main函数本身:

  • 在C语言中我们就知道main函数是可以带参数的(其实我也是在Linux的学习中才深刻认识到),传入的是命令行参数。那这儿的String[] args也一样,就是存放运行时命令行参数的数组。
  • 关于类,方法,访问修饰限定符,没啥好说的~
2. Java数据类型

和C/C++有很多相似之处,又有很多区别,看着Java这些看似琐碎又严密的东西,我时而懒得写了,时而又发现它们很有意义,到底还是都写了。

类型的意义之一在于所占空间大小。

2.1 整型 2.1.1 int类型
  • Java中的int 一个变量占4byte,与操作系统无关,可移植性强。

  • Java中的int都是有符号的,没有所谓的无符号类型。

  • 取值范围:[-231,231-1] = [-2,147,483,648,2,147,483,647]

    System.out.println(Integer.MAX_VALUE);
    System.out.println(Integer.MIN_VALUE);
    
    //执行结果
    2147483647
    -2147483648
    

​ Integer:包装类

  • Java比较安全,如果不初始化就使用会报错。
2.1.2 long类型

如果运算的结果超出了 int 的最大范围,,就会出现溢出的情况。21亿这样的数字对于当前的大数据时代来说,是很容易超出的。针对这种情况,Java 中提供了long类型。

System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);

//执行结果
9223372036854775807
-9223372036854775808
  • 初始化设定的值为10L,表示一个长整型的数字。10l也可以,但容易误解不推荐。
  • 使用10初始化long类型也可以,但10的类型是int,使用10L/10l更好一些。
long num = 10L; // 定义一个长整型变量
System.out.println(num);
2.2 浮点型 2.2.1 double类型

神奇代码

double num = 1.1;
System.out.println(num * num)
    
// 执行结果
1.2100000000000002

因为Java的double类型的内存布局遵守IEEE 754标准(和C语言一样),尝试使用有限的内存空间表示可能无限的小数,向偶数舍入势必会存在一定的精度损失。

2.2.2 float类型

错误示范,请勿模仿 ——

C语言是弱类型语言,把double给float只会报一个警报;而Java是强类型语言,2.5默认是double类型,类型不匹配一定会报错。

因此,定义float类型给它赋值时要加f

float num = 1.0f;    // 写作1.0F也可以
System.out.println(num);
2.3 字符类型

计算机中的字符本质上是一个整数:在 C 语言中使用 ASCII 表示字符;而 Java 中使用 Unicode 表示字符,因此一个字符占用两个字节,表示的字符种类更多,包括中文。

char ch = '呵'; //两个字节
System.out.println(ch);

注:编译时要带选项

javac -encoding UTF-8 Test.java
2.4 byte类型

字节类型表示的也是整型,只占一个字节,表示范围[-128,127]。字节类型和字符类型互不相干。

byte b = 10; 
System.out.println(b); //10

注意:在Java中这些数值类型,都是有表示范围的,若存储数据超过表示范围,会直接报错。在C/C++中,并不会报错,而是悄默声儿的发生溢出。在Java中没有sizeof计算类型大小,因为就是这样儿的。

2.5 short类型

短整型,short占用2个字节,表示范围是[-32768,32767],这个表示范围比较小,一般不推荐使用。

2.5 boolean
  • boolean类型的变量只有两种取值:true表示真,false表示假。

  • Java不存在1表示true,0表示false这样的用法。boolean 类型和 int 不能相互转换。

  • boolean类型的大小:有些 JVM的规范中并没有规定,有些占1 个字节,有些是占1个比特位。

2.6 String 类型(重点)

众所周知,C语言没有字符串类型,C++的STL中提供了string类。在Java中,String也不是基本类型,而是引用类型(后面重点解释,像是C++中的基本类型和自定义类型)。

Java中分为 ——

  • 数值类型(基本数据类型8种)
    • 整数:byte, short, int, long
    • 浮点数:double, float
    • 字符:char
    • 布尔:boolean
  • 引用类型
    • String,数组,类,接口,枚举…

关于字符串+拼接,学过C++的宝子们都明白为什么后两行相似而不相同的,尤其在我们模拟实现了string类的运算符重载。

System.out.println("hey! "+"have a nice day!");//hey! have a nice day!
System.out.println("add"+10+20); //add1020
System.out.println(10+20+"add"); //30add

字符串中的一些特定的不太方便直接表示的字符需要进行转义

System.out.println(""shit."she said"); //"shit."she said
转义字符
n换行
t水平制表符
’单引号
"双引号
\反斜杠
3. 变量&常量
  • 变量:程序运行时可以改变的量

  • 常量:程序运行时不可修改,在程序编译时就已经确定其值了。

    • 字面值常量

    • final关键字修饰的常量

​

4. 理解类型转化
  • Java 作为一个强类型编程语言,当不同类型之间的变量相互赋值的时候,会有教严格的校验:不同数字类型的变量之间赋值,表示范围较小的类型能隐式转换成范围较大的类型。而在C语言,就会悄悄地发生截断精度损失了。

  • 当然了,你可以强转,但是有风险的,可能损失精度。当然了,强转只能发生在相似类型之间,对于int和boolen这种毫不搭嘎的类型不可以。

  • 将一个字面值常量进行赋值的时候,Java 会自动针对数字范围进行检查。而C/C++可能就不报错,悄悄的溢出惊艳所有人。

5. 理解数值提升
byte a = 10; 
byte b = 20; 
byte c = a + b; 
System.out.println(c); 

// 编译报错
Test.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失
             byte c = a + b; 
                        ^

为了高效率,计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据,为了硬件上实现方便 ——

  • 对于小于4byte的类型(byte/short),会先提升为int类型再运算。
  • 不同类型的数据混合运算,范围小的会提升成范围大的。

其实这么简单的地方我还写这么细,我都觉得太花我时间了,因为我还是主攻cpp,但是没办法,性格使然,“你见到istj时从来都是稳扎稳打”,唉,我再悄默声儿的说一句Java课件做的真棒!对我这个高Si的人很友好,当然了cpp的也越写越棒了~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/943239.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号