构造代码块 在类里面{}
作用是初始化所有对象公有的部分
构造代码块的调用早于构造方法
*/
//匿名类对象 特点是只能使用一次
/**
构造函数
构造方法----类创建一个对象的方法
格式:
类名(参数类型 参数1,参数类型 参数2.。。){
具体语句
}
类是为了创建对象而生
我们是使用new的方式来创建对象
自定义的构造方法是为了提供更多的创建对象的方式
当自定义了构造方法后,系统默认的空参构造方法就消失了
构造方法的目的是初始化我们的对象
构造方法对每一个对象来说,只有在创建对象的时候被执行一次 完成对象的初始化
一般方法不能调用构造方法
构造方法之间可以互相调用
在构造方法之间要防止出现 递归构造器调用
*/
/**
this关键字
this----当前的类对象
this是当前类对象的引用
car.color car是一个引用变量 指的是一个地址
this 也是一个引用 指的也是一个地址
作用:
1:区分同名的成员变量与局部变量
//为了区分同名的成员变量与局部变量,将省略掉的this显示出来
//将局部变量name设置给了成员变量this.name
2:区分当前对象的属性与其他对象的属性
堆里面的值只能通过 对象引用.xxx 这种方式来改变
在类里面如果没有变量冲突的时候,这些成员变量都省略掉了当前类对象的引用this
封装----private---修饰符 private的意思是私有,就是只有自己能直接使用
public----修饰符 public的意思是公有,就是谁都可以使用
封装是将类里面特有属性私有化,提供一些公有的方法来访问
封装的优点:1:将复杂的过程变简单---易于使用
2:提高了代码的安全性
3:提高了代码的复用性
this关键字
this----当前的类对象
this是当前类对象的引用
car.color car是一个引用变量 指的是一个地址
this 也是一个引用 指的也是一个地址
作用:
1:区分同名的成员变量与局部变量
2:区分当前对象的属性与其他对象的属性
一般的类都是为了创建对象
*/
/*封装一个Car类
这个Car是BMW公司的car
为了安全,我们将这些外界不能访问的属性封装起来,防止外界修改成不合理的值
*/
//在局部变量的作用域内,当与成员变量同名时,局部变量优先
//xxx setXxx 设置的方法不需要返回值 但是需要参数 参数类型与属性类型也一致
public void setLunZi(int lunZi){//一般属性的设置方法的参数与属性名相同
//当局部变量与成员变量同名时,需要对成员变量做标识 用关键字this
if(lunZi==4||lunZi==6||lunZi==8)
this.lunZi=lunZi;//this指的是当前对象 在没有冲突的情况下this是可以省略的
/**
static关键字
static---修饰符 静态
static 可以修饰类成员
构造代码块
成员变量
成员方法
当static修饰成员变量时,这个成员变量也叫类变量
如果这个成员变量对于所有的对象而言,都是一样的值
这时候就将这种成员变量定义为静态成员变量
静态成员变量与成员变量的区别
1:存储位置的不同,静态存储在方法区 而成员变量存储在堆中
2:生命周期不同,静态的变量随着类的加载而加载,随着类的消亡而消亡
成员变量的生命周期是随着对象的产生而产生,消亡而消亡
3: 静态成员变量可以使用类名.变量名来直接调用 不用对象也可以
static修饰成员方法
静态成员方法只能访问静态成员,不能访问非静态成员
不能访问非静态的原因
静态成员在类加载的时候就加载了,非静态成员只有在创建对象时才有
静态成员的加载早于非静态成员
非静态成员是可以调用静态成员的
因为静态成员加载早于非静态成员
static 修饰构造代码块
静态构造代码块只执行一次,而且是在类第一次加载的时候执行
构造代码块在创建新对象时就会被调用
加载顺序 静态代码块 构造代码块 构造方法
*/
/*
* 静态成员变量与成员变量的区别
1.静态成员变量存储在方法区,而成员变量存储在堆中
2.静态变量随着类的加载而加载,随着类的消亡而消失
3.成员变量是属于对象的,产生消亡同样随着对象改变
4.静态成员变量:className.变量名或直接
成员变量:实例对象.成员
静态方法不可以访问非静态成员变量,只能访问静待的
静态方法无法访问非静态的。
静态成员早于非静态成员,静态成员在类加载时加载,非静态创建对象时加载
* 非静态成员是可以调用静态成员的,静态成员早于非静态
构造代码块值创建一次,执行一次
静态代码块之执行一次
*
*
*/
class ChinaPerson
{
static String guoJi="cn";
String name;
int age;
{
System.out.println("我是构造代码块---1");
}
ChinaPerson(){
System.out.println("我是构造方法");
}
static{
System.out.println("我是静态代码块");
}
{
System.out.println("我是构造代码块---2");
}
public String getName(){
{
System.out.println("我是局部代码块-----1");
}
System.out.println(guoJi);
ChinaPerson.getGuoJi();
{
System.out.println("我是局部代码块----2");
}
return name;
}
public static String getGuoJi(){
{
System.out.println("我是静态方法的代码块");
}
// static {
// System.out.println("我是静态方法的静态代码块");
// }
System.out.println(guoJi);
return guoJi;
}
public static void main(String[] args)
{
{
System.out.println("我是main方法中的局部代码块");
}
System.out.println(ChinaPerson.guoJi);
ChinaPerson p=new ChinaPerson();
p.getGuoJi();
//System.out.println(p.guoJi);
p.name="斌哥";
p.getName();
ChinaPerson.getGuoJi();
//ChinaPerson p1=new ChinaPerson();
//p1.getGuoJi();
}
}