Java基础
所有的Java 程序由public static void main(String []args)
方法开始执行。 Java因强制要求类名(唯一的public类)和文件名统一
变量
三个元素描述变量:变量类型 、变量名 以及 变量值 。
Copy String love = "hei,girl" ;
变量类型 变量名 变量值
数据类型
Java 语言是一种强类型 语言。Java 中存储的数据都是有类型的,而且必须在编译时就确定其类型。
9,223,372,036,854,775,807(2^63 -1)
-9,223,372,036,854,775,808(-2^63)
long 类型的数据一定要在数值后面加上 L,否则将作为整型解析
基本数据类型变量存的是数据本身,而引用类型变量存的是保存数据的空间地址。
在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
Copy 低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
自动类型转换
强制类型转换
强制类型转换可能会造成数据的丢失。
Copy // 语法:
// (数据类型)数值
doubel num = 23.43 ;
int num1 = ( int )num;
System . out . println (num1);
//23
常量
常量值被设定后,在程序运行过程中不允许改变。
Copy // 语法
// final name=value
final String NUM = 33 ;
final double PI = 3.14 ;
数组
定义数组变量
Copy <类型>[] <名字>=new <类型>[元素个数]
Copy int [] arr =new int [ 100 ];
double [] arr =new double [ 10 ];
// 或者
int [] ia = { 1 , 23 , 4 , 5 , 90 , 6 , 7 , 8 , 33 };
直接初始化数据
Copy int [] arr = { 1 , 2 , 3 , 4 , 5 }
对象
包裹类型
每个基础类型都有对应的包裹类型。
可以用包裹类型定义变量,也可以做一些特殊的操作。
Copy //定义遍历
int i = 10 ;
Integer k = 10 ;
k = i;
Character . isDigit ( '1' )
//true
Integer . MAX_VALUE
//2147483647
new创建
使用new
创建一个新的对象,需要三步:
初始化: 使用new创建对象时,会调用构造方法初始化对象。
Copy public class Puppy {
public Puppy ( String name){
//这个构造器仅有一个参数:name
System . out . println ( "小狗的名字是 : " + name );
}
public static void main ( String []args){
// 下面的语句将创建一个Puppy对象
Puppy myPuppy = new Puppy( "tommy" ) ;
}
}
构造函数
如果有一个成员函数的名字和类的名字完全相同,则创建这个类的每一个对象的时候都会自动调用这个函数 --> 构造函数。
构造函数的名称必须与类同名,一个类可以有多个构造函数。
Copy package vendingMachine ;
public class VendingMachine {
int price = 80 ;
void showPrompt () {
System . out . println ( "welcome" );
}
// 会首先执行
VendingMachine ( int price){
this . price = price;
}
public static void main ( String [] args) {
// 会执行有相同参数的构造函数
VendingMachine vm =new VendingMachine( 100 ) ;
// 执行这个类的showPrompt方法
vm . showPrompt ();
}
}
访问属性
private
public
Copy //任何人都可以用这个类定义变量,必须与这个文件名一样
//一个编译单元只有一个public class
public class Clock {
// 限制非本类的对象访问本类对象的private属性
private Display minute =new Display( 60 ) ;
public void start (){
minute . increase ();
// 。。。
}
public static void main ( String [] args) {
Clock clock =new Clock() ;
clock . start ();
}
}
关键字
标识符规则
标识符可以由字母、数字、下划线( _ )、美元符( $ )组成,但不能包含 @、%、空格等其它特殊字符,不能以数字开头。
标识符不能是 Java 关键字和保留字( Java 预留的关键字,以后的升级版本中有可能作为关键字),但可以包含关键字和保留字
运算符
静态变量
如果希望一个类的所有对象共享一个成员,可使用static
修饰。
Copy public class HelloWorld {
// 定义静态变量,
static String country = "China" ;
public static void main (String[] args) {
// 访问静态变量,
System . out .println ( HelloWorld .country);
}
}
定义公有静态变量
Copy public static int num = 10 ;
static
修饰方法,也称静态方法或者类方法。
1.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。
Copy public class HelloWorld {
String name = "hei,boy" ;
static String hobby = "running" ;
public static void print (){
//此行报错,要访问非静态变量,可以通过创建类对象。
//HelloWorld hello = new HelloWorld();
System . out . println (name);
System . out . println (hobby);
}
}
2.在普通成员方法中,则可以直接访问同类的非静态变量和静态变量。
Copy String name = "hei,boy" ;
static String hobby = "running" ;
public void show() {
System . out . println (name);
System . out . println (hobby);
}
3.静态方法中能直接调用静态方法,但不能直接调用非静态方法,需要通过对象来访问非静态方法。
Copy public void show() {
System . out . println ( "welcome" );
}
public static void print() {
System . out . println ( "欢迎" ):
}
public static void main( String [] args) {
//通过对象调用
HelloWorld hello = new HelloWorld() ;
hello . show ();
// 静态方法直接调用
print() ;
}
初始化
静态初始化块只在类加载时最先被执行,且只会执行一次。
Copy public class MainTwo {
String name; // 声明变量name
String sex; // 声明变量sex
static int age; // 声明静态变量age
// 构造方法
public MainTwo () {
System . out . println ( "通过构造方法初始化name" );
name = "tom" ;
}
// 初始化块
{
System . out . println ( "通过初始化块初始化sex" );
sex = "男" ;
}
// 静态初始化块
static {
System . out . println ( "通过静态初始化块初始化age" );
age = 20 ;
}
public void show () {
System . out . println ( "姓名:" + name + ",性别:" + sex + ",年龄:" + age);
}
public static void main ( String [] args) {
// 创建对象
MainTwo hello = new MainTwo() ;
// 调用对象的show方法
hello . show ();
MainTwo hello02 = new MainTwo() ;
hello02 . show ();
}
}
//通过静态初始化块初始化age
// 通过初始化块初始化sex
// 通过构造方法初始化name
// 姓名:tom,性别:男,年龄:20
// --------
// 通过初始化块初始化sex
// 通过构造方法初始化name
// 姓名:tom,性别:男,年龄:20
初始化顺序:类初始化 >> 普通初始化 >> 执行方法