A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© boluofan 初级黑马   /  2018-6-15 17:19  /  1254 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

       类(class)和对象(Object)

类的定义
1.        最简单的类:class Person{ }

class Person{
private int age;//成员变量
private String name;
public void setAge(int age)
{
    this.age=age;
}
public void setName(String name)
{
    this.name=name;
}
public void sayHello()
{
    System.out.println(“大家好,我是”+name+“我今年”+age+“岁了”);
}
}
1.        一个Java文件中只能定义一个public的class,且文件名必须和public类一样

对象的创建

Person wnm=new Person();
wnm.setName("王尼玛");
wnm.setAge(18);
wnm.sayHello();

Person wsc=new Person();
wsc.setName("王思聪");
wsc.setAge(80);
wsc.sayHello();
//两个对象的内存分配:根据模板类拷贝两份。
wnm.sayHello();
每new出的每个对象都是一个单独的实例,两个对象之间的成员变量是独立的两份。new出来的叫类对象或者实例(Instance)

类对象是引用传递
Person personOne=wnm;
personOne.setAge(28);
personOne.sayHello();
wnm.sayHello();
解释:“Person personOne=wnm;”personOne指向wnm当前所指向的对象;

成员变量和局部变量
public void setAge(int age)
{
     this.age=age;
}
1、局部变量必须初始化,成员变量声明时默认初始化,基本数值类型默认初始化为int,String等非基本类型初始化为null。
2、当成员变量和局部变量(函数参数也可以看做局部变量)重名的时候,都会被看做局部变量,因此为了避免混乱,建议访问成员变量的时候加上“this”,this代表当前类。
3、new Person().sayHello();创建一个匿名对象,然后调用。左侧没有变量名和 = ,只能赋值并使用有一次。

private/public
1.        我们可以把age成员变量声明为public,也可以用private修饰私有化变量age,这样就只能在类内部直接调用private成员(外部调用需要再使用get、set方法)
2.        结论:public成员可以被类内部或者外部访问,private成员只能被类内部访问,这样可以保护不希望外界调用的内部成员不被外界直接访问,并可以进行条件筛选。

构造函数(Constructor)
1.        构造函数是创建类对象,并且在创建完成前对类进行初始化的特殊函数。如果定义类时没有声明构造函数,默认会给出一个无参构造函数,如果定义了任意一个构造函数,将不会提供默认的无参构造函数。
2.        构造方法格式及特点:

           方法名必须和类名一致
           没有返回值类型
     3、构造函数可以重载,Person(String  name,int  age)
     4、用构造函数初始化和new之后通过set变量名 初始化的区别:语意,有的对象生来就要有一些成员变量被赋值的

静态static
1.        一些场景下会要求一个类的多个实例共享一个成员变量;有时候要定义“常量”,但是Java没有提供常量;有时候想定义一些不和具体对象关联、不需要new就调用方法
2.        static方法不需要new就可以直接通过类名调用。
3.        static变量不需要new就可以直接通过类名调用。
4.        static 方法中无法使用this关键字,因为static独立于对象存在,不是任何人的唯一。
5.        static成员中只能访问static成员,不能直接访问非static成员。非static成员可以访问static成员。


类的静态代码块
class MyTest
{
     static
{
  System.out.println(“zi 静态代码块”)
}
public MyTest()
{
   System.out.println(“zi 构造方法”)
}
}
MyTest t1=new MyTest();
MyTest t2=new MyTest();
静态代码块在类第一次被使用的时候执行一次,并在构造函数执行之前执行。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马