Java的运行机制:
首先,利用文本编译器编写Java源程序(.Java)
然后,利用编译器将源程序编译为字节码文件(.Class)
最后,利用虚拟机进行解释运行。
文件打开路径,cd.. = 进入父目录,cd + 目录 = 进入此目录,dir = 查看目录下文件,cls = 清屏,上下键 = 切换之前输入的命令。
标识符的使用规范:
表示类名的标识符:每个单词首字母大写
表示方法和变量的标识符:第一个单词小写,从第二个单词开始首字母大写。
数据类型:
基本数据类型:数值型,字符型,布尔型。
数值型:整数(short,int,long,byte),浮点数(float,double)
byte 1字节 范围 -2^7 -- 2^7-1(-128--127)(一位字节有八个bit,每个位有俩状态,一个字节有256个状态)
short 2字节 范围 -32768--32767
int 4字节 范围 -2^31--2^31-1
long 8字节 -2^63--2^63-1
自动转换:
范围小的数据会自动转为范围大的数据
无数据丢失的数据转换:
byte 转为 short 转为 int 转为 long 或者 double,float 转为 double,char 转为 int
int 转 float ,long 转 float ,long 转 double,会有精度的损失。
整形常量直接赋值给byte,short,char等类型时,只要不超过表数范围,可以自动转换。
方法的定义:
1.方法的定义以及调用:
方法是可以完成特定功能的代码片段
声明格式:[多个修饰符] 返回值类型 方法名(形式参数列表){方法内的多个java语句}
public static int add(int x,int y){ return x + y; }
2.方法的重载:
方法的重载是指一个类中可以定义多个方法名相同,但是参数不同的方法。调用时会根据不同的参数自动匹配对应的方法。
方法名相同,但是方法的内容不同。
构成方法重载的条件:1.不同的含义,形参的类型,形参的个数,以及形参的顺序不同
2.只有返回值不同不能构成方法的重载。
3.只有形参的名称不同,不够构成重载。
public static int add(int x,int y) { return x + y; } public static int add(float x,int y) { return x + y; } public static void add(int x,int y){ //不能构成重载 } public int a(int y){} public int a(int n){}//只有形参名称不同不能重载
面向对象:
类的定义:
类包含三个常见成员:属性(静态的特征、数据)、方法(动态的行为(对数据的操作))、构造器(初始化对象)
对象就是对类的实例化
public class student{ int data; String name; public void study(){ System.out.println("正在学习"); } public student() { } }
构造方法:
构造方法用于创建对象时的初始化 [修饰符] 类名(形参列表){……}
1.构造器通过new关键字调用
2.构造器虽然有返回值,但是不能定义返回值的类型(返回值的类型一定为本类),不能再构造器里使用return返回值
3.如果我们没有定义构造器,编译器会自动定义一个无参构造器。如果已定义则不会自动添加无参构造。
4.构造器名称必须与类名保持一致。
public class student{ String name; int studentNum; public student() { } public student (String name,int x) { this.name = name; this.studentNum = y;//构造器 } public static void main(String[] args){ student x = new student(); stident y = new student("zhangsan",52); } }
创建对象的内容为:为对象分配空间,并将对象成员变量初始化为0或者空。执行相关属性值的显示初始化,执行构造方法,初始化对象,返回对象的地址值给相关的变量。
栈和堆以及方法区:
栈:栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)、栈是由系统自动分配,速度快,栈是一个连续的内存空间。JVM为每个线程都创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)、栈属于线程私有不能实现线程间的共享。
堆:堆用于存储创建好的对象和数组(数组也是对象)、堆是一个不连续的内存空间,分配灵活,速度慢。JVM只有一个堆,被所有线程所共享。
方法区:方法区是JAVA虚拟机规范,可以有不同的实现。方法区实际也是堆,只用于存储类、常量的相关信息。用来存放程序中永远是不变或唯一的内容。JVM只有一个方法区,被所有线程所共享。
this 、static:
this指当前正在创建的对象,本质就是当前正在创建对象的地址
在普通方法中,this总是指向调用该方法的对象
在构造方法中,this总是指向正要初始化的对象
public class student{ int id; String name; String psw; public student(int id,String name,String psw){ this.id = id; this.name = name; this.psw = psw; }//在构造器中,this总是指向正在初始化的对象 }
static声明的变量为静态成员变量,类变量。
属于类,只有一份,在类被载入时被显式初始化。一般用类名.类属性方法来调用。在static方法中不可以直接访问非static成员。static修饰的属性和方法,从属于类。普通属性从属于对象。
public class stat{ int x; static String name = "zhangsan"; static{ name = "zks"; } public static void printfname() {//静态方法中不可以调用非静态量 System.out.printfln(name);//静态调用,不可以用打印 x; } }
静态方法可以不用实例化对象就可以使用
静态初始化块,构造方法用于对象的初始化。静态初始化块应用于类的初始化操作,可以初始化static属性,在静态初始化块中不能直接访问非static成员。
package、import:
package位于类的第一个非注释性语句,包中有一些常见的类,以及常用的类。package在java中的作用类似于“操作系统中文件夹的作用”。主要解决两个问题:多个类的管理、类的重名问题。
java中常用的包 | 包的主要类 |
---|---|
java.lang | 包含一些Java语言的核心类,String、Math、Integer、System和Thread,提供常用功能。 |
java.awt | 包含了构成抽象窗口工具集的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。 |
java.net | 包含执行与网络相关操作的类。 |
java.io | 包含能提供多种输入、输出功能的类。 |
java.util | 包含一些实用的工具类,如定义系统特性、使用与日期相关的函数。 |
import ,如果我们需要使用其他包的类,需要使用import导入,从而可以在本类中直接通过类名来调用,否则就需要书写类的完整包名和类名。java会默认导入Java.lang包下的所有类,因此这些类我们可以直接使用。如果导入两个同名的类,只能使用包名加类名来显示调用相关类。
import java.util.*//表示调用所有的包,会降低编译速度,但是不会影响运行速度。
静态导入(import static):作用是用于导入指定类的静态属性和静态方法,可以直接使用静态属性和静态方法。
继承、方法的重写:
方法的重写,子类重写父类的方法。在继承父类的方法后,父类的方法不一定会适用于子类。这个时候子类就需要重写父类的方法。
子类可能会与父类的行为不一致,需要重写父类的方法。
public class person{ public void printf(){ System.out.println("人需要去上班"); } } public class student extends person{ publivc void printf(){ System.out.println("学生需要去上学"); } }
在继承父类后子类就可以使用父类的变量,和父类的方法。
public class person{ public void put(){ System.out.println("人需要休息"); } } public class student extends person{ } public static void main(String[] args){ student x = new student(); x.printf(); }
instanceof 可以判断对象是否为所用类的实例化对象。
System.out.println(x instanceof student);
final 修饰类,变量,方法:final修饰变量,变量为常量,final修饰方法,方法不可以被重写,final修饰类,类不可以被继承。final修饰父类的方法时,父类的方法不可以被重写,但是可以被重载。