J2SE基础篇——数据类型、运算符、语句、程序执行时内存分配、进制、编码

本文主要是介绍J2SE基础篇——数据类型、运算符、语句、程序执行时内存分配、进制、编码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、基本数据类型

(1)分类

按照声明位置划分

   局部变量:方法或语句块定义的变量;

   成员变量:方法外部、类的内部定义的变量;

按照数据类型划分

关于类型,首先要明白他是一种类型,而不是存储的容器,如同一匹马、一头牛等,匹、头就是我们的类型(单位),用来形容或标注现实世界中存在的物体,这是我们人类为了认知方便而发明,数据类型也是为了计算机或人认知方便而发明的。内存才是数据真正存放的地方,存放所占的单位大小就得需要类型来划分,一个数据在计算机的内存中保存时,需要一定的空间,这种“空间”由程序中的“数据类型”(比如int/long/float)来告诉编译器。

         

   上面这种图还不足以说明情况,请看下表,注意色彩和文字粗细的不同,有些人经常记不住那些类型占用几个字节,看完下面归纳的图,我想应该就差不多了。

基本数据类型

类型

大小(bit)

范围

默认值

byte(字节)

8

-128127

0

char(字符型)

16

‘\u0000 u\ffff ’

‘\u0000

shot(短整型)

16

-3276832768

0

int(整型)

32

-21474836482147483648

0

float(浮点型)

32

-3.40292347E+383.40292347E+38

0.0f

long(长整型)

64

-92333720368544778089233372036854477808

0

double(双精度)

64

-1.79769313486231570E+3081.79769313486231570E+308

0.0d

boolean(布尔型)

1

true/false

False

比较有意思的就是String,首先String不属于8种基本数据类型,String是一个对象,由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如:String s = “abc”; s = “Java语言”;其实按照面向对象的标准语法,其格式应该为:Strings = new String(“abc”); s = new String(“Java语言”);

只是按照面向对象的标准语法,在内存使用上存在比较大的浪费。例如Strings = new String(“abc”);实际上创建了两个String对象,一个是”abc”对象,存储在常量空间中,一个是使用new关键字为对象s申请的空间。其它的构造方法的参数,可以参看String类的API文档。

(2)基本数据之间的转换

boolean类型不可以转换为其他数据类型

整形、字符型,浮点型的数据在混合运算中相互转换,遵守以下原则:

    1) 容量小的类型自动转换为容量大的数据类型;

    2) 容量大的数据类型转换为容量小的数据类型,要加上强制转换符,有可能造成精度降低或溢出;

    3) 有多种类型的数据混合运算时,系统首先自动的将所有数据类型最大的那一种,然后再计算;

    4) 实数常量默认为double

    5) 整数常量默认为int


二、运算符

运算符和C#中几乎一致,分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、扩展赋值运算符、字符串连接运算符;

算术运算符

单目:+(取正)-(取负) ++(自增1) - -(自减1)

双目:+ - * / %(取余)

三目:a>b?true:false 说明:当a大于b的时候,为true(也就是冒号之前的值),否则为false;这整个运算符包括一个关系运算符(可以是“>”"<""!="等等),一个“?”,一个“:”,冒号前后需要有两个表达式或者是值或者是对象。

运算符按照其要求的操作数数目来分,可以有单目运算符、双目运算符和三目运算符,它们分别对应于1个、2个、3个操作数。

关系运算符

等于符号:==,不等于符号:!= ,大于符号:>, 小于符号:<,大于等于符号:>= ,小于等于符号:<= 。

逻辑运算符

与(&&)、非(!)、或(||)

位运算符

位运算符 与(&)、非(~)、或(|)、异或(^)

&:双目运算符,运算时均把运算数转换为二进制再做比较,规则:当相同的位上均为1时结果为1,否则结 果为0.如:1010&1101,转为二进制:10001001101&1111110010比较结果为:1000000转为十进制: 64所以1010&1101=64;

| :当两边操作数的位有一边为1时,结果为1,否则为0。如1100|1010=1110

~:0变1,1变0

^:两边的位不同时,结果为1,否则为0.如1100^1010=0110

位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。

移位运算符

<<:左移运算符,num << 1,相当于num乘以2,是逻辑左移,右边补0,符号位和其他位一样要移动。

例如: 3 << 2,则是将数字3左移2位
    计算过程:3 << 2
    首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12.数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
    >>:右移运算符,num >> 1,相当于num除以2
    >>>:无符号右移,忽略符号位,空位都以0补齐

赋值运算符

= += -= *= /= %= &= ^= |= <<= >>=

三、语句

if语句

    If······;If···else···;If···elseif···;If···elseif···elseif···;If···elseif···elseif···else··;

for循环语句

    for(表达式1;表达式2;表达式3{语句;···}

While& do while语句

  while语句和do while最大的不同点是:dowhile语句无论是否符合执行的条件至少执行一次。

Break& continue语句

  break语句用于终止某个语句块的执行,用在循环语句体中,可以强行退出循环;

 continue语句用在循环体中,用于终止某此循环过程,跳过循环体continue语句下面未执行的循环,开始下一次循环过程。

四、程序执行时内存分配

 

   各区段功能说明: 
1、程序代码区:存放函数体的二进制代码。
2、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放。
3、文字常量区 :常量字符串就是放在这里的。 程序结束后由系统释放。
4、堆区(heap): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
5、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

堆栈(Stack)和堆的功能来讲,堆主要是用来存储对象的,像个储物堆场(和他的名字差不多),堆栈主要是用来执行程序的。

以上这段文字可参考:http://blog.sina.com.cn/s/blog_5420e0000101a0w1.html

JVM优化,以及内存划分:http://pengjiaheng.iteye.com/blog/518623

五、进制表示方法

由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。   
  但,二进制数太长了。比如int   类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:   
  0000   0000   0000   0000   0110   0100   
  面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++,以及java中   没有提供在代码直接写二进制数的方法。  
  八进制数的表达方法   
  如何表达一个八进制数呢?如果这个数是   876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或12345670,那么它是八进制数还是10进制数,都有可能。   
  所以规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数的表达方法。   
  现在,对于同样一个数,比如是100,我们在代码中可以用平常的10进制表达,例如在变量初始化时:   
  int   a   =   100;   
  我们也可以这样写:   
  int   a   =   0144;   //0144是八进制的100;一个10进制数如何转成8进制,我们后面会学到。   
  千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。   
  

十六进制数的表达方法   
  如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。   
  16进制数必须以   0x开头。比如   0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不区分大小写。(注意:0x中的0是数字0,而不是字母O)   
  以下是一些用法示例:   
  int   a   =   0x100F;   
  int   b   =   0x70   +   a;   
  至此,我们学完了所有进制:10进制,8进制,16进制数的表达方式。最后一点很重要,10进制数有正负之分,比如12表示正12,而-12表示负12,;但8进制和16进制只能用达无符号的正整数,如果你在代码中里:-078,或者写:-0xF2,编译器并不把它当成一个负数。

六、字符编码

http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

http://www.regexlab.com/zh/encoding.htm#main

http://zhidao.baidu.com/question/74014835.html

这篇关于J2SE基础篇——数据类型、运算符、语句、程序执行时内存分配、进制、编码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/690409

相关文章

Java内存区域与内存溢出异常的详细探讨

《Java内存区域与内存溢出异常的详细探讨》:本文主要介绍Java内存区域与内存溢出异常的相关资料,分析异常原因并提供解决策略,如参数调整、代码优化等,帮助开发者排查内存问题,需要的朋友可以参考下... 目录一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)J

sql语句字段截取方法

《sql语句字段截取方法》在MySQL中,使用SUBSTRING函数可以实现字段截取,下面给大家分享sql语句字段截取方法,感兴趣的朋友一起看看吧... 目录sql语句字段截取sql 截取表中指定字段sql语句字段截取1、在mysql中,使用SUBSTRING函数可以实现字段截取。例如,要截取一个字符串字

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

C语言中的常见进制转换详解(从二进制到十六进制)

《C语言中的常见进制转换详解(从二进制到十六进制)》进制转换是计算机编程中的一个常见任务,特别是在处理低级别的数据操作时,C语言作为一门底层编程语言,在进制转换方面提供了灵活的操作方式,今天,我们将深... 目录1、进制基础2、C语言中的进制转换2.1 从十进制转换为其他进制十进制转二进制十进制转八进制十进

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门