1.对象和类
对象:客观存在的具体事物。
类(可以理解为模板):具有相同特征(属性)和行为(方法)的对象的集合。
比如:手机是类,华为手机,小米手机是具体的对象
2.类的组成:属性和方法
public class 类名{
属性1;
属性2;
方法1;
方法2;
}
3.创建和使用对象
类名 对象名 = new 类名();//new 类名()是实例化对象,然后赋值给对象名
对象名.属性;
对象名.方法();
4.成员变量局部变量
成员变量保存在类中,局部变量保存在方法中
两者区别:
--作用范围不同。成员变量可被类所以方法调用,也可以被对象调用;局部变量只能本方法中被调用
--赋初值。成员变量默认初值为0,局部变量没有默认初值。
--局部变量和成员变量同名时,局部变量屏蔽全局变量。
和C语言中全局变量和局部变量的区别一样。
5.构造方法(也叫构造函数,构造器)
构造方法是用来初始化对象的方法。
特点:名称与类名相同并且没有返回值。
public 构造方法名(参数1,参数2){
}
如果用户不创建,则系统默认有一个无参的构造方法。
6.static_静态变量
Java中被 static修饰的成员变量称为静态变量或类变量。它属于整个类,而不是某个对象所有,即被类的所有对象所共享。
访问方法:静态成员可以使用类名直接访问,也可以使用对象名进行访问。
类名.成员名或变量名.成员名
注意:静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!
7.static_静态方法
static 修饰方法,称为静态方法或类方法,可以创建对象调用也可以用类名.方法进行调用。
--静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。
public class Demo_1 {
String name = "xiaoming";
static String hobby = "music";//静态变量
public static void print(){
System.out.println(name);//不能直接调用非静态变量
//可以创建对象进行调用
Demo_1 demo = new Demo_1();
System.out.println(demo.name);
System.out.println(hobby);
System.out.println(Demo_1.hobby);
}
}
--在普通成员方法中,则可以直接访问同类的非静态变量和静态变量。
public class Demo_1 {
String name = "xiaoming";
static String hobby = "music";//静态变量
public void print(){
System.out.println(name);
System.out.println(hobby);
}
}
--静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。
public class Demo_1 {
String name = "xiaoming";
String hobby = "music";//静态变量
public void print(){
System.out.println(name);
System.out.println(hobby);
}
public static void intro(){
print();//静态方法中不能直接调用非静态方法
Demo_1 demo = new Demo_1();
demo.print();
}
}
静态方法是属于类的,内存必须为它分配内存空间,这个空间一直由静态方法占用。内存管理器不会由于静态方法没有被调用而将静态方法的存储空间收回,而普通的成员方法是由对象调用的,内存并不会一直为起分配内存,只有调用的时候才为其分配存储空间,调用结束存储空间就会被内存管理器收回。
8.初始化块与静态初始化块
初始化块在Java中就是在构造器之前执行的一段代码,它的用处是,如果一段初始化处理代码对所有对象完全相同,且无须接受任何参数,就可以把这段提取到初始化块中。对于普通的类而言,可以放在初始化块中的初始化工作其实完全可以放到构造函数中进行,只不过有时会带来些许不便,如有多个构造器,就要在多个地方加上初始化函数完成初始化工作,而如果放到初始化块中的话则只要写一次即可。
静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
public class Demo {
int num1;
int num2;
static int num3;
public Demo(){//构造方法
num1 = 91;
System.out.println("通过构造方法为变量num1赋值");
}
public void init(){
System.out.println("通过初始化块为变量num2赋值");
}
{//初始化块
num2 = 74;
init();
}
static{//静态初始化块
num3 = 45;
System.out.println("通过静态初始化块为静态成员num3赋初值");
}
public static void main(String args[]){
new Demo();
new Demo();
}
}