Java课堂笔记(一):Java基础
本篇博客将对Java中的数据类型、操作符,常量与变量和数组进行介绍。这些内容都是Java中最基本的知识,也是初学Java时最开始就需要了解的东西。
Java数据类型
Java是一种强类型的语言,这就意味着编写Java代码时必须为每一个变量都声明一个类型,且每个变量只能被赋予与其类型匹配的值。Java中的数据类型可以分为基础数据类型和引用数据类型,两者间最大的差别是在计算机中的存储方式和位置不同。基础数据类型在创建时会在栈中分配一块内存,将数据直接存储在其中;而引用数据类型在被创建时,会在堆内存上分配一块内存,将数据内容存储在其中,并在栈中分配一块内存用于存储该数据在堆中的地址。
Java中包含8中基本数据类型,包括4中整数类型:short、int、long、byte,2中浮点类型:float、double,1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真假值的boolean类型。它们相关信息如图1所示
图1:各基本数据类型信息
在Java的8中基本数据类型中,出除了boolean不能与其他类型相互转换外,其他类型间可以相互转换。这几种数值类型之间的转换关系满足如图2的条件。其中当数据沿着箭头的方向进行转换时,不需要额外进行处理(如int转换为long),而逆着箭头进行转换时则需要进行强制类型转换,且有可能会损失数据精度(如将float转换为int)。这里需要注意的是,这里大部分箭头都是从存储长度短的数据类型指向存储长度长的数据类型,这很容易理解。但是long的长度是64位,float的长度是32位,但是箭头确实从long指向float。这是因为float虽然占用字节数比较少,但是由于其采用的是尾数+指数的方式来表示的,因此反而比long数据类型的范围更大(查看图1也可以发现),因此数据从long转向float不会损失精度。
图2:各数据类型间的转换
基本数据类型的声明不需要多说,在初始化数据时,整型数据默认为int类型,浮点型数据默认为double类型。如果要定义long类型数据需要在数据后加L,否则会编译错误;同理定义float数据时需要加F。如图3所示:
图3:long和float数据类型的定义与赋值
运算符
Java中的运算符包括算术运算符,位运算符,赋值运算符,比较运算符,逻辑运算符和三目运算符。
算数运算符包括+、-、*、/、%、++(自加)、--(自减)。其中,++和--操作属于一目运算符,它们只能对一个操作书进行运算,且可以放在操作数的前面和后面。两者差别在于当自加(自减)放在操作数前面的时候,先对操作数进行加一(减一)操作,然后进行表达式的运算;放在操作数后面时,先进行表达式运算,然后对操作数进行加一(减一)操作。
位运算符对整型数的二进制的每一位进行操作,包括以下七种:
& | 按位与,左右都为1时返回1,其余为0 |
| | 按位或,左右都为0时返回0,其余为1 |
~ | 非,0结果为1,1的结果为0 |
^ | 异或,左右相同时为0,不同时为1 |
<< | 左移运算 |
>> | 右移运算 |
>>> | 无符号右移运算 |
赋值运算符的作用是给变量赋值,Java中使用=进行赋值操作。其次,赋值操作符还可以和算出操作符和位运算符一起使用。例如 “+=”操作, x += 3 等同于 x = x + 3。扩展运算符和原表达式的结果是一样的,但是能够避免运算时类型转换的错误,如图4所示:
图4:图片来自《疯狂Java讲义》
比较运算符只返回true和false,表示比较式成立和不成立,包括==、>、>=、<、<=五种。
逻辑运算符对布尔类型的变量进行运算,返回结果也为布尔类型。包括以下几种:
&& | 短路与,左右均为true时结果为true,否则为false。当左侧为false时,不判断右侧结果 |
& | 不短路与,作用于&&相同,但不进行短路 |
|| | 短路或,左右均为false时为false,否则为true。当左侧为true时,不判断右侧结果 |
| | 不短路或,作用于||相同,但不进行短路 |
! | 非,操作数为true返回false,操作数为false返回true |
^ | 异或,两侧操作数相同为false,不同为true |
三目运算符是“?:”,先计算一个逻辑表达式的值,根据值得不同返回不同的值。c = a > b ? 0 : 1表示,当a > b是c为0,否则为0。
变量与常量
变量指程序运行中可以改变的值,常量值程序运行中不能改变的值。Java中定义常量使用final进行修饰,final除了可以修饰常量以外,还可以用于修饰方法和类。
使用final修饰一个引用变量时,改变量所指向的对象不可以被改变,但是变量内部的其他变量可以修改;
使用final修饰一个方法时,该方法不可以被覆盖;
使用final修饰一个类时,该类不可以被继承。
数组
Java数组的定义方式如下:
type[] arrName = new type[size];
type arrName[] = new type[size];
两种定义方式没有差别,type表示数组中元素的类型,可以是基本类型或引用类型,arrName是数组的名字,new type[size]为数组分配了长度为size的空间长度,元素的默认值与定义的type的默认值相同。
Java数组的初始化有两种方式:
public void arrayTest() {
//静态初始化,定义数组时就分配空间并赋值
int[] arr1 = {1,2,3}; //动态初始化
int[] arr2 = new int[3];
arr2[0] = 1;
arr2[1] = 2;
arr2[2] = 3;
}
二维数组的定义与一维数组类似,且并不要求每一维的大小相同
public void arrayTest() {
int[][] arr1 = {{1,2},{3,4},{5,6,7}}; int[][] arr2 = new int[3][3];
arr2[0][0] = 1;
arr2[1][2] = 2;
arr2[2][2] = 3; }
Java中有Arrays类,其中加入了一些对数组常用的操作,例如Arrays.sort(), Arrays.toString()等
Arrays.sort(arr1);//数组排序
System.out.println(Arrays.toString(arr1));//一维数组输出
System.out.println(Arrays.deepToString(arr2));//多维数组输出
参考文献
[1].疯狂Java讲义(第三版)
[2].Java编程思想 第四版
Java课堂笔记(一):Java基础的更多相关文章
- Java课堂笔记(零):内容索引
回想自己学习和使用Java的时间也是很长了.本科期间课堂上浅尝辄止地学习了点皮毛,后来也是搁置不用,未曾深入研究.研究生期间因为项目和实习的原因,基本算是重新拾起Java这门语言,并且接触到了Spri ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- Java学习笔记:语言基础
Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...
- 【转载】Java系列笔记(1) - Java 类加载与初始化
Java系列笔记(1) - Java 类加载与初始化 原文地址:http://www.cnblogs.com/zhguang/p/3154584.html 目录 类加载器 动态加载 链接 初始化 示例 ...
- Java系列笔记(2) - Java RTTI和反射机制
目录 前言 传统的RTTI 反射 反射的实现方式 反射的性能 反射与设计模式 前言 并不是所有的Class都能在编译时明确,因此在某些情况下需要在运行时再发现和确定类型信息(比如:基于构建编程,),这 ...
- 【转载】Java系列笔记(3) - Java 内存区域和GC机制
Java系列笔记(3) - Java 内存区域和GC机制 转载:原文地址http://www.cnblogs.com/zhguang/p/3257367.html 目录 Java垃圾回收概况 Java ...
- 线程(java课堂笔记)
1.两种方式的差异 2.线程的生命周期 3.线程控制(线程的方法) 4.线程同步 5.线程同步锁 一. 两种方式的差异 A extends Thread :简单 不能再继承其他类了(Java单继承)同 ...
- 艾编程coding老师课堂笔记:java设计模式与并发编程笔记
设计模式概念 1.1 什么是设计模式 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性. ...
- 【java学习笔记】反射基础
一.反射 反射就是在剖析一个类,了解这个类的构造,创建这个类对应的对象. Class 代表字节码的类,代表类的类 Field 代表属性的类 Method 代表方法的类 Constructor 代表构造 ...
- Java精选笔记_Java编程基础
Java的基本语法 Java代码的基本格式 修饰符 class 类名 { 程序代码 } 一个Java源文件只定义一个类,不同的类使用不同的源文件定义:将每个源文件中单独定义的类都定义成public ...
随机推荐
- Python简单爬虫获取岗位招聘人数
#encoding=utf-8 import selenium import selenium.webdriver import re import time # pip install seleni ...
- mysql-视图、触发器、事务、存储过程、流程控制
目录 视图 触发器 事务 存储过程 流程控制 一.视图 视图是由查询结果构成的一张虚拟表,和真实的表一样,带有名称的列和行数据 强调:视图是永久存储的,但是视图存储的不是数据,只是一条sql语句 视图 ...
- Lua模式匹配
Lua并不使用POSIX规范的正则表达式[4](也写作regexp)来进行模式匹配.主要的原因出于程序大小方面的考虑:实现一个典型的符合POSIX标准的regexp大概需要4000行代码,这比整个Lu ...
- Vue.js学习笔记(代码)
##v-cloak v-text v-html v-bind v-on的使用 <!DOCTYPE html> <html> <head> < ...
- flex布局学习
教程来自阮一峰的flex布局教程实例篇 容器五大属性: flex-direction:容器内项目的排列方向 (1)row:横向从左往右排列(默认) (2)row-reverse:横向从右往左排列 (3 ...
- uni-app 引入本地iconfont的正确姿势以及阿里图标引入
1.引入本地iconfont iconfont文件里面包含 iconfont.ttf.iconfont.css, 将 iconfont.tt64文件转位 base64.推荐转换工具地址:https:/ ...
- 关联管理器(RelatedManager)
一.class RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器.它存在于下面两种情况: 1.一对多 ForeignKey关系的“另一边” ...
- mycat+mysql集群:实现读写分离,分库分表
1.mycat文档:https://github.com/MyCATApache/Mycat-doc 官方网站:http://www.mycat.org.cn/ 2.mycat的优点: 配 ...
- 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)
需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...
- 16 道嵌入式C语言面试题
1. 用预处理指令#define 声明一个常数,用以表明 1 年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到 ...