Java数据类型和运算符,java数据类型
Java开篇
第一章主要简单介绍了一下java
的基础知识
介绍
知道java
是一种可以跨平台面向对象的程序设计语言
组成
JRE=JVM+类库
JDK=JRE+工具类
Java
由四个方面组成:
体系
特点
Java虚拟机
垃圾回收机制
Java运行过程
JavaSE整理结构
项目开发命名规范
在eclipse
创建java
项目需要注意的命名规范
标识符的命名规范
注意:
在起名字时,
为了提高阅读性,
要尽量”
见名知意”
数据类型
Java
是一种强类型语言,
对于每一种数据都定义了明确的数据类型,
数据类型分类:
注意:
整数默认是int类型
浮点数默认是double类型
长整形后缀必须用L或l标记,建议使用L
单精度(float)数必须用F或f标记,建议使用F
-
引用数据类型(类,接口,数组)
数据类型的转换
默认数据类型转换
从小到大的转换
强制类型转换
大的数据类型转换为小的数据类型
格式:
目标数据类型
变量 = (
目标数据类型) (
被转换的数据)
Eg:int intNum = (int)num;
面试题:
byte b1=3,b2=5,b;
b =b1+b2;
b=3+5;
哪句是编译失败的,为什么失败???
答:b=b1+b2这行代码有问题,因为变量相加,会首先看类型,也就是说b=b1+b2的数据类型会提升为int类型,也就是说int类型的(b1+b2)赋值给byte类型的b,,强制类型转换错误,所以有问题.b=3+5.首先把结果计算出来,然后看是否在byte数值范围内,如果在其范围就不报错.
int charA ='0'+1;
//ASCII码:'a' 97 'A' 65 '0' 48
System.out.println(charA); // 49
System.out.println(‘a’+1); //98
System.out.println(‘a’+1+”Hello”); // 98Hello
成员变量
成员变量:
作为类的成员而存在,
直接存在于类中.
局部变量
局部变量:
作为方法或语句块的成员而存在,
主要存在于方法参数列表和方法定义中
面试题:
Java中成员变量与局部变量的区别?
块
static{
System.out.println("=====静态代码块=====");
}
{
System.out.println("========构造代码块==========");
}
public
static
void main(String[]
args) {
//实例化
StaticDemo demo =
new StaticDemo();
System.out.println("=========普通代码块========");
}
静态代码块优先于构造代码块执行
Java运算
算术运算
+, -, *, /, %,
++(
前置):
先运算后取值
++(
后置):
先取值后运算
--(
前置):
先运算后取值
--(
后置):
先取值后运行
Eg:
System.out.println("相加运算:"+(a+b));
//12
System.out.println("相减运算:"+(a-b));
//4
System.out.println("相乘运算:"+(a*b));
//32
System.out.println("相除运算:"+(a/b));
//2
System.out.println("取模运算:"+(a%b));
//0
/*
* ++(前置):先运算后取值
++(后置):先取值后运算
--(前置):先运算后取值
--(后置):先取值后运行
*/
//c=9 ,a=9
System.out.println("前置++运算:"+(c=++a)+"输出a的值:"+a);
//c=8, a=9
System.out.println("后置++运算:"+(c=a++)+"输出a的值:"+a);
//d=3, b=3
System.out.println("前置--运算:"+(d=--b)+"输出b的值:"+b);
//d=4, b=3
System.out.println("后置++运算:"+(d=b--)+"输出b的值:"+b);
注意:
如果对负数取模”%”,
可以把模数负号忽略不记Eg:5%-2=1,
但是如果被模数是负数则不可以忽略.
练习题:
从控制台输入一个4位数的整数,实现反转进行输出?
//从控制台输入一个4位数的整数,实现反转进行输出?
System.out.println("请输入一个四位数的整数:");
Scanner scanner =
new Scanner(System.in);
int
numSor =
scanner.nextInt();
//4321 ===>1234
/*
* 分析:
* int g = 12%10 = 2
//取模操作得到个位 ==>两位数得到个位上的数
* int
sg = 123%100 = 3
//取模操作得到个位 ==>三位数得到个位上的数
* int s = 12/10=1 //除法操作得到十位
* int
ss = 123/10%10 //十位
*
*/
int
g =
numSor%10;
int
s =
numSor/10%10;
int
b =
numSor/100%10;
int
q =
numSor/1000;
System.out.print(g+"
"+s+" "+b+"
"+q);
System.out.println(g*1000+s*100+b*10+q);
逻辑运算符
&&:
短路逻辑与
||:
段路逻辑或
!:
逻辑非
位运算符
<<:
左移
>>:
右移
>>>:
无符号右移
& :
逻辑与
|:
逻辑或
^:
逻辑异或
~:
取反
注意:
位运算符是直接二进制进行运算[
只是针对int
类型的数据有效]
Integer.toBinaryString(n); //将十进制转换为二进制
Eg:
public
static
void main(String[]
args) {
int
a = 3;
int
b = 2;
//1 ===>3/2=1
System.out.println("右移运算:"+(a>>1));
//12 ===>3*2*2=12
System.out.println("左移运算:"+(a<<b));
//1 ===>3/2=1
System.out.println("无符号右移运算:"+(a>>>1));
System.out.println("与运算:"+(6&3));
//2
System.out.println("或运算:"+(6|3));
//7
System.out.println("异或运算:"+(6^3));
//5
System.out.println("取反运算:"+(~b));
//-3
int
x=3;
int
y=4;
System.out.println("与运算:"+(3&4));
//0
System.out.println("或运算:"+(3|4));
//7
System.out.println("异或运算:"+(3^4));
//7
System.out.println("取反运算:"+(~3));
//-4
//3的二进制: 00000011
//左移:[3<<2]===>00001100 //
//右移:[3>>2]===>00000000 00000000 00000000
//右移:[-3>>2]==>11111111 11111111 11111111 -3/2=-1
//无符号位右移[3>>>2]===>0
// 4的二进制: 00000100
//&与运算规则:有0则0
//|或运算符规则:有1则1
//^异或运算规则:相同则0,异同则1
^[异或面试题]:
//^[异或]的特点:
//一个数据位异或两次,该数本身不变
System.out.println(5^6^5);
//6
System.out.println(5^6^6);
//5
//面试题:实现对两个整数进行交换
int
mun1=20;
int
mun2 = 30;
//第一种实现思路[开发过程中经常用到]:通过一个中间变量来交换
int
temp=0;
temp =mun1;
// ===>20
mun1=mun2;
// ===30
mun2=temp;
// ===>20
//第二种实现思路[用位异或实现]
mun1 =
mun1^mun2;
mun2 =
mun1^mun2;
//mun1^mum2^mun2 ===>mun1
mun1 =
mun1^mun2;
//mun1^mun2^mun1 ===>mun2
//第三种
num2=num1+num2;
num1=num2-num1;
num2=num2-num1;
//取反规则:数值(正数,负数)加1取反
//左移规则:m<<n:整数m表示的二进制数左移n位[3<<2],高位移出n为都舍弃,低位补0(此种情况会出现整数变负数)
//左移计算方式:把<<左边的数据乘以2的的移动次幂
System.out.println(3<<2);
//==>3*2*2
//右移规则:m>>n:整数m表示的二进制右移n位,m为正数,则高位全部补0,m为负数,则高位全部补1
//右移计算方式:把>>左边的数据除以2的的移动次幂
System.out.println(24>>2);
//==>24/2/2=6
System.out.println(24>>>2);
//==>24/2/2=6
}
练习题:
System.out.println(8>>1);
//4
System.out.println(8<<2);
//8*2*2=32
System.out.println(3+5>>1);
//4
System.out.println(3+(5>>1));
//3+5/2=5
比较运算符
==, !=, <, >, <=, >=
比较运算符返回的是boolean
类型的结果
注意:
三元运算符
格式:
A(条件表达式)?表达式1:表达式2
运算规则:
System.out.println((8>6)?”8大于6”:”8不大于6”);
用户点评