this关键字
this是作为普通方法的“隐式参数”,由系统传入到方法中
this的用法:
普通方法中,this总是指向调用该方法的对象
构造方法中,this总是指向正要初始化的对象
this()调用重载的构造方法,避免相同的初始化代码;但只能在构造方法中用,并且必须位于构造方法的第一句
this不能用在static方法中
package YuXiDemo;
//测试this的用法
public class ThisTest {
int a,b,c;
ThisTest(){
System.out.println("初始化对象:" + this);
}
ThisTest(int a,int b){
//ThisTest();这样是无法调用构造方法的
this();//调用无参的构造方法,必须位于第一行
a = a;//两个a都是指局部变量而不是成员变量
//用this就可以区分成员变量和局部变量
this.a = a;
this.b = b;
}
ThisTest(int a,int b,int c){
this(a,b);//调用有参的构造方法也必须位于第一行
this.c = c;
}
void eat(){
System.out.println("回家吃饭啦");
}
void play(){
System.out.println("当前对象:" + this);
this.eat();
System.out.println("一起去打篮球吧");
}
public static void main(String[] args) {
ThisTest tt = new ThisTest();
tt.play();
}
}
static关键字
static声明的属性或方法:静态变量(类变量)、静态方法(类方法)
静态变量/静态方法生命周期和类相同,在整个程序执行期间都有效
有以下特点:
为该类的公用变量,属于类,被该类的所有实例共享,再类载入时被初始化
static成员变量只有一份
一般用“类名.类变量/方法”来调用
在static方法中不可直接访问非static的成员
package YuXiDemo;
public class TestStatic {
int id;//账号
String name;//账户名
static String school = "家里蹲大学";//名称,这是静态属性
public TestStatic(int id,String name){
this.id = id;
this.name = name;
}
void come(){
System.out.println(name);
}
public static void printSchool(){
//come();调用非静态成员,编译就会报错;静态方法里面不能使用非静态成员
System.out.println(school);
}
public static void main(String[] args) {
TestStatic ts = new TestStatic(10086,"小神龙");
TestStatic.printSchool();
TestStatic.school = "五道口职业学院";
TestStatic.printSchool();
}
}
代码块
概念:使用”{}”括起来的一段代码
分类:根据位置可分类
普通代码块:直接在方法或语句中定义的代码块
构造代码块:直接写在类中的代码块
静态代码块:使用static声明的代码块
同步代码块:多线程的时候会学
静态初始化块
构造方法用于对象的普通属性初始;
静态初始化块,用于类的初始化操作,初始化静态属性;
类第一次被载入时先执行static代码块;类多次载入时,static代码块只执行一次
在类的初始化时执行,不是在创建对象时执行
在静态初始化块中不能直接访问非static成员
包(pakage)
相当于文件夹对于文件的作用,用于管理类、解决类的重名问题
两个要点:
1、通常是类的第一句非注释性的语句
2、包名:域名倒着写即可,在加上模块名,便于内部管理类
写项目时都要加包,不要使用默认包
com.gao和com.gao.car,这两个包没有包含关系,是两个完全独立的包。
只是逻辑上看,后者是前者的一部分
import(导入类)
如果要使用其他包的类,需要使用import,从而在本类中直接通过类名来调用,否则就需要书写类的完整包名和类名
注意:
Java会默认导入java.lang中包下所有的类,因此这些类我们可以直接使用
如果导入两个同名的类,只能用包名 + 类名来显示调用相关类:
java.util.Date date = new java.util.Date();
java.util.*;导入该包下所有的类,会降低编译速度,但不会降低运行速度
import static(静态导入)
实在JDK1.5新增加的功能,其作用是用于导入指定类的静态属性和静态方法,这样我们可以直接使用静态属性和静态方法
package YuXiDemo;
import static java.lang.Math.*;//导入Math类的所有静态属性
import static java.lang.Math.PI;//导入Math类的PI属性
public class TestStatic {
public static void main(String[] args) {
System.out.println(PI);
System.out.println(random());
}
}
封装(encapsulation)
封装是面向对象三大特征之一;
封装的理念:高内聚,低耦合
编程中封装的优点:
提高代码的安全性;
提高代码的复用性;
“高内聚”:封装细节,便于修改内部代码,提高可维护性;
“低耦合”:简化外部调用,便于调用者使用,便于扩展和协作
面向对象的三大特征:
继承(inheritance)
-子类 父类
-子类可以从父类继承属性和方法
-子类可以提供自己单独的属性和方法
封装/隐藏 (encapsulation)
-对外隐藏某些属性和方法
-对外公开某些属性和方法
多态 (polymorphism)
-为了适应需求的多种变化,使代码变得更加通用