本节主要是两个关键字的用法
前言
面向过程的笔记中多为概念,需要多次回顾
一、this关键字
this关键字表示当前正在执行的对象
在一个类的方法或构造方法内部,使用this+成员变量名,区分成员变量和局部变量
student s1 = new Student(10,"张三");
Student s2 = new student(11,"李四");
public student(int number,string name){
this .number = number;//使用this关键字对成员变量进行访问
this .name = name;
this.gender = gender;
}
public void study() {
System.out.println(this.name+"好好学习");
this.exam();
}
public void exam(){
System.out.println(name+"认真考试");
}
二、 static关键字
static被称为静态,可以用来修饰类的属性,方法,代码块,内部类.
类--class--静态代码 只有一份的存在
静态--在内存中只有一份的存在
public class Chinese(){
String name;
Static String country="中国";
}
new Chinese();
name=null;
//country ="中国";
new Chinese();
name=null;
//country ="中国";
static关键字修饰的方法就是静态方法,属于类,可以通过类名直接进行访问
当方法中不需要使用非静态的成员变量的时候,我们可以将方法设计为静态方法,不需要创建对象,直接通过类名访问
System.out.println(name);在静态方法中不能使用非静态的成员,因为静态的成员随着类的加载而加载,类加载先于对象
非静态成员方法中,可以使用静态成员变量,因为静态的变量先加载
static修饰后的成员,随着类的加载而加载
先于对象而存在
static修饰的成员变量在内存中只有一份,适合讲所有实例都相同的属性设计为静态(中国人类 国籍都是中国)
静态的成员可以使用类名/对象名调用,一般建议使用类名访问
static修饰方法
静态方法只能访问静态的变量,不能访问非静态的变量
在方法中不使用非静态成员变量时,可以将方法设计为静态的
public static int max(int a, int b) {
return (a>=b)?a:b;
}
三、静态非静态
类中可以定义:
成员变量(非静态成员变量属于对象,静态的成员变量属于类,和类一样只有一份)
成员方法(非静态的成员方法,属于对象,可以使用非静态的成员变量和静态成员变量,
静态的成员方法,只能使用静态的成员变量)
构造方法 在创建对象后,为对象成员变量进行初始化,有无参,也可以有有参的
四、代码块
定义在类中,类似于一个没有名字的方法;
分为实例代码块
静态代码块
因为代码块,没有名字,只能在,满足条件时,自动由系统调用
实例代码块:在创建对象时,被自动调用执行
静态代码块:在类被加载时,被自动调用执行
类什么时候被加载:
通过类名访问类中静态成员时,类会被加载
在一个类中使用main方法,也会加载类
创建对象也会加载类
类只被加载一次
如果有多个实例代码块或多个静态代码块,他们会按照先后顺序执行
实例代码块 先于构造方法执行。
public class Demo {
{
System.out.println("Deom实例代码块1");
}
{
System.out.println("Deom实例代码块2");
}
public Demo(){
System.out.println("Demo构造方法");
}
static {
System.out.println("Deom静态代码块1");
}
static {
System.out.println("Deom静态代码块2");
}
//即使调换位置也不影响最后的输出顺序:
//如果有多个实例代码块,静态代码块,就按顺序输出
//实例代码块先于构造方法执行
public static void test() {
System.out.println("静态test");
}
}
public class TestDemo {
public static void main(String[] args) {
/*
类什么时候被加载:
通过类名访问类中静态成员时,类会被加载
在一个类中使用main方法,也会加载类
创建对象也会加载类
*/
// Demo.test();
new Demo();
new Demo();
}
}
五、包
问题:项目越写类越多,难免可能会同名的类(java.util.Date,java.sql.Date)
不同类功能不同,需要分类管理
包:
为了解决一些类管理的问题,java引入包机制来解决
包称为类的命名空间(可以理解为是一个文件夹)
是类名的组成部分
类名(全类名)=包名(地址)+类名简称
作用:
一个类属于不同的包,就可以避免同名类问题
按照不同的功能管理类(web层,service逻辑处理,dao数据访问层)
控制访问权限
包名单词全部小写
包命名:
第一级,项目类型 com,demo2,gov,edu...
第二级,公司名称 oracle sun huawei ali ffyc
第三极,项目名称 oa erp cms
第四级,功能模块名称
在类中,使用其他包中的类时,需要使用import关键字导入类的地址(全类名)
java.lang包中的类不需要导入
总结
主要的两个关键字要学会如何使用
区分静态和非静态变量
两种代码块的区别
包的作用与命名方式