1.数据类型:
八大基本数据类型:byte,short,int,long,boolean,char,float,double
引用数据类型
2.方法
[修饰符列表] [返回值类型] [方法名](形参列表){
函数体
}
public static void main(String[] args) {
//77L,56 实参
Test.sum(77L, 56);
}
//long x,long y 行参
public static void sum(long x, long y) {
System.out.println(x + y);
}
3.静态方法static
类名.xx()调用;
调用方法与被调用方法属于同一个类时,可以省略类名
public static void sum(long x, long y) {
System.out.println(x + y);
Test.doSome();
doSome();
}
public static void doSome() {
System.out.println("dosome");
}
静态方法调用与引用无关,无论引用是什么实际都是类调用
m2.seeMovie();
m2=null;
m2.seeMovie();
public class Movie {
public static void seeMovie() {
System.out.println("看电影");
}
}
static{xxx}静态代码块,静态代码块在类加载时执行,静态代码块可以存在多个,并至上而下一次执行,可以在类加载时做一些日志记录。
public class Movie {
static{
System.out.println("静态代码块1");
}
static{
System.out.println("静态代码块2");
}
static{
System.out.println("静态代码块3");
}
}
大多数“工具类”的方法都是静态方法,因为工具类的方法不受调用对象的影响。
4.jvm主要的内存空间
方法区内存
堆内存
栈内存
方法在调用的时候才会分配栈内存空间,每个方法占用栈区的一个栈位。
.class字节码文件在类加载的时候将方法代码片段放到了方法区内存,方法代码片段只有一份,可以被反复调用,jvm调用方法区代码片段的时候,需要分配独立的活动场所,在栈内存空间中,此时发生压栈动作,方法执行完后,分配的栈内存空间全部释放,此时发生弹栈动作。
方法运行的时候,局部变量在栈内存空间中存储
对象存储在堆内存中
成员变量的静态变量(静态属性)存储在方法区内存当中
5.方法重载
功能相似的时候,方法名可以相同,此时区分方法不再依据方法名,而是参数
当一下条件满足一个的时候就构成方法重载:
a.参数数量不同
b.参数顺序不同
c.参数类型不同
class Test {
public static void main(String[] args) {
m1();
m1(2);
m2(1, 2.0);
m2(21, 1.1);
m3(22);
m3(5.6);
}
// 参数数量不同
public static void m1() {
System.out.println("m1-1");
}
public static void m1(int a) {
System.out.println("m1-2");
}
// 参数位置不同
public static void m2(int a, double b) {
System.out.println("m2-1");
}
public static void m2(double a, int b) {
System.out.println("m2-2");
}
// 参数类型不同
public static void m3(int a) {
System.out.println("m3-1");
}
public static void m3(double a) {
System.out.println("m3-2");
}
}
6.递归
首先,递归非常消耗内存,只有在必须使用递归才能完成功能的时候用。
public static int recursion(int n) {
if (n == 0) {
return 0;
} else {
return n + recursion(--n);
}
}
7.成员变量
方法体之外定义的变量称为成员变量,如果成员变量没有赋值,则系统默认赋值,一切向0看齐。
只能通过实例访问的成员变量称为实例变量,只有创建对象后,才会为实例变量分配内存空间,否则,实例变量是不存在的;
8.构造方法
实例是通过构造方法创建的,所以构造方法名需要与类名一致,返回值类型是类本身,构造方法不需要返回值类型
如果定义了一个有参数的构造方法,建议在类中重载一个无参数的方法,这样可以随时创建类的实例,如果没有无参数的构造方法可能出现子类无法创建的问题;
实例变量的默认值是在构造方法内赋值的
[修饰符列表] 方法名(参数列表){
...
}
public class Movie {
public String name;
String player;
int year;
public Movie(String nameParam){
this.name=nameParam;
System.out.println("构造方法");
}
}
构造方法中调用其他构造方法:
public class Movie {
String name;
String player;
int year;
public Movie() {
//构造方法只能出现在构造方法的第一行
this("色戒","梁朝伟",2001);
}
public Movie(String name,String player,int year) {
this.name=name;
this.player=player;
this.year=year;
}
}
9.this
this是实例内部的一个变量,保存了一个内存地址,这个内存地址指向了当前实例本身。
类内部this可以省略不写,但是不符合常规习惯,所以一般都写上this.。
this()语法只能出现在构造方法第一行,通过当前的构造方法去调用本类中其他构造方法,可以实现代码复用。
this只能出现在实例方法和构造方法中。
10.实例方法
需要当前实例参与的方法需要定义成实例方法,实例方法不能带static修饰符
实例代码块{xxx},实例代码块在实例创建的时候执行,可以存在多个,至上而下执行,并且在构造方法之前执行
public class Movie {
{
System.out.println("实例代码块1");
}
{
System.out.println("实例代码块2");
}
{
System.out.println("实例代码块3");
}
public Movie() {
System.out.println("实例创建");
}
}