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技术的过程中渐渐循喜欢上 ...
随机推荐
- 使用CTE公用表表达式的递归查询(WITH AS)
公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE.递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式. 当某个查询引用递归 ...
- 20150103 海南铁汉vs哈尔滨毅腾
本文首发于『懂球帝』 这一场球赛虽然极其普通,在各位懂球帝面前或许不值得一提,但它极具历史意义,因为这是海南第一个职业联赛队伍的首场正式比赛,同时也是海南铁汉队第一次在正式比赛中与球迷们见面. 稍做一 ...
- IOS 公司标示使用反向域名
1. 公司标示使用反向域名========================================正向域名 www.baidu.com 用来标示一台网络主机反向域名 cn.itcast.Myd ...
- Ubuntu 配置java环境变量
1.使用如下命令,打开/etc/profile: $sudo vi /etc/profile 2.进入编辑模式,在末尾添加: #developer enviroment, add by myself ...
- HashMap中的equals和hashCode
HashMap的存储方式 HashMap的实现方式是数组链,不同的对象根据其哈希码(hashCode方法的返回值)找到对应的数组下标,然后存入数组.不同的对象有相同的哈希码时怎么办?这就由数组链中的链 ...
- sqlite简单笔记
五种约束需要注意的地方 1.自增使用:autoincrement 2.约束必须进行后面处理:unique(字段[多个可以以逗号分开]) 3.外键必须放后面:foreign key(字段引用) refe ...
- Git使用(一)
声明: 第一次使用git,只能保证我的方法可以用,肯定不是最简最好的.以后需要用到更多的用法的时候再来这里更新. 说实话,记下来主要是因为自己记性不好,各种配置记不住,都是当备忘录用的,(囧囧囧囧囧) ...
- 【题解】洛谷P2914[USACO08OCT]断电Power Failure
洛谷P2914:https://www.luogu.org/problemnew/show/P2914 哇 这题目在暑假培训的时候考到 当时用Floyed会T掉 看楼下都是用Dijkstra 难道没有 ...
- mysql的子查询in()操作及按指定顺序显示
代码示例: in(逗号分隔开的值列表) 释:是否存在于值列表中 --------------------- 示例: select * from test where id in(3,1,5) orde ...
- Java虚拟机垃圾回收:基础点(转载)
1.Java虚拟机垃圾回收 垃圾回收,或称垃圾收集(Garbage Collection,GC)是指自动管理回收不再被引用的内存数据. 在1960年诞生于MIT的Lisp语言首次使用了动态内存分配和垃 ...