Java补漏(二)



第三章Java基本语法

3.1
标准输入输出流

3.1.1 标准输出输入流

System.in:标准输入流

System.out:标准输出流

System.err:标准错误输出流

3.1.2
标准输出流重定位

一般的输出会默认在命令行模式、终端机输出,可是在执行程序时使用将输出结果定位至指定的文件即可。

java HelloJava > HelloJavaResult.txt

3.2
基本数据类型

整形{short(2个字节)、int(4个字节)、long(8个字节)}

字节型{byte(-128~127,1个字节)}

浮点数{float(4个字节)、double(8个字节)}

字符{char(2个字节)}:Java的字符采用Unicode编码。

3.3
逻辑和位运算

3.3.1
逻辑运算符

且(&&)
或(||)
取反(!)

3.3.2
位运算符

Java中存在4种位运算符&、|、^,分别对应数字设计上的AND(且)、OR(或)、XOR(异或)

位运算执行表

&(AND)

0 & 0 = 0

0 & 1 = 0

1 & 0 = 0

1 & 1 = 1

|(OR)

0 | 0 = 0

0 | 1 = 1

1 | 0 = 1

1 | 1 = 1

^(XOR)

0 ^ 0 = 0

0 ^ 1 = 1

1 ^ 0 = 1

1 ^ 1 = 1

~(补码)

~运算的结果=原数取反-1,例如

~2 = -3

~0 = -1

~-2 = 1

Java中的位运算是逐位运算的

例如10010001 &01000001计算过程

10010001

&     
01000001

00000001

Java对基本数据类型进行位运算是先把该数据转换成二进制然后再逐位运算的。

例如11&12,11的二进制为00001011,12的二进制为00001100

00001011

&     
00001100

00001000

所以11&12=8

位运算反应了Java模运算的本质,加减乘除的本质也是通过位运算来实现的。

        

位运算如果用的恰当,可以提高程序的运算效率,例如利用位运算判断用户输入是否为整数。

package
语法入门;

import java.util.Scanner;

public
class OddDecider {

public
static
void main(String[] args){

Scanner input = new Scanner(System.in);

System.out.println("请输入数字:");

int number = input.nextInt();

System.out.println("是否为奇数?"+((number&1)!=0?"是":"否"));

}

}

奇数转换成二进制后末位数必定为1,偶数转换成二进制后末位数必定为0,1&奇数必定为1,1&偶数必定为0。

^运算可用于字符加密。

例如

package
语法入门;

public
class XorCode {

public
static
void main(String[] args) {

char ch =
‘A‘;

System.out.println("编码前:"
+ ch);

ch = (char) (ch ^ 9);

System.out.println("编码后:"
+ ch);

ch = (char) (ch ^ 9);

System.out.println("解码:"
+ ch);

}

}

运行结果:

图3.2.1 ^运算实现的加密

^运算可以加密原因是它可以通过一个整数来加密和解密,这个技术可用于密码转码保存。

在位运算上,Java还有左移(<<)和右移(>>)两个运算符。

左移运算会将所有的位向左移指定的位数,左边被挤出去的位会被丢弃,而右边会补上0;

右移运算会将所有的位向右移指定的位数,右边被挤出去的位会被丢弃,而左边会补上0;

上述的左移右移都是基于二进制的,如果没有非0位被挤出去的情况下,左移相当于乘上2的指定次方,右移相当于除上2的指定次方。

第四章认识对象

4.1
简单地使用对象

在理解对象前,你可以先试用一下,就像买衣服前你可以试穿一下。J2SE提供了很多的“试穿”的工具,这些工具在使用的时候就需要先变成你将要了解的对象。举个简单的例子,如果想写一个程序取得现在的系统时间,只要产生一个java.util.Date工具就可以了。

package
语法入门;

import java.util.Date;

public
class NowTime {

public
static
void main(String[] args){

Date date = new Date();

System.out.println(date.toString());

}

}

运行结果:

图4.1使用Date工具

4.2
打包(Wrap)基本数据类型

在Java中基本数据类型(如int、long、double、float、boolean等)并不是对象,它们只是纯粹的数据,除了数值本身的信息之外,基本数据类型都不带有其他的信息或可操作的方法。

        
在J2SE 5.0之前,如果想要让基本数据类型像对象一样操作,即让基本数据类型带有其他信息和可操作的方法,那么要使用Long、Integer、Double、Float、Boolean、Byte等类来打包基本数据类型。

例如

Int a = 10;

Integer wrappedA = new Integer(a);

a是一个基本数据类型,通过new Integer(a)方法的打包后wrapedA便是带有一些方法的对象,例如可以使用wrappedA.doubleValue()获取wappedA的双精度数值。

4.3
自动装箱(autoboxing)和拆箱(unboxing)

4.3.1 autoboxing

自动装箱和拆箱是为了简便化打包基本数据类型,例如将int包装为一个Integer对象:

Integer a = newInteger(10);

这种打包方式可以改为:

Integera = 10;

这种简化的打包方式便是autoboxing。

看到这里你会不会有这样的疑问:为什么可以不用构造方法创建一个对象?

这其实是编译器帮了你一把。在进行编译时,编译器再自动根据你写下的语句,判断是否进行自动装箱动作。

自动装箱运用的方法还可以如下:

int i = 10;

Integer integer = I;

也可以使用更一般化的java.lang.Number类来自动装箱。例如:

Number number = 3.14f;

3.14f会先被自动装箱为Float,然后指定给number。

4.3.2 unboxing

unboxing是autoboxing的逆过程,autoboxing是将基本数据转换成对象,但是转换而成的对象是无法直接执行基本数据类型的运算的,这时便需要拆箱,将对象重新转换成基本数据,例如:

Integer i = 1;

System.out.println(i+10);

System.out.println(i++);

上例中会显示20与10,编译器会自动进行自动装箱与拆箱,也就是10会先被装箱,然后在i+10时会先拆箱,进行加法运算

4.3.3
小心使用boxing

自动装箱与拆箱的功能事实上是编译器来帮你的忙,编译器在编译时期一句你所写的语法,决定是否进行装箱或拆箱动作。例如:

Integer i = 100;

相当于编译器自动为您作以下的语法编译:

Integer i = new Integer(100);

必须得注意这个语法,不然的话很可能会出错,比如:

Integer I = null;

Int j = I ;

这样的语法在编译时期是合理的,但是在运行时期会有错误,因为这种语法相当于:

Integer I =null;

Int j = i.intValue;

两个相同大小的基本数据装箱后的对象在进行比较运算时会拆箱,例如

public
class AutoBoxingDemo {

public
static
void main(String[]args){

Integer i1 =100;

Integer i2 =100;

if(i1 == i2)

System.out.println("i1
== i2");

else

System.out.println("i1
!= i2");

}

}

你认为结果是什么?

Java补漏(二),布布扣,bubuko.com

时间: 2024-08-07 18:32:41

Java补漏(二)的相关文章

Spark用Java实现二次排序的自定义key

本人在研究Spak,最近看了很多网上的对于SPARK用Java实现二次排序的方法,对于自定义key的做法 基本上都是实现Ordered<>接口,重写$greater.$greater$eq.$less.$less$eq.compare.compareTo方法,定义hashCode.equals····· 感觉好麻烦,其实我们自定义key只是用了里面的compareTo方法,其他的$greater.$greater$eq.$less.$less$eq.compare 不用做任何改动,hashCo

Java实现二维码技术探讨。

Java生成二维码方法有三种: 1: 使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip 这个是日本人写的,生成的是我们常见的方形的二维码 能够用中文 如:5677777ghjjjjj 2: 使用BarCode4j生成条形码和二维码 BarCode4j网址:http://sourceforge.net/

Java实验二实验报告:java面向对象程序设计

java实验二实验报告 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如“查网络”.“问

java 生成 二维码 和jquery 生成二维码

生成二维码 Java 生成二维码: 思路为拿到jar 包知道里面的方法使用 Step one : 在https://github.com/zxing中下载(点击网页中名为 zxing 的a标签,跳转到源码页面,点击release 查看所有发布的源码,下载zip压缩文件 Step two:  解压文件后打开文件夹,将core包和javase包 中的com包拷贝到一java项目src目录下.右键导出 jar file  得到一个二维码开发的jar包 Step three: 进行二维码制作 impor

JAVA笔记二

JAVA笔记二 常量:表示不可改变的值 变量:将不确定的数据进行存储也就是需要在内存中开辟一个空间 如何开辟内存空间? 就是通过明确的的数据类型 变量名称 数据来完成 Integer.toBinaryString(number); JAVA提供转换二进制的方法; number表示转换成二进制的数字 两个变量不通过第三个变量进行两个值得交换 1.int a=3,b=8; a=a+b; a=a-b; b=a-b; 此方法有局限性比如说a+b的大于2^32-1就会出现错误 我们可以通过异或运算来进行交

Java学习:二 基础

2014 - 5 - 22 上午 Java对大小写敏感. 点号(.)用于调用方法,Java的能用语法是: object.method(parameters); Java中的常量声明使用final关键字.且仅能赋值一次.习惯上,常量名大写. 可使用static final 定义一个类常量,以便在一个类中的多个方法中使用. 类常量定义在main方法外部,以便同一类其它方法可以使用.若使用public关键字,则其它类的方法也可以使用此常量. 字符串: Java中,允许使用+号拼接两个字符串. Java

Java进阶(二十五)Java连接mysql数据库(底层实现)

Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜索.特将之前使用的方法做一简单的总结.也能够在底层理解一下连接数据库的具体步骤. 实现 首先需要导入相关的jar包,我使用的为:mysql-connector-java-5.1.7-bin.jar. 下面来看一下我所使用的数据库连接方法类: MysqlUtil.java package cn.edu

菜鸟学Java(二十)——你知道long和Long有什么区别吗?

Java中数据类型分两种: 1.基本类型:long,int,byte,float,double2.对象类型:Long,Integer,Byte,Float,Double其它一切java提供的,或者你自己创建的类. 其中Long叫 long的包装类.Integer.Byte和Float也类似,一般包装类的名字首写是数值名的大写开头. 什么是包装类? 在java中有时候的运算必须是两个类对象之间进行的,不充许对象与数字之间进行运算.所以需要有一个对象,这个对象把数字进行了一下包装,这样这个对象就可以

Java补漏(一)

 第一章前言 在学长的建议下,为了弥补之前学Java漏下的或者不是很清楚的知识点,买了本蛮好的教科书-<Java学习笔记(JDK6)>,正式重新学习,为了记下一些让我恍然大悟的知识,写了本文档. 第二章Java入门 2.1 JVM的认识 说到底Java是一种计算机高级语言,一般高级语言如果需要在操作系统上运行,那么它必须编译成机器语言,比如C语言,它的编译过程就是从C语言到汇编语言到机器语言.而Java的神奇之处在于Java的编译没有直接变成机器语言,而是一种中间语言,那么中间语言要在机器