----------------------Android培训、Java培训、期待与您交流! ----------------------
1 什么是类?
类(class)是Java 语言的最小编程单位,也是设计和实现Java 程序的基础,
它是一组事物共有特征和功能的描述。类是对于一组事物的总体描述,是按照面向对象技术进行设计时最小的单位,也是组成项目的最基本的模块。类的概念是抽象的,类似于建筑设计中的图纸,是对于现实需要代表的具体内容的抽象。类只包含框架结构,而不包含具体的数据。所以类代表的是总体,而不代表某个特定的个体。
举例:好比有很多人,我们就可以定义一个类来形容人的总体,人有很多特性,比如名字,年龄,性别,我们就可以在类中定义一些字段来描述这些特性,人会做吃饭睡觉这样的事情,我们就可以在类中定义一些方法来描述人做的这些事情。
类的定义格式如下:
[修饰符] class 类名{
一个或多个构造方法;
零个或多个字段;
零个或多个方法;
}
类定义举例代码如下:class Person{-----------------------------分割线-----------------------------
//属性
private String name;
private int age;
private int sal;
//方法
public void show(){
System.out.println("个人信息:"+name+age+sal);
}
}
2 关于类的构造方法
每个类都有构造方法。什么是构造方法?
它是用来构造类的实例(每一个类都默认有一个无参的构造方法,得使用new调用)。
作用是:
给类中的字段进行初始化,可以用来创建对象。
特点是:
方法名与类名相同;不用定义返回值类型;不需要写return语句
对象的产生格式:
类名称 对象名 = new 类名称();因为有(),所以是方法,实际上它就是构造方法,并且是非私有的构造方法。
如:Person p = new Person();
-----------------------------分割线-----------------------------
3 static关键字
它起了修饰作用,被它修饰过后,字段或方法将会具有以下特点:
随着类的加载而加载
优先于对象存在
被所有对象所共享
可以直接被类名调用
需要注意的是:
静态方法只能访问静态成员,但是非静态成员可以访问静态成员;
静态方法中不可以使用this,super关键字
主方法(main)是静态的(可以利用类名去调用静态的main方法,很正常!但是会陷入死循环,导致内存溢出,jvm自动停止!)
public static void main(String[] agrs){}
实例(成员)变量和类(静态)变量的区别:
1 存放位置
类变量随着类的加载而存在于方法区中
实例变量随着对象的建立而存在于堆内存中
2 生命周期
类变量生命周期最长,随着类消失而消失
实例变量生命周期随着对象的消失而消失
优点:
对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份,可以直接被类名调用
缺点:
声明周期过长,访问出现局限性(它只能访问静态)
什么时候定义静态变量?
当对象中出现共享数据时,该数据被静态所修饰。
PS:对象中的特有数据要定义成非静态存在堆内存中。
什么时候定义静态函数呢?
当功能内部没有访问到非静态数据(对象的特有数据)时,那么该功能函数可以定义成静态的。
静态代码块
格式:
Static
{
静态代码块中的执行语句
}
特点:随着类的加载而执行,只执行一次,并优先于主函数。用于给类进行初始化。
如:class StaticCode
{
int num = 9;
StaticCode()
{
System.out.println("b");
}
static
{
System.out.println("a");
}
{
System.out.println("c"+this.num);
}
StaticCode(int x)
{
System.out.println("d");
}
public static void show()
{
System.out.println("show run");
}
static
{
System.out.println("e");
}
}
class StaticCodeDemo
{
static
{
System.out.println("f");
}
public static void main(String[] args)
{
new StaticCode(4);//输出为:f a e c9 d
}
}
-----------------------------分割线-----------------------------
4 this关键字
与static一样经常出现的还有this关键字。
this代表了当前对象。换句话说,谁调用了当前方法,谁就是当前对象。
注意:this不能用在static修饰的方法里和static修饰的代码块里。
this语句:用于构造函数之间进行互相调用;
this语句只能定义在构造函数的第一行,因为初始化要先执行
如:
class Person
{
private String name;
private int age;
Person(String name)
{
this.name=name;
}
Person(String name,int age)
{
this(name);
//即调用上面的构造函数Person(String)
//this.name=name;
this.age=age;
}
}
-----------------------------分割线-----------------------------
5 访问修饰符
还有一些常用关键字,如:public、private、protect。
这些关键字也是起修饰作用的(不能修饰字段),它们是访问修饰符。其实访问修饰符中还有一个default,如果类或者方法前面没有访问修饰符,那么它默认就是被default所修饰。
每个修饰符后能让人访问到的范围如下:
private 类访问权限:本类内部可以访问,不能继承到子类;
default 什么都不写,包访问权限:本类内部可以访问,同包其他类也可以访问,同包可继承;
protected 子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问,能继承到子类;
public 公共访问权限:任何地方都可以访问,能继承到子类。
-----------------------------分割线-----------------------------
6 对象的初始化过程
Person p = new Person(“aaaa”,20);
该句话做了什么事情?
1 因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中。
2 执行该类中的static代码块,如果有的话,给,给Person.class类进行初始化。
3 在堆内存中开辟空间,分配内存地址
4 在堆内存中建立对象的特有属性,并进行默认初始化
5 对属性进行显示初始化
6 对对象进行构造代码块初始化
7 对对象进行队形的构造函数初始化
8 将内存地址赋给栈内存中的变量
----------------------Android培训、Java培训、期待与您交流! ----------------------