JavaSE基础复习---2---2018/9/28
目录:
1、数据类型
2、变量
3、数组
1.数据类型
谈到java的数据类型,必须知道java是强类型语言。首先,每个变量有类型,每个表达式有类型,而且每种类型是严格定义的。其次,所有的数值传递,不管是直接的还是通过方法调用经由参数传过去的都要先进行类型相容性的检查。有些语言没有自动强迫进行数据类型相容性的检查或对冲突的类型进行转换的机制。但是Java编译器会对所有的表达式和参数进行类型相容性的检查以保证类型是兼容的。任何类型的不匹配都是错误的,在编译器完成编译以前,错误必须被改正。
java中的简单数据类型有8个,代表简单数值,而不是一个对象。同时这些简单类型在任何平台运行java程序时,都是固定位数,体现了java的可移植性。分别是以下八个,分为三大类:
整数类型:采用补码的形式在内存中存储。
字节型(byte),占8位,范围:–28~28-1,常用于网络或文件处理数据流。
短整型(short),占16位,范围:–216~216-1,基本不用。
整形(int),占32位,范围:–232~ 232-1,常用在各种程序中间变量,类属性等。
长整型(long),占64位,范围:–264 ~ 264-1,用于特殊数值比较大的时候。
浮点类型:
浮点型(float),占32位,范围:3.4-38~3.4+38(注意float范围大于long)
双精度浮点型(double),占64位,范围:1.7-308~1.7+308
字符型(char),占16位,范围:0~217-1。每一个值都对应着一个字符,涵括了世界上所有的字符。尽管char是字符,但是本质上还是以整数位标记,因此可以对其进行类似于数值的操作。
布尔型(boolean),占1位,范围:true、false。
字面量
字面量,意思就是一个值,比如23、19.8、a、false等。
首先整数字面量最好理解,他们都是基于十进制的值。如果要使用8进制,则在数值前面加上导0,比如023代表19。但是08将会没有意义,因为八进制中没有8。如果要使用16进制,则在数值前面加上0x或0X。整数字面量在java中是默认按照int进行处理,即在内存中占用32位。可以通过在字面量后面加上l或者L来指定这是一个long型字面量。int型字面量赋值给long或者int当然没有问题,但是赋值给byte或者short时,就要考虑是否越界。将int字面量赋值给byte时,会先对256取余,再将余数赋值给byte。显然当字面量小于256可以正常赋值,但是大于256时,会出现错误。
浮点型字面量可以用3.44或者2.933e1(科学计数法)来表示。浮点型字面量默认是64位的double型,通过在字面量后面加上f或者F可以指定float型字面量。
布尔型字面量最简单,只有false或者true。注意0或者1不是布尔型字面量,他们只能被赋给已定义的布尔变量,或在布尔的运算符表达式中使用。
对于字符型字面量,由于java采用Unicode码表示字符,可以对其进行类似整数的运算。一般用‘xxx’来表示xxx字符的字面量。对于一些不能被直接包括的字面量,有一些转义符可以使用。
字符串字面量,比如“this is a string”,用“”括起来。注意之前的c或者c++都是讲字符串当做是字符的数组进行处理,java中不同,是当做一个对象来处理的。因此就有很多专用于java字符串处理的类与对应的方法。常见的String,StringBuilder,StringBuffer(线程安全的StringBuilder)。
2.变量
典型定义变量的表达式:type identifier [ = value][,identifier [=
value] ...] ;其中,type是变量类型,identifier是变量标识符,[]内可以省略,可选是否初始化以及同时定义多个同类型变量。同时定义变量时也支持动态初始化,只要表达式是有效的。比如说:
double c = Math.sqrt(a * a + b * b);
变量的作用域与生存期
Java中,有程序块的概念。首先,程序块是指两个{}之间的代码块,代码块创建后也就产生了一个作用域。一般的程序语言都有局部变量以及全局变量的概念。Java中变量作用域主要取决于类与方法(类似于程序块)。类暂不讨论,此处先讨论方法中变量的作用域。方法中定义的变量,只能在整个方法中使用,对外界不可见。方法中又嵌套程序块时,程序块内的变量对块外不可见。同时,同一方法内,程序块内与程序块外变量不可同名。
变量在被定义后才是合法,可以使用的,也就是在内存中开辟了一块空间给变量。同时,当变量所在的程序块或者方法执行完毕后,变量也随之销毁,开辟的内存空间也就被回收。因此变量的生命期就是从其开始被定义到其所在程序块运行结束。
类型转换、强制类型转换与自动转换
自动类型转换需要满足两个条件:1.这两种类型兼容(数值类型与char不兼容)2.目的类型数的范围大于源类型。当不满足自动转换时,便要进行强制类型转换,会出现两种情况:1.将int赋给byte,见上字面量中描述。2.将浮点赋给整型,此时会发生截断,即小数部分被舍弃,只有整数部分被赋给整型变量了。
byte b;
int i = 257;
double d = 323.142;
b = (byte) i;
System.out.println("i and b " + i + " " + b);//i and b 257 1
i = (int) d;
System.out.println("d and i " + d + " " + i);//d and I 323.142 323
b = (byte) d;
System.out.println("d and b " + d + " " + b);//d and b 323.142 67
自动类型提升发生在表达式的计算中,看如下代码:
short a=23;
byte b=22,c=41;
int I = b*c/a;
当分析表达式时,Java自动提升各个byte型或short型的操作数到int型。这意味着子表达式b*c使用整数而不是字节型来执行,尽管变量b和c都被指定为byte型,22*41中间表达式的结果是合法的。下面有一个特例:byte a=2;a = a*3;看起来没有发生越界,但实际上a*3已经是int类型数值,直接赋给byte型的a肯定不对,因此编译会报错,解决办法是:a=(byte)a*3;即加上强制类型转换。自动类型提升的约定:所有的byte跟short会默认提升到int;表达式有long就全部默认到long;表达式有float就默认全部到float;表达式有double就全部默认到double。即:byte/short->int->long->float->double。
3.数组
谈到Java中的数组,首先要分清其余C或者C++中数组的区别。Java中的数组是类似于对象的一种实物。比如说int[ ] A;看上去是定义了一个名为A的int型数组,但是在内存中编译器实际上还没有给该数组分配内存空间。只有int[ ] A = new int[10];这样,才在内存中开辟了10个int类型大小的存储空间给A数组。同时可以定义数组的时候就对其初始化,并用A[x]的形式访问数组第x+1个元素,这点类似于c语言。
一个注意点时,Java会严格检查我们是否访问或存储了数组范围以外的值。。Java的运行系统会检查以确保所有的数组下标都在正确的范围以内(在这方面,Java与C/C++从根本上不同,C/C++不提供运行边界检查)。
多维数组
多维数组可以理解为是数组的数组。比如说一个二维数组int[ ][ ] A= new int[3][4];就是定义了一个3个数组,每个数组含有4个元素。理解为3*4,即3行4列,每行是一个数组,有3个数组。
同时,多维数组允许我们指定每一个数组大小不同。比如int[ ][ ] A= new int[3][ ];然后分别对这三个数组指定大小;A[0] = new int[1]; A[1] = new int[2]; A[2] = new int[3];这样二维数组A的三个子数组A[0],A[1],A[2]大小分别为1,2,3,这样就定义了一个下三角矩阵。多维数组同样也可以定义的时候就初始化,比如说:int[ ][ ] A = new int{{1},{1,2},{1,2,3}};这样就给上面描述的下三角矩阵A数组初始化了。
TIPS:java为何不支持指针?
众所周知,c语言与C++全部都是支持指针操作的,即通过指针来直接访问计算设备中的内存。指针就是一个内存设备的地址,通过其可以直接读取或者修改该内存单元的值。而Java的特点就是通过在各种平台上实现JVM,然后在JVM提供的运行环境下运行Java程序。如果说提供指针来直接访问各种平台的内存,那么程序的运行将会脱离JVM的控制,这样由JVM提供的跨平台移植性,安全性均无法得到保证。但也无需担心丢失了指针特性会对我们写Java程序有多大的影响,只要是在JVM的运行环境下,我们就不需要使用指针,使用指针也不会带来任何好处。
JavaSE基础复习---2---2018/9/28的更多相关文章
- javase基础复习攻略《一》
作为一名软件工程专业,JAVA开发方向的大三本科学生,有必要把自己的学到的专业知识进行一下整理,一则方便自己了解自己的学习程度,二则帮助刚刚接触这一门语言的童鞋了解学习,本人来自与河南理工大学,介绍完 ...
- javase基础复习攻略《十》
按照计划本篇为大家总结JAVA的网络编程,什么叫网络编程呢?网络编程!=网站编程,对于这一点大家一定要注意,很多小朋友都曾经这么认为.既然谈到网络编程,咱们先了解一下网络的基础知识,什么是计算机网络? ...
- javase基础复习攻略《二》
今天就开始的真正走进JAVASE的世界,本篇介绍的是:JAVASE基础语法,大家如果有C语言的基础,对于本节内容一定感觉非常轻松,编程语言之间的都是相通的,只不过C语言属于面向过程编程,而JAVA语言 ...
- JavaSE基础复习---1---2018/9/27
2018/9/27 JavaSE学习笔记-1 目录: Java的起源 Java语言概述 1.Java的起源 现代编程语言的发展,大致可以理解为,机器码语言---汇编语言---C语言---C++语言-- ...
- javase基础复习攻略《九》
本篇将为大家总结JAVA中的线程机制,谈到线程,大家一定会问线程和进程有什么区别?刚接触进程时我也有这样的疑问,今天就为大家简单介绍一下进程和线程.进程(Process)是计算机中的程序关于某数据集合 ...
- javase基础复习攻略《八》
进入第八篇,我们开始讨论JAVA的IO初步.在JAVA程序中,对数据的输入\输出操作以"流"(stream)方式进行,J2SDK提供了各种各样的"流"类,用于获 ...
- javase基础复习攻略《五》
总结完JAVA的基础语法和面向对象思想后,今天为大家补充一下JAVA中的数组,数组是什么呢?大家是不是想到了集合,数组和集合有相似之处,集合中的数据无序,不可以重复.数组中则存放着具有相同特征的一组数 ...
- javase基础复习攻略《三》
编程语言的发展: 机器语言——直接由计算机的指令组成,指令.地址.数据都是以"0"和"1"的符号串组成,可以被计算机直接执行. 汇编语言——用容易理解和记忆的符 ...
- javaSE基础复习
第一天:复习java入门知识,jvm内存,java程序执行流程,数据类型,变量和自动类型转换,运算符... 学习java目的:起初是因为想找工作,拿高薪.后来逐渐在学习java技术的过程中渐渐循喜欢上 ...
随机推荐
- nginx下的nagios pnp4nagios
#Spawn-FCGI 一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作 #fcgiwrap(Si ...
- windows网络命令汇总
分类: 网络技术2011-10-26 09:43 2557人阅读 评论(0) 收藏 举报 windows网络路由器dns服务器internetinterface Ping命令: ping命令通过发送I ...
- Windows漏洞利用技术概述
Windows漏洞利用技术总结 1. 前言 本文是我对漏洞利用技术的学习总结,也是自己践行QAD (Questions.Answer.Discussions)的一次实践.本文通过阅读几位大牛的文章.演 ...
- May 16th 2017 Week 20th Tuesday
The most fearful enemy is not having a firm conviction. 最可怕的敌人,就是没有坚强的信念. A firm conviction or belie ...
- codefind.pl
#!/usr/bin/perl # # Find a pattern in a the book's source collection (DOS/Windows version) # # (C) C ...
- Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上
这个系列的前两篇文章,我们已经把我们的应用成功地在Docker里通过nginx运行了起来,并且用dockerfile里制作好了一个镜像. Docker入门系列之一:在一个Docker容器里运行指定的w ...
- codeforces 609E Minimum spanning tree for each edge
E. Minimum spanning tree for each edge time limit per test 2 seconds memory limit per test 256 megab ...
- Android(java)学习笔记35:如何改变Spinner系统自带的字体和颜色
1. 首先我们要知道Spinner系统自带字体和颜色本质: 原生的Spring 控件是无法更改字体和颜色的... 从下面的代码可以看出...红色的标注显示使用的是Android默认的布局.. Spin ...
- What is a Thread?
https://computing.llnl.gov/tutorials/pthreads/ Technically, a thread is defined as an independent st ...
- ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(六)之 好友申请、同意、拒绝
不知道距离上一篇多久没有写了,可能是因为忙(lan)的关系吧.废话不多说,今天要介绍的不算什么新知识,主要是逻辑上的一些东西.什么逻辑呢,加好友,发送好友申请,对方审批通过,拒绝.(很遗憾,对方审批通 ...