关于类和对象

类和对象的概念:在Java中一切皆对象,一切都围绕对象进行,找对象、建对象,用对象等。

类:把具有相同属性和行为的一类对象抽象为类。

对象:某个类的一个实体,当有了对象后,这些属性便有了属性值,行为也就有了相应的意义。

类和对象的定义与使用:

创建类的方法:

class 名称 {


}

创建具体对象:

类名称 引用名称  = new 类名称()

Person person = new Person()

示例:

static 关键字:

使用static后,该类所有对象共享该属性,可以通过类名直接访问,没有对象也可访问。

例如:

关键问题:

1.能否在一个方法中定义一个static变量?

答:在方法中定义的变量在栈中存储,而static变量是在方法去中存储,一个变量不可能即在栈中存储又在方法区中存储。

2.静态方法能否访问成员变量和成员方法?

答:不能。静态方法可以直接通过类名来访问,没有对象也可以访问。

                  而成员变量和成员方法需要通过类中的对象来进行访问。

                   二者矛盾!

3.成员方法能否访问静态变量和静态方法?

答:能。成员方法要通过对象进行访问。

               静态变量和静态方法不需要通过对象就可以访问。

               二者逻辑不冲突!

4.普通类能否用static关键字修饰?

答:不能。类定义出来是要产生对象的,而static修饰一个类,这个类不需要对象就可以调用,两者矛盾。

面向对象三大特征:封装、继承、多态

而类和的对象阶段,主要研究的是封装。

四大访问修饰符:

1.private:被private修饰的修饰的属性和方法只在当前类可见,出了类的{ },对外就隐藏,外部不知道其存在。

2.default:

3. protected:用在继承。

4. public:谁都可以看到,对于一个包中不是什么秘密,但对于其他就是隐私。

private关键字不能修饰一个类,因为定义类就是为了给外部使用,而private修饰使得外部根本不知道其存在。

构造方法:

构造方法是类中非常特殊的一类方法,使用关键字new 实例化对象时实际上调用的就是该类的构造方法。

语法规则:

1.方法名与类名相同。

2.构造方法没返回值。

3.一个类中至少存在一个构造方法,若没有,编译器会自动生成一个无参构造。

例如:

若没有定义构造方法,编译器会自动生成一个无参构造。

例如:

若类中已经有了构造方法,默认的无参构造就不再生成。

例如:

构造方法的重载:

构造方法是为了给类中的成员赋值的,而重载只是参数上的不同。

例如:

问题:能否用实例化对象调用它的构造方法?

答:不能。构造方法是产生对象的,而对象又调用自己的方法,矛盾。

this关键字:

一般用于成员变量与形参名相同的情况

例如:

这时候就得用this来解决:

代码块:

代码块:指的是使用{ }括起来的一段代码,称为代码块。根据定义的代码块的位置以及关键字的不同分为以下四种代码块。

1.普通代码块:

  public static void main(String[] args) {
 
        //普通代码块
 
    }

2.成员代码块:

定义在类中,不加任何修饰符的代码块,又称为构造块。

public class Test {
    public static void main(String[] args) {
        Student student1 = new Student();
    }
}
class Student{
    String name;
    {
        //构造块
        System.out.println("Student类的构造块");
    }
    public Student(){
        System.out.println("Student类的无参构造");
    }
}

3.静态代码块:

定义在类中,使用static修饰,在类中只加载一次,与对象无关。

public class Test {
    public static void main(String[] args) {
        Student student1 = new Student();
        Student student2 = new Student();
    }
}
class Student{
    String name;
    {
        //构造块
        System.out.println("Student类的构造块");
    }
    public Student(){
        System.out.println("Student类的无参构造");
    }
    static {
        //静态代码块
        System.out.println("Student类的静态代码块");
    }
}

此时可以看到静态代码块先被执行。

4.同步代码块(不涉及此类知识)

                             

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值