1.数据类型
数据类型分类
- 基本数据类型:整数、浮点数、字符、布尔
- 引用数据类型:类、数组、接口
基本数据类型
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|---|---|---|
字节型 | byte | 1个字节 | -128~127 |
短整型 | short | 2个字节 | -32768~32767 |
整型 | int(默认) | 4个字节 | -2的31次方~2的31次方-1 |
长整型 | long | 8个字节 | -2的63次方~2的63次方-1 |
单精度浮点数 | float | 4个字节 | 1.4013E-45~3.4028E+38 |
双精度浮点数 | double(默认) | 8个字节 | 4.9E-324~1.7977E+308 |
字符型 | char | 2个字节 | 0-65535 |
布尔类型 | boolean | 1个字节 | true,false |
定义变量
三要素:数据类型、变量名、数据值;
public class Variable {
public static void main(String[] args) {
// 格式: 数据类型 变量名 = 数据值;
byte b = 100;
System.out.println(b);
long l = 12345678900L;
System.out.println(l);
//定义单精度浮点型变量
float f = 5.5F;
System.out.println(f);
//定义双精度浮点型变量
double d = 8.5;
System.out.println(d);
}
}
2.数据类型转换
- 自动转换
- 将取值范围小的类型转换为取值范围更大的类型
- 转换规则:byte/short/char --> int --> long --> float --> double
public static void main(String[] args) {
int i = 1;
byte b = 2;
// byte x = b + i; // 报错
//int类型和byte类型运算,结果是int类型
int j = b + i;
System.out.println(j);
}
- 强制转换
- 将取值范围大的转换称取值范围小的类型
// 格式:type 变量名 = (type) 常量;
public static void main(String[] args) {
short s = 1;
s = s + 1; //编译失败
s = short(s + 1); //编译成功
/*
出现编译失败
s和1做运算的时候,1是int类型,s会被提升为int类型
s+1后的结果是int类型,将结果在赋值会short类型时发生错误
short内存2个字节,int类型4个字节
必须将int强制转成short才能完成赋值
*/
}
常见的问题
public static void main(String[] args){
byte b1=1;
byte b2=2;
// 常量的运算,不影响数据类型,相当于将3赋值b3,属于byte范围,编译正确
byte b3=1 + 2;
// 变量间的运算结果不确定,编译器默认会以int处理,但是int类型无法赋值给byte,编译报错
byte b4=b1 + b2;
System.out.println(b3);
System.out.println(b4);
}
3.运算符
算数运算符
包括常见的: + - * / % ++ - -
// 变量a自己加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2。
public static void main(String[] args) {
int a = 1;
int b = ++a;
ystem.out.println(a);//计算结果是2
System.out.println(b);//计算结果是2
}
// :变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a自己再加1。a的结果是2,b 的结果是1。
public static void main(String[] args) {
int a = 1;
int b = a++;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是1
}
// + 符号在遇到字符串的时候,表示连接、拼接的含义。
public static void main(String[] args){
System.out.println("5+5="+5+5);//输出5+5=55
}
赋值运算符
常见的:*= += -= = /= %=
public static void main(String[] args){
int i = 5;
i+=5;//计算方式 i=i+5 变量i先加5,再赋值变量i
System.out.println(i); //输出结果是10
}
比较运算符
常见的:== > < >= <= !=
// 比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值 true 或者 false 。
public static void main(String[] args) {
System.out.println(1==1);//true
System.out.println(1<2);//true
System.out.println(3>4);//false
System.out.println(3<=4);//true
System.out.println(3>=4);//false
System.out.println(3!=4);//true }
逻辑运算符
/*
&&: 与
||:或
!:非
*/
public static void main(String[] args) {
System.out.println(true && true);//true
System.out.println(true && false);//false
System.out.println(false && true);//false
System.out.println(false || false);//falase
System.out.println(false || true);//true
System.out.println(true || false);//true
System.out.println(!false);//true }
三元运算符
// 数据类型 变量名 = (条件判断) true结果:false结果
public static void main(String[] args) {
int i = (1==2 ? 100 : 200);
System.out.println(i);//200
int j = (3<=4 ? 500 : 600);
System.out.println(j);//500
}
4.函数的定义
/*
格式:
修饰符 返回值类型 方法名 (参数列表) {
code
return;
}
*/
// 练习:定义一个方法 并在main中调用
public static void main(String[] args) {
//调用定义的方法operator
operator();
}
//定义方法,方法中定义三元运算符
public static void operator() {
int i = 0;
i = (1==2 ? 100:200);
System.out.println(i);
int j = 0 ;
j = (3<=4 ? 500:600);
System.out.println(j);
}
- 定义函数的注意事项
- 方法必须定义在一个类中方法外
- 方法不能定义在另一个方法的里面
public class Demo {
public static void main(String[] args){
}
//正确写法,类中,main方法外面可以定义方法
public static void method(){
}
}
public class Demo {
public static void main(String[] args){
//错误写法,一个方法不能定义在另一方法内部
public static void method(){
}
}
}
5.修饰符
类修饰符
- 访问控制修饰符:公共类修饰符public
- 非访问控制修饰符:abstract 抽象类修饰符,最终类修饰符 final
- public:Java 语言中类的访问控制符只有 public 即公共的。每个 Java 程序的有且只有一个类是 public,它被称为主类 ,其他外部类无访问控制修饰符,具有包访问性。
注意:一个类的内部类可以被其他访问控制修饰符protected、default、private修饰,相当于类的成员。 - 抽象类修饰符 abstract :用 abstract 修饰符修饰的类,被称为抽象类。
- 最终类修饰符 final :当一个类不能被继承时可用修饰符 final修饰为最终类。被定义为 final 的类通常是一些有固定作用、用来完成某 种标准功能的类。
- 类缺省访问控制符:如果一个类没有访问控制符,说明它具有缺省的访问控制符特性。此时,这个类只能被同一个包中的类访问或引用。这一访问特性又称为包访问性。
- public:Java 语言中类的访问控制符只有 public 即公共的。每个 Java 程序的有且只有一个类是 public,它被称为主类 ,其他外部类无访问控制修饰符,具有包访问性。
方法修饰符
-
访问控制修饰符:公共访问控制符public、保护访问控制符protected、缺省默认default、私有访问控制符private
-
非访问控制修饰符:抽象方法控制符abstract 、静态方法控制符static 、最终方法控制符final 、本地方法控制符native 、同步方法控制符synchronized
- 抽象方法控制符 abstract :用修饰符 abstract 修饰的方法称为抽象方法。抽象方法仅有方法头,没有方法体和操作实现。
- 静态方法控制符 static :用修饰符 static 修饰的方法称为静态方法。静态方法是属于整个类的类方法;而不使用static 修饰、限定的方法是属于某个具体类对象的方法。 由于 static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理 属于整个类的成员变量,即 static 方法只能处理 static的域。
- 最终方法控制符 final :用修饰符 final修饰的方法称为最终方法。最终方法是功能和内部语句不能更改的方法,即最终方法不能重写覆盖。final固定了方法所具有的功能和操作,防止当前类的子类对父类关键方法的错误定义,保证了程序的安全性和正确性。
- private 修饰符限定为私有的方法,以及所有包含在 final 类 ( 最终类) 中的方法,都被认为是最终方法。
- 本地方法控制符 native :用修饰符 native 修饰的方法称为本地方法。为了提高程序的运行速度,需要用其它的高级语言书写程序的方法体,那么该方法可定义为本地方法用修饰符 native 来修饰。
- 同步方法控制符 synchronized :该修饰符主要用于多线程程序中的协调和同步。
变量修饰符
- 访问控制符:公共访问控制符public 、保护访问控制符protected 、缺省默认访问控制符default、私有访问控制符private
- 非访问控制符:静态域修饰符static 、最终域修饰符 final 、易失 ( 共享 ) 域修饰符volatile 、暂时性域修饰符transient
- 公共访问控制符 public :用 public 修饰的域称为公共域。由于 public 修饰符会降低运行的安全性和数据的封装性,所以一般应减少 public 域的使用。
- 私有访问控制符 private : 用 private 修饰的成员变量 ( 域 ) 只能被该类自身所访问,而不能被任何其它类 ( 包括子类 ) 所引用。
- 保护访问控制符 protected :用 protected 修饰的成员变量可以被三种类所引用:①该类自身;②同一个包中的其它类;③其它包中的子类。使用修饰符 protected 的主要作用是允许其它包中的子类来访问父类的特定属性。
- 缺省默认修饰符 :没有访问控制修饰符或用修饰符 default修饰的成员变量可以被该类本身或同一包中的其他类访问。
- 静态域修饰符 static :用 static修饰的成员变量仅属于类的变量,而不属于任何一个具体的对象,静态成员变量的值是保存在类的内存区域的公共存储单元,而不是保存在某一个对象的内存区间。该类的任一对象访问它时取到的都是相同的数据;该类的任一对象修改它时 , 也都是对同一个内存单元进行操作。
- 最终域修饰符 final :最终域修饰符 final 是用来定义常量的。一个类的域 ( 成员变量 ) 如果被修饰符 final 说明,则它的取值在程序的整个执行过程中都是不变的。
- 易失 ( 共享 ) 域修饰符 volatile :易失 ( 共享 ) 域修饰符 volatile是用来说明这个成员变量可能被几个线程所控制和修改。也就是说在程序运行过程中,这个成员变量有可能被其它的程序影响或改变它的取值。通常 volatile 用来修饰接受外部输入的域。
- 暂时性域修饰符 transient :暂时性域修饰符 transient 用来定义一个暂时性变量。其特点是:用修饰符transient 限定的暂时性变量,将指定 Java虚拟机认定该暂时性变量不属于永久状态,以实现不同对象的存档功能。否则,类中所有变量都是对象的永久状态的一部分,存储对象时必须同时保存这些变量。