一、类的相关基本概念
1、类概念:类是一组具有相同属性的事务的抽象,一切类的基类都是Object类
2、类组成:
1) 属性(变量) ->字段(静态字段, 实例字段, 常量字段)
2) 行为(方法)
3、new关键字的功能:
1、在堆上开辟内存
2、调用构造方法(根据参数;只People p 这样p对象是不会被分内存的
4、对象的初始化方式:
1、在类中赋值
class people{
string name = "zhangsan";
int age=0;
}
System.out.print(p.name)
2、构造方法:构造方法名同类名,构造方法可重载,构造方法可private修饰(单例模式)
public TestClass(String name, int age) {
this.name = name;
this.age = age;
}
public TestClass() {//constructor without parameters
}
TestClass test = new TestClass("sx",10);
3、通过引用变量进行初始化对象
People p=new People();
p.name=”caocao”;
p.age=10;
4、通过静态块赋值
Static { PI = Math.PI;//只能对未初始化的静态字段进行初始化操作 }
5、通过实例代码块进行实例常量成员的初始化操作
{ ID=10; }
5、类中变量赋值
1、直接初始化时候在类中赋值
2、构造方法
3、setXXX方法
public int getAge(){
return this.age;
}
public void setAge(int age){
this.age=age;
}
Stu stu = new Stu();
stu.setAge(10);
System.out.println(stu.getAge());
6、权限修饰符
public、protected、package、private、
7、this关键字调用其他类型的构造函数
调用构造函数应该注意:
1 在构造调用另一个构造函数,调用动作必须置于最起始的位置。
2 不能在构造函数以外的任何函数内调用构造函数。
3 在一个构造函数内只能调用一个构造函数
本程序使用了关键字 new 实例化 Student 类的对象 student。当类产生实例化对象后就可以通过对象.属性和对 象.方法进行类结构的调用。 类本身属于引用数据类型,而对于引用数据类型的执行分析就必须结合内存操作来看
8、静态关键字static用法
8、1静态成员方法(只能访问静态成员变量)
说明:
1)在调用静态成员方法时,不会将对象的引用传递过去,因此不能访问对象的非静态成员变量 静态成员方法访问方式:“类名.静态方法”
2)静态成员方法通常以“类名.静态方法”的形式访问,如果可以访问“非静态成员变量”,那么编译 器也就无法确定:访问的“非静态成员变量”是属于哪个对象,在内存中的位置,甚至根本就还没有对象,为避免这 种情况的出现,编译器一定不会允许“静态成员方法”访问“非静态成员变量”
8、2静态成员变量
静态成员变量:位于“方法区”,无论多少个对象该变量在内存中只有一份
非静态成员变量:位于“堆空间”,new一个对象就创建一个,因此有多少对象,该变量在内存有多少个。
public static void main(String[] args) {
//static int a = 10;编译报错
}
private, public 这些也不能加。静态变量是定义在类中,方法体外面的。 如果你清楚 JVM,应该知道局部变量是保存在栈中的,而静态变量保存于方法区,局部变量出了方法就被栈回 收了,而静态变量不会,所以在局部变量前不能加 static 关键字。
其他解释:
1.static关键字
1.static修饰成员变量
静态变量和成员变量之间区别
1类名.静态变量访问 静态变量
get方法访问 成员变量
2成员变量:堆上 一份对象对应一份成员变量 this.name
静态变量(类变量):方法区 一个类对应一个静态变量(多个对象操作同一个静态变量)name 用this.name只是语法上没错
用类调用 People.name People是类
可以在类中设置一个计数器 静态变量 可以统计类new出的对象个数 用类名.count可以访问
2.static修饰成员方法
静态方法和成员方法之间的区别:
有无this引用 静态无,需要this的无法提供 成员方法有
静态方法里面只能访问静态变量(因为不需要this)
3.静态块
static { }专门初始化静态变量(只初始化一次 随类的加载而初始化 类只加载一次 所以。。。)
实例块{ }专门初始化实例变量
构造方法里面都可以
9、常量关键字final
final修饰常量;
public final int i=10;
注: 1、常量字段必须在声明时进行赋值或者在类的构造方法或者初始化代码中被赋值一次,否则编译报错。
2、在其他位置不能修改常量字段,否则编译报错。
3、常量字段可以是静态常量也可是实例常量
4、常量名一般大写,多个字之间下划线连接。常量字段一般声明为 public 、static、 final
final关键字:(理解为最终的)
1.修饰变量(一经赋值,不能修改。称常量)
2.修饰类(被final修饰的类不可被继承)
3.修饰方法(被final修饰的方法不可被重写)
总觉得类的基础这块,还是有欠缺,但又说不出来缺了哪块内容。希望各位大神补充
类的高级部分,在extends继承,implements实现,interface接口,abstract抽象,内部类(静态内部类/实例内部类),类的初始化顺序(属性、方法、静态/实例、父子类)
一些比较重要的类:1、String类(String StringBuffer StringBuilder) 2、Object类的一些方法 4、Exception类(及Throwabe接口)3、基本数据类型的包装类型(int Integer)4、时间类(好像是Date)
5、Thread(继承Thread类,Runable接口,Callable接口,线程池 这块属于多线程了) 还有???????? 希望大神补充