java类与对象(面向对象)

一》类与对象的关系

类:就是对现实生活中事物的描述。

对象:就是这类事物,实实在在存在的实体(个体)。

二》成员变量和局部变量

1.区别:

a.作用域不同:

成员变量:作用于整个类中:

局部变量:作用于函数中,语句中;

b.在内存中的位置不同:

成员变量:在堆内存中,因为对象的存在,才在内存中存在。

局部变量:存在于栈内存中。

三》封装

1.封装的好处:

a.将变化隔离

b.便于使用

c.提高重用性

d.提高安全性

2.封装原则:

a.将不需要对外提供的内容都隐藏起来。

b.把属性都隐藏,提供公共方法对其访问。

3.如何隐藏(private):

private:私有,权限修饰符,用于修饰类中的成员(成员变量,成员函数)。

注意:私有仅仅是封装的一种表现形式;

将需要隐藏的成员私有化,提供set(),get()方法对其操作(属性)。

将需要隐藏的方法私有化,提供另一个对外方法,对其调用。

四》this关键字在构造函数间的调用:

this语句:用于构造函数之间互相调用(只限于构造函数);

This语句只能定义在构造函数的第一行。因为初始化要先执行。

五》static关键字:

1.static:静态;

用法:是一个修饰符,用于修饰成员(成员变量,成员方法);

当成员被静态修饰后,就多了个调用方式,除了可以被对象调用外,还可以直接被类名调 用。

2.被修饰后的成员具备以下特点:

a.随着累的加载而加载

b.优先于对象存在

c.被所有对象所共享

d.可以直接被类名调用

3.使用注意事项:

a.静态方法只能访问静态成员

b.静态方法中不可以写this,super关键字,因为优先于对象存在。

3.实例变量和类变量的区别:

a.存在位置:

类变量随着类的加载而存在于方法区中,

实例变量随着对象的建立而存在于堆内存中。

b.生命周期:

类变量生命周期最长,随着类的消失而消失,

实例变量生命周期随着对象的消失而消失。

七》main函数:

1.主函数:是一个特殊的函数,作为程序的入口,可以被jvm调用。

2.主函数的定义:

Public:代表着该函数访问权限是最大的。

Static:代表主函数随着类的加载就已经存在了。

Void:主函数没有具体的返回值。

Main:不是关键字,是一个特殊的单词,可以被jvm识别。

String【】 args):函数的参数,参数类型是一个数组,该数组中的元素是字符串。

3.主函数是固定格式的:jvm识别。

唯一能改变的就是参数名args;一般不变;

八》静态什么时候使用:

1.什么时候使用静态?

要从两方面下手:

a.因为静态修饰符的内容有成员变量和函数;

什么时候定义静态变量(类变量)那?

当对象中出现共享数据时,该数据被静态所修饰。

对象中的特有数据要定义成非静态,存在于堆内存中。

什么时候定义静态函数那?

当功能内部没有访问到非静态数据(对象的特有数据),

那么该功能可以定义成静态的。

九》静态代码块

1.静态代码块格式:

Static

{

执行语句;

}

2.特点:

随着类的加载而执行,只执行一次,并优先于主函数执行。

3.用于给类进行初始化的。

4.构造代码块

StaticCode()

{

System.out.println("b");

}

static

{

System.out.println("a");

}

{

System.out.println("c");

}

结果为:a  c   b

执行顺序:构造函数<构造代码块<静态代码块;

十》对象的初始化过程:

class Person
{
  private String name;
  private int age;
  private static String country = "CN";
  Person(String name,int age)
  {
     this.name = name;
     this.age = age;
  }
  {
    System.out.println(name+"..."+age); 
  }
  public void setName(String name)
  {
    this.name = name; 
  }
  public void speak()
  {
    System.out.println(this.name+"..."+this.age); 
  }
  public static void showCountry()
  {
     System.out.println("country = "+country);
  }
}
class PersonDemo
{
  public static void main(String[] args)
  {
    Person p = new Person("张三",20); 
  } 
}

Person p = new Person("张三",20); 该句话都做了什么事情?

1.因为new用到了Person.class文件,所以会先找到Person.class文件并加载到内存中。

2.执行该类中static代码块,如果有的话,给Person.class类进行初始化。

3.在堆内存中开辟空间,分配内存地址。

4.在堆内存中建立对象的特有属性,并进行默认初始化。

5.对属性进行显式初始化

6.对对象进行构造代码块初始化。

7.对对象进行对应的构造函数初始化。

8.将内存地址赋给内存中的p变量。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值