static 关键字:
** 在类中,用static声明的成员变量为静态变量,也称类变量,类变量的生命周期和类相同,在整个应用程序执行期间都都有效。**
1、为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化
2、对该类所有对象来说,static成员变量只有一份,被该类所有对象共享。
3、一般用“类名,类属性/方法”来调用。(也可以同通过对象应用或类名(不需要实例化)访问静态成员。)`
/**
- 测试static关键字用法
- @author WY
*/
public class User01 {
int id; //id
String name; //名字
static String company = “东吴集团”; //公司名称
public User01(int id,String name){
this.id = id;
this.name = name;
}
public void login(){
System.out.println("登录:"+name);
}
public static void printCompany(){
//调用非静态成员,编译就会出错
System.out.println(company);
}
public static void main(String[]args){
User01 u = new User01(101,"吴某人");
User01.printCompany();
User01.company = "东汉末年三国";
User01.printCompany();
}
}
`
静态初始化块
构造方法用于对象的初始化!静态初始化块,用于类的初始化操作!在非静态初始化块中不能直接访问非static成员。
/**
* 测试static初始化块
* @author WY
*
*/
public class User02 {
int id ;
String name;
String pwd;
static String company;
static{ //静态语句块,不能直接访问非静态成员
System.out.println("执行类的初始化工作");
company = "东吴集团";
printCompany();
}
public static void printCompany(){
System.out.println(company);
}
public static void main(String[] args) {
User02 u3 = new User02();
}
}
包机制(package、import)
通过包解决重名的问题,也可以实现对类的有效管理,包对类,相当于文件夹我呢见的作用
**package使用的两个要点:
**
1、通常是类的第一句非注释性语句
2、包名:域名倒着写即可,再加上模块名,便于内部管理类。
* package的使用
*/
package cn.wu.oo; //类的非注释语句第一句
public class User {
}
导入类import
import后,比那与编写代码,提高可维护性。
Java会默认导入java.lang包下所有的类,因此这些类我们可以直接使用。
如果导入两个同名的类,只能用包名+类名来显示调用相关类:
java.util.Date date = new java.util.Date()
/**
* 导入同名的类的处理
*/
package cn.wu.oo; //非注释语句的第一句
import java.sql.Date;
import java.util.*; //导入该包下所有的类,会降低被编译速度,但是并不会降低运行速度
public class Test {
public static void main(String[] args) {
//这里是指java.sql。Date
Date now;
//java,util,Date因为和java,sql,Date重名,需要完整注释
java.util.Date now2 = new java.util.Date();
System.out.println(now2);
}
}
静态导入
作用是用于导入指定类的静态属性和静态方法,这样我们可以直接使用静态属性和静态方法。
* 静态导入的使用
*/
package cn.wu.oo;
//以下静态导入方式二选一即可
import static java.lang.Math.*;//导入Math类中所有静态属性
import static java.lang.Math.PI;//导入Math类中的PI属性
public class Test2 {
public static void main(String[] args) {
System.out.println(PI);
System.out.println(random());
}
}
继承的实现:
继承让我们更加容易实现类的扩展。比如,我们定义了人类,再定义Boy类就要扩展即可。实现了代码的重用,不用再重新发明轮(don’treinventwheels)。从英文字面意思理解,extends的意思是“扩展”。子类是父类的扩展
继承使用要点:
1、父类也称作超类、基类。子类:派生类
2、java中只有单继承,没有像c++那样的多继承、多继承回应器混乱,是的继承链过于复杂。
3、java中类没有多继承,而接口有多继承
4、子类继承父类,可以得到父类的全部方法和属性(除了父类的构造方法),但不见得可以直接访问(比如:父类私有的属性和方法)。
5、如果定义一个类时,没有调用extends,则他的父类是:java.lang.Object。
instanceof 运算符
instanceof 是二元运算符,左边是对象,右边是类;当对象是右面或子类所创建对象是没返回true;否则,返回false
/**
* 使用extends实现继承
*/
package com.wu.inherit;
public class Test {
public static void main(String[] args) {
Student s = new Student("吴洋",170,"java");
s.rest();
s.study();
}
}
class Person /*Person extends object**/{
String name;
int height;
public void rest(){
System.out.println("休息一会儿!");
}
}
class Student extends Person{
String major; //专业
public void study(){
System.out.println("在学校,学习java!");
}
public Student(String name,int height,String major){
//天然拥有父类的属性
this.name = name;
this.height = height;
this.major = major;
}
public static void main(String[]args){
Student s = new Student("张三",180,"c++");
System.out.println(s instanceof Person);
System.out.println(s instanceof Student);
}
}