在Java阶段,基础的知识就是掌握好Java语言的简易规则,今天就先来介绍变量与数据类型及其运算符。
“变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;
public class Variable{
static int allClicks=0; // 类变量
String str="hello world"; // 实例变量
public static void method(int param1,int param2 //参数){
int i =0; // 局部变量
}
}
○ 局部变量声明在方法、构造方法或者语句块中;
○ 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成+ 后,变量将会被销毁;
○ 访问修饰符不能用于局部变量;
○ 局部变量只在声明它的方法、构造方法或者语句块中可见;
○ 局部变量是在栈上分配的。
○ 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
○ 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
○ 当一个对象被实例化之后,每个实例变量的值就跟着确定;
○ 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
○ 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
○ 实例变量可以声明在使用前或者使用后;
○ 访问修饰符可以修饰实例变量;
○ 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
○ 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
○ 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外。
○ 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
○ 静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。
○ 静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。
○ 静态变量在程序开始时创建,在程序结束时销毁。
○ 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。
○ 默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
○ 静态变量可以通过:ClassName.VariableName的方式访问。
○ 类变量被声明为public static final类型时,类变量名称一般建议使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。
○ 形参不能离开方法。形参只有在方法内才会发生作用,也只有在方法中使用,不会在方法外可见。而实参可以再程序的任何地方都使用。
○ 形参代表一个合集,具有不确定性,而形参代表一个独立事物,具有确定性(即使是为null)。也就是说,形参不能代表具体的对象,只能代表这些对象共同的属性(比如超类、各种其他自定义属性等等),而实参则是具体的对象(比如超类的实例)。
定义变量的两种方式
int a; //声明
int a = 100; //声明并赋值
1. 必须以字母(包括中文)、下划线、美元符$ 开头
2. 变量可以包括数字,但不能以数字开头
3. 除了“_”或“$”符号以外,变量名不能包含任何特殊字符
4. 不能使用Java中的关键字
5. 大小写敏感
1. 永远不要用美元符和下划线命名
2. 永远使用有意义的名字作为变量名包括缩写
3. 不要用中文以及拼音命名
4. 类名称 ——单个单词的首字母都大写。比如:HelloWorldApp
5. 方法名称 ——单个单词,除第一个单词以外,首字母大写。比如:helloWorldApp
6. 常量(不可修改)——每个单词都大写,用下划线分割。比如:final int COUNT_OF_COURSES =100
7. 类名称 和 变量名称 一般用名词;方法名称一般用动词
public class transition{
public static void main(String[] args){
//声明一个字符串
String name = "1234567";
//字符串转换数值性
byte num1 = Byte.parseByte(name);
short num2 = Short.parseShort(name);
int num3 = Integer.parseInt(name);
long num4 = Long.parseLong(name);
//字符串转换小数
float num5 = Float.parseFloat(name);
double num6 = Double.parseDouble(name);
//字符串转换字符
char num7 = naem.charAt(1);
//基本数据类型转换字符串
String name =String.valueOf(123);
String naem =123+"";
}
}
= += -= *= /= %=
&& || ! ? :
+ - * / %
> < >= <= == !=
++ -- ++i i++
~(按位取反) &(按位与) |(按位或) ^(按位异或)
<<(左移) >>(右移) >>>(无符号右移)
import java.util.Scanner; //引用接收数据类型的类包
public class date{
//程序执行入口
/**
*我们接收基本数据类型和引用数据类型
*/
public static void main(String[] args){
Scanner input=new Scanner(System.in); //创建接收数据的对象
//接收整型
byte num1 = input.nextByte(); //接收byte类型
short num2 = input.nextShort(); //接收short类型
int num3 = input.nextInt(); //接收int类型
long num4 = input.nextLong(); //接收long类型
//接收浮点型
float num4 = input.nextFloat(); //接收float类型
double num5 = input.nextDouble(); //接收double类型
//接收字符型
char num6 = input.next().charAt(0); //接收char类型
//接收布尔型
boolean num7 = input.nextBoolean(); //接收boolean类型
//接收字符串
String num8 = input.next(); //接收String类型
}
}
import java.util.Scanner; //引用接收数据类型的类包
public class date{
//程序执行入口
/**
*可以在整型类型中输入进制
*/
public static void main(String[] args){
Scanner input=new Scanner(System.in); //创建接收数据的对象
//接收整型
byte num1 = input.nextByte(2); //接收2进制byte类型
short num2 = input.nextShort(8); //接收8进制short类型
int num3 = input.nextInt(10); //接收10进制int类型
long num4 = input.nextLong(16); //接收16进制long类型
}
}
不同类型之前进行计算时,数据类型会往大的数据类型转换
强制类型转换往往是从宽大的类型转换为小的数据类型
public class type{
//程序执行入口
public static void main(String[] args){
int a = 10;
double b = 20.5;
double c = a +b;//低级转高级,自动转换
int d = (int) c;//高级转低级,强制转换
}
}