一、Java数据类型
1、byte 字节型
1byte = 8bit 表示数范围:-2^7~2^7-1(-128~127);
2、short 短整型
2 byte = 16bit 表示数范围:-2^15~2^15-1(-32788~32787);
3、int 整型
4byte =32bit 表示数范围:-2^31~2^31-1(-2147483648~2147483647);
4、long 长整型
8byte = 64 bit 表示数范围:-2^63~2^63-1
5、char 字符型
2byte =16bit 表示数范围:0~2^16(0~65535)
既是字符,又是数字;使用特定字符编码,表示不同的字符;表示方式如下:
char c1 ='A'; c1 ='B'; c1 ='@'; c1 ='中‘;
6、字符编码:
ASCII码 美国 1byte中7bit 表示数范围:0~127
十进制 48 49 65 66 97 98
十六进制 ox30 ox31 ox41 ox42 ox61 ox62
字符 ‘0’ '1' ‘A’ ‘B’ ‘a’ 'b'
ISO8859-1(latin-1) 1byte中8bit 表示数范围:0~256
GBK编码 2byte 16bit
UTF-8编码是Unicode编码的一种,目前项目中用得多。英文 1byte存储一个字符;中午 3byte存储一个字符。
Java中的char使用Unicode编码,2byte存储,65536种数字对应不同的字符。全球化支持大多是国家的字符。
7、char类型写法:2byte =16bit
char c1 =‘A’;
char c2 ='\u0041’;
Unicode表达法:‘\u四位十六进制’。
技巧:获取中文Unicode jdk\bin,jdk提供了native2ascii。exe
步骤:
1)在d:\新建1.txt——打开编辑——中国——保存;
2)d:\>native2ascii 1.txt 2.txt,生成2.txt文件;
3)打开d:\的2.txt得到编码。
8、区分字符和字符串
char c1 = ‘a’; 只能写一个字符 ,基本类型;
String s1 =“abc”;任意写多个字符,引用类型。
9、float 单精度浮点型,有精度误差,二进制数无法精确表示0.1;
4byte = 32bit,能够表示2.0E30,科学计数法(2.0*10^30);
底层存储:高3个字节保存数据,底1个字节保存位权;
00000000 00000000 00000010 00011110
10、double双精度浮点型,有精度误差,二进制数无法精确表示0.1;
8byte =64bit
底层存储:高6个字节保存数据,底2个字节保存位权;
11、boolean布尔型,最多1byte中的1bit;Java:只有两个字面值true、false。
用途:表示两种状态,常用于条件判断;
boolean flag = true;//表示好天气
if(flag){
打印出去玩;
}else{
打印继续学习;
}
练习:求出9的99次方,得到精确的结果。
基本类型:int、long、double;引用类型:String、Scanner、System等;
使用java.math.BigInteger类,大整数类;内存有多大,就能表示多大。
12、引用数据类型(主要关注底层存储结构)又称为复杂类型、对象类型
底层存储:引用变量 —>内存对象
按照表现形式分5种:
类class、接口interfac、数组String[]/int[]、枚举、标注
13、计算机主要硬件设备:
磁盘(程序) 内存(进程) CPU(指令)
JVM内存的三大区域:
1)Stack栈区:存放局部变量(临时变量)—定义在方法中的变量;
栈是一种先进后出的数据结构。FILO(First In,Last Out)
2)Heap堆区:存放对象
3)Code方法区:存放类的信息、静态资源
以class为例,说明引用类型的结构。
(1)JDK中已定义的引用类型class
java.lang.String 类 字符串类
java.lang.System类 系统类
java.lang.Integer类 int包装类
java.lang.Long类 long包装类
java.until.Scanner类 扫描器类
java.math.BigInteger类 大整数类
(2)自定义引用类型calss
类是对象的一种抽象、模板、蓝图 水果 动物
对象是类的具体实例(具体化) 某个苹果 具体个体
练习:
设计一个学生类,并表示成一些对象
基本思路:需要表示学生数据,找学生类,创建对象,赋予属性值,使用方法功能;
(1)定义出一个类,类名Student
package day04;
public class Studeng{//类体
//有什么?数据抽象、属性
String name;
int age;
char hobby;
//会什么?功能抽象、方法
//学习 study,参数course表示课程的名称
public void study (String course){
System.out.println(name+"学习"+course);
}
}
(2)使用Student类创建对象,调用方法;
psckage day04;
public class TestStudent{
public static void main(String[] args){
Student stu1 = new Student();
stu1.name = "tom";
stu1.age = 29;
stu1.study("JavaSE");//调用方法
}
}
15、void无返回值类型
只能用在方法返回值类型,表示无需返回结果
16、数据类型的转换
1)自动类型转换
(1)常数在表数范围内能够自动转型
byte b1 = 123; //int->byte [-128,127];
char c1 = 65; //int->char [0,65535];
char c2 = 'A' + 1;//int->char;
(2)范围小的自动向范围大的转型
byte->short(2)->int(4)->long(8)->float(4)->double(8)
char(2)
int n1 ='A'; //char->int 65
double d1 =123; //int->double
double d2 = 123.5 +5; //double + int,自动类型提升为double(就大);
(3)引用类型子类能够自动转化为父类
java.lang.Object类,是所有类的父类;
Student stu1 =new Student();
Object obj = stu1; //Student ->Object
(4)基本类型可以和包装类型之间互相转换,Java为8种基本类型提供了对应的包装类。
原因:Java什么都是对象,基本类型也想变成对象?
包装类都在Java.jang包下:几乎都是首字母大写
基本类型:byte short int long char float double boolean
包装类: Byte Short Integer Long Chatcter Float Double Boolean
int n1 = 123;
Integer in1 = n1; //int ->Integer 自动封箱
int n2 = in1; //Integer ->int 自动拆箱
2)强制类型转换
除了自动转型外,都使用强制转型;
语法:(数据类型)数据、变量、表达式、方法调用。。。
规则:保留低位字节,舍去高位字节。
128的二进制补码:32位:00000000 00000000 00000000 10000000
byte:8位:10000000
byte n1 = (byte)128; -128
byte b1 = (byte)128;
二、运算符和表达式
运算符:operator + - * / =
表达式:expression 1+2 a=1;
将数据使用运算符进行合理连接,形成表达式。实现实际业务操作的表达。
运算符(学习目标:先了解功能,后续不断应用)
赋值运算符Assignment operators
= 、*=、/=、%=、 += 、-=、《=、》=、 >>>= 、&=、^=、|=、
比较运算符:>、>=、<、<=、instanceo
判断是否相等运算符:==、!=
算术运算符:+、-、*、/、%(取余数)
移位运算符:>>、<<、>>>
位运算:&、|、^、~
逻辑运算符:&&与、||或、&与 、|或
条件运算符:?:(三目运算符_?_:_)
其他运算符:++、--、(<data-type>
优先级:a+b*c、(a+b)*c;技巧:使用()可以提高优先级
结合律:相同优先级考虑
a+b-c 一般从左->右
从上往下,优先级递减:
1、
():提升优先级和提高可读性——(a+b)/(c-d)
[]:取数组小标——a[0]、a[1]...
. : 取成员运算符 成员(属性、方法),可以理解为stu1的age——stu1.age+1 stu1.study("JabaSE")
++:自增1运算符——
int a =1;
//前++,先自加1,再取值 a = a+1; 再取a
System.out.println(++a); //2
System.out.println(a); //2
//后++,先取值,再自加1——先取a打印,再a = a+1;
System.out.println(a++); //2
System.out.println(a); //3
--:自减1运算符
&:按位与、逻辑与;
^:按位异或;”同0异1“;
|:按位或;”有1则1,全0则0“;
&&:逻辑与(短路与);
条件1 && 条件2
如果条件1为true,还需判断条件2
如果条件2为true,结果为true
如果条件2为false,结果为false
如果条件1为false,无需判断条件2,结果为false
||:逻辑或(短路或 );
条件1 || 条件2
如果条件1为true,还需判断条件2
如果条件2为true,结果为true
如果条件2为false,结果为false
如果条件1为true,无需判断条件2,结果为true
用途:具体问题具体分析
&&:能够简化操作,提高效率(性能)
&:当两个条件都需要判断是使用(条件兼顾)
<boolean_axpr>?<expr1>:<expr2>:条件运算符:(三目运算符)
条件表达式?条件为真的结果:条件为假的结果
写一个程序,求出a和b的最大值
int a = 3;
int b = 5;
int max = a > b ? a : b;
打印max 5
赋值运算符:特点优先级最低
=: *=: /=: %=: +=: -=: <<=: >>=: >>>=: &=: ^=: |=:
double d1 = 1+2/(a * c - b) + 100;
int a = 5;
a *= 6; //近似等价于 a = a *6;
byte b1 =1;
byte b2 =2;
byte b3 =b1 + b2;//编译无法通过,提升为int计算,需要强制类型转换;
b1 += b2; //可以,近似b1 = b1 + b2 不会提升为int。
三、Java方法
3W1H:
What?是什么?核心概念——> Why?为什么使用,好处——> Where?应用领域——> How?如何应用?程序实践
1、含义:
Java的方法method,在其它语言中称为函数function。方法表示一段固定的代码,表示固定的业务逻辑;便于反复使用,易于维护。
数学的函数(function):y = f(x) = 2 * x + 1;
可以提高软件::可复用性、易维护性。
2、方法的定义和使用
(1)方法的定义(设计)
方法三要素:方法名、参数表、返回值类型;
方法只能在类体中定义,并且不能嵌套定义,方法是并列在类提中的。
具备方法体:表示方法业务代码
1)方法的声明(签名)三要素:
public static int add(int a, int b)
2)方法的实现(方法体){}:
public static int add(int a, int b){
return a + b;
}
(2)方法的使用(调用call或invoke)
原则:从哪里调用,就从哪里返回
package day05;
public class TestAdd{
public static void main(String[] args){
int a = 3;
int b = 5;
//int c = a + b;
int c = add(a,b); //方法的调用。实际参数
int d = add(7,8);
system.out.println("C=" + c); //8;
}
public static int add(int a ,int b){ //形式参数,临时参数,是实际参数的副本(拷贝)用完即释放
return a + b;
}
1、Stack区:局部变量分配空间
max
b=5
a=3
2、将实参a、b拷贝给形参a、b,比较形参;
b=5
a=3
max
b=5
a=3
3、释放形参后,赋值给max=5;
max
b
a
4、释放所有空间