黑马程序员——Java基础_类及static、this关键字

时间:2022-05-11 12:23:42

 ----------------------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关键字

在某些字段、方法上经常可以看见一个名为static的关键字。static关键字有什么用?

         它起了修饰作用,被它修饰过后,字段或方法将会具有以下特点:

         随着类的加载而加载

         优先于对象存在

         被所有对象所共享

         可以直接被类名调用

需要注意的是:

静态方法只能访问静态成员,但是非静态成员可以访问静态成员;

静态方法中不可以使用thissuper关键字

主方法(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所修饰。

每个修饰符后能让人访问到的范围如下:

黑马程序员——Java基础_类及static、this关键字

         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培训、期待与您交流! ----------------------