Java——类与对象

类与对象

类与类之间的关系主要有那些?依赖,聚合,继承;
一个类可以有哪些东西?一般来说有属性,方法,构造方法,代码块,内部类。关于类要了解他们的初始化顺序:

父类--静态变量
父类--静态初始化块
子类--静态变量
子类--静态初始化块
父类--变量
父类--初始化块
父类--构造器
子类--变量
子类--初始化块
子类--构造器

注意:在执行之前,所有数据域初始化为默认值。初始化块和变量是按在类中的顺序来执行的。
1.对象与对象变量

  一般通过new关键字来创建一个对象,也就是开辟一块内存,然后返回它的地址值。指向这个地址值的变量称为对象变量。如Date d=new Date(),这里d就是对象变量。与对象有着本质的区别,如Date da;这里da仅仅是一个变量,不能调用方法da.toString(),会编译出错。
   对象变量初始化之后才可以用,两种方式,要么构造新的,要么使用现有的,如Date db=d;这样d和db都引用了同一个对象。
   简单来说,对象就是存储在内存中的数据,对象变量就是引用某个对象的变量而已,甚至可以手动置为null。

2.构造器
构造器总是伴随着new操作符的执行而被调用,其他的特点比如与类名相同啊,没有返回值…
需要注意就是不能在构造器中定义与属性重名的局部变量,

3.方法
3.1隐式参数与显式参数。

public void setId(Integer id) {

        this.id = id;
}

隐式参数,在方法中通常用this表示代表当前对象,这样就可以将局部变量和类属性区分开,而id就是显式的。
3.2参数的传递。
方法的参数一共有两种:基本类型和引用类型,于是就有两种调用。
按值调用:方法接收的是调用者提供的值;
按引用调用:方法接收的是调用者提供的变量地址;
对于方法参数,记住以下三点:
1.方法不能修改基本数据类型的参数。
2.方法可以改变一个对象参数的状态。
3.方法不能让对象参数引用一个新的对象。

关于值传递的示例

public class User{
private String phone;
//省略get,set
}
public class Testpase {


    public static void main(String[] args) {
        //基本数据类型
        int a1 = 10;
        new Testpase().base(a1);
        System.out.println(a1);

        //字符串
        String s1 = "hello";
        new Testpase().string(s1);
        System.out.println(s1);

        //其他对象
        User u=new User();
        u.setPhone("119");
        //new Testpase().other(u);
        new Testpase().oother(u);
        System.out.println(u.getPhone());

        //结论:java中都是按照值传递的,基本类型传递它的值,引用类型传递它所指向的内存的地址值
    }

    /**
     * 基本类型
     * 相当于 int a2=a1; a2=19;
     * a1与a2只是变量名,甚至可以相同
     */
    void base(int a2) {
        a2 = 19;
    }

    /**
     * 字符串引用类型
     * 相当于 
     * String s2=s1;s2="word";s1与s2只是变量名,甚至可以相同.
     */
    void string(String s2) {
        s2 = "word";
    }

    /**
     * 其他引用类型
     * 相当于
     * User user=u;这里的赋值仅仅将u的地址复制给user,他们指向的是同一个内存区域,共享该对象的数据。
     * u.setPhone("911");
     */
    void other(User user){
        user.setPhone("911");
    }

    /**
     * 其他引用类型
     * 相当于 
     * User user=u;user=new User();user.setPhone("911");这里重新开辟了一块内存,赋值给user,即user的地址值被覆盖了
     */
    void oother(User user){
      user=new User();
      user.setPhone("911");
    }


}

final与static
final
修饰类———该类不可改变(不能继承)
修饰变量——–值不可变或引用不会再指向其他对象
修饰方法———-不可修改(不能重写)
static
修饰内部类———可以作为普通类使用(不可修饰普通类)
修饰变量———–所有类实例将共享该变量
修饰方法————不能向对象方法操作,没有隐式参数(this)。如main方法
使用:
工厂方法:当无法命名构造器,或者无法改变所构造的对象类型,就可以使用静态工厂方法来构造对象。如LocalDate.now()可以构造一个LocalDate对象。
常量:使用static+final修饰
this与super关键字
在普通方法中,this表示隐式参数,即所构造的对象,super表示调用父类方法

public void method(int age){
this.age=age;
}

在构造器中,第一个语句形如this(…),表示调用同一类中其他构造器。super表示调用父类构造器。

public class User{
public User(){
this.(...)
...
}
public User(...){
...
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值