Java中的类和对象(上篇)
什么是类和对象
Java中一切皆对象**(一切围绕着对象进行,找对象,用对象,建对象)**
我们把具有相同属性和行为的一类对象抽象为类,使用类来描述这类对象的特征。
类 -> 抽象概念,人类,犬类,猫类 -> 无法具体到某个实体。
对象 -> 某类的一个实体,有了对象之后,这些属性就有了属性值,这些行为就有了相应。
世界上所有的的行为都归纳为对象 + 行为 + 对象
行为一定是某个对象发出的,然后作用于另一个对象或某些对象。
类是描述某一些项的统称,对象是这个类的一个实例而已。
这一类对象所具备的共同属性和行为(方法)都在类中定义。
类的创建
创建类的语法
class 类名称{
//field(实例属性,成员属性)
//行为(实例方法,成员方法)
}
在Java中一个源文件(*.java)只可以存在一个主类
public class**
类的命名使用有意义的大驼峰单词命名法
从第一个单词开始首字母就大写,多个单词都是首字母大写
class Person
class ChinaPerson
类中的成员变量都有默认值
类的引用
类相当与一个蓝图,一个范本,抽象的概念
有类之后我们就能根据类来产生一个抽象的对象
类名称 引用名称 = new 类名称();
Person per = new Person();
当产生一个类的对象之后,我们可以使用"."操作符来使用该对象的属性和方法
成员变量可以在类定义时赋值,成员变量就地初始化。
关于引用数据类型的特殊值null
null在Java中表示"空引用",只有名字没有任何堆内存中的地址,如果直接使用值为null的引用去操作"."任何属性或方法(成员变量和成员方法)都会报错。
类和对象
类:一组具有相同特征的对象的抽象,类中定义的所有该类对象所具备的的属性和方法
class Person{
//属性 ,方法,代码块
}
对象:某个类的的一个具体的实体,使用new关键词创建一个对象。
所有类都是引用数据类型,对引用类型来说,默认值是null。
NullPointerException -> 空指针异常,一定是使用了一个值为null的引用去访问属性或方法了。
static关键字
static关键字 -> 看见static关键字,本能反应,与对象无关
1、修饰属性,类属性,类对象
2、修饰方法,类方法,工具方法
3、static修饰代码块,静态代码块
4、static修饰内部类,静态内部类
1、修饰属性,类属性,类对象
当一个实例变量被static关键字修饰,他就表示该类的属性,该类的所有对象共用这个属性,所有对象的属性值大家都一样。
static修饰的属性在JVM方法区中储存,所有该类对象共用此属性
static修饰的属性,直接通过类名称就可以方法,无需通过对象访问
在Java中能否在一个方法的内部定义一个static变量?
不能!!!!!!!
方法中定义的变量全是局部变量,局部变量都在栈中储存,不可能定义了一个既在栈中又在方法中的属性。
final其实就是一个天然的共享概念,直接定义为static final即可。
这样的话,相当于所有对象共享此值,并且是唯一的
在类中定义常量,一般都会使用全局常量
static final 共同修饰
命名规则:所有字母全部大写,多个单词下划线分隔
static final String STUDENT_SCHOOL = "清华大学" ;
1.static变量称为类属性,在方法区中存储,该类的所有对象共享此变量。
2.若在类中定义了常量(定义时赋值),一般我们使用 static 和 final 共同修饰,全局常量
3.要使用类属性,我们通常直接通过类名称,属性名称
*不推荐使用对象来调用属性,不规范
4.null引用也可以调用
2、修饰方法,类方法,工具方法
static修饰的方法称之为类方法,工具方法(静态方法)
static修饰的方法也是通过类名称直接使用,没有对象就可以访问。
为什么主方法是静态方法呢?
因为主方法是程序的入口,如果主方法也是成员方法也就需要对象调用。
如果一个程序连入口都没有又从哪产生对象?
2.1所以程序从主方法执行,要用静态方法直接调用才能调用起来,无需产生对象。1.在静态方法只能调用静态方法或者静态属性,static家族之间可以互相调用,不能直接调用成员方法和成员属性,必须通过对象来调用。
2.2.在成员方法中既可以调用成员方法,也可以调用静态方法(此时都已经产生了对象,一定是可以访问静态域)
static与对象无关,表示一个类的属性和方法
1、static属性表示共享变量的概念,Person country,存在于方法区中,所有该类的对象共享此变量,直接用于类名称访问
2、static方法表示工具方法,直接通过类名称访问,与具体的某个对象无关,``Arrays.sort;Arrays.copyOf()`
3、static不能直接修饰一个外部类 -> 编译出错
静态方法中不能调用非静态方法或属性,但是可以访问静态变量和方法。
成员方法中既可以调用成员变量或方法,也可以访问静态变量和方法。
tatic方法表示工具方法,直接通过类名称访问,与具体的某个对象无关,``Arrays.sort;Arrays.copyOf()`
3、static不能直接修饰一个外部类 -> 编译出错
静态方法中不能调用非静态方法或属性,但是可以访问静态变量和方法。
成员方法中既可以调用成员变量或方法,也可以访问静态变量和方法。