Java基础知识全面总结(第一章)

 第一章:类与对象

第一课:什么是面向对象编程

1.面向对象编程和面向过程编程的区别

  无论是面向过程编程还是面向对象编程都是用于解决一个实际问题,当面向过程编程在解决一个问题时,更多的情况下是不会做出重用的设计思考的;而面向对象的设计形式为模块化设计,并且可以进行重用配置,在整个面向对象的设计里面更多考虑的是标准。

2.面向对象设计的三个主要特征

封装性:内部的操作对外部来说不可见,当内部的操作都不可以直接使用的时候才是安全的。

继承性:在已有的结构基础上继续对功能进行扩充

多态性:是在继承性的基础上扩充的概念,指的是类型的转换处理。

第二课:类与对象

1.类与对象的概念

类是对某一类事物共性的抽象概念,而对象描述的是一个具体的产物。先有类后有对象。

例:人可以看成是一个类,小学生李明就是一个对象。

2.类的组成

成员属性(Field):可简化为属性

例:一个人的年龄,身高,体重

操作方法(Method):定义对象具有的处理行为

例:一个人可以游泳,唱歌。跳舞

第三课:类与对象的定义与使用

1.类的定义

范例:

//定义一个类
class Person{
    private String name;//类的成员属性姓名
    private int age;//类的成员属性年龄

    /**
     * 类的方法,输出姓名和年龄
     */
    public void Tell(){
        System.out.println(age+"  "+name);
    }
}

在范例中定义了一个类Person,类里面定义了成员属性name(姓名),age(年龄),以及类的操作方法Tell(输出成员属性)。

2.对象的定义

方法一:类的名称 对象名称=new 类的名称();

方法二:类的名称 对象名称=null;

对象名称=new 类的名称();(推荐使用)

范例:

//对象的定义方式一
Person person=new Person();
//对象的定义方式二
Person person1=null;
person1=new Person();

3.类与对象的使用

范例:

//对象的定义方式一
Person person=new Person();
//给对象1赋值
person.name="李明";
person.age=18;
//使用对象1调用类的方法
person.Tell();
//对象的定义方式二
Person person1=null;
person1=new Person();
//给对象2赋值
person1.name="张三";
person1.age=20;
//使用对象2调用类的方法
person1.Tell();

4.完整代码

public class Main {
    public static void main(String[] args) {
        //对象的定义方式一
        Person person=new Person();
        //给对象1赋值
        person.name="李明";
        person.age=18;
        //使用对象1调用类的方法
        person.Tell();
        //对象的定义方式二
        Person person1=null;
        person1=new Person();
        //给对象2赋值
        person1.name="张三";
        person1.age=20;
        //使用对象2调用类的方法
        person1.Tell();
    }
}
//定义一个类
class Person{
    public String name;//类的成员属性姓名
    public int age;//类的成员属性年龄
    /**
     * 类的方法,输出姓名和年龄
     */
    public void Tell(){
        System.out.println(age+"  "+name);
    }
}

输出结果:

第四课:对象内存分析

Java中的类属于引用数据类型,引用数据类型主要保存在堆内存和栈内存中。

堆内存:保存引用数据类型的具体对象信息;堆内存的空间开辟是通过new关键字进行的。

栈内存:保存的是堆内存的地址信息;即通过地址信息找到堆内存,而后找到对象的具体内容。

范例:

1.对象的定义方式一

//对象的定义方式一
Person person=new Person();
//给对象1赋值
person.name="李明";
person.age=18;
//使用对象1调用类的方法
person.Tell();

分析:代码“Person person=new Person();”中new Person()开辟了一个堆内存空间,代码“Person person”把开辟的堆内存的地址信息以person为名称存入在栈内存中(见下图)。

代码“person.name="李明";person.age=18;”是以栈内存中名称为person的对象所代表的地址在堆内存中寻找地址,并给地址内的具体信息赋值。

2.对象的定义方式二

//对象的定义方式二
Person person1=null;
person1=new Person();
//给对象2赋值
person1.name="张三";
person1.age=20;
//使用对象2调用类的方法
person1.Tell();

内存分析:代码“Person person1=null;”是先开辟一个栈内存名称为person1,但这个时候person1并没有指向任何堆内存空间(图一),这个时候对象person1不能给对象信息赋值,否者会报指针异常。只有当代码“person1=new Person();”执行后,person1才能指向具体的堆内存空间(图二)。给对象赋值的内存结构流程基本方法与方式一相同。

第五课:对象引用分析

1.引用传递(方式一)

代码:

 Person person=new Person();
 //给对象person赋值
 person.name="李明";
 person.age=18;
 //引用传递
 Person person1=person;
person1.age=80;
person.Tell();

输出结果:

分析:代码“ Person person=new Person();”表示在堆内存中开辟了一片内存空间,在栈内存中有一个person指向开辟的堆内存。代码“ person.name="李明";person.age=18;”给推内存中的对象信息赋值,代码“ Person person1=person;”表示把对象person所指向的堆内存地址赋值给person1,那么person1和person就指向同一片堆地址空间;代码“person1.age=80;”是利用栈内存对象person1修改对应的堆内存的对象信息。此过程结束后person和person1都会指向同一片地址空间。

2.引用传递(方式二)

代码:

 public static void main(String[] args) {
        Person person=new Person();
        //给对象person赋值
        person.name="李明";
        person.age=18;
        //引用传递
//        Person person1=person;
       tempPerson(person);
       person.Tell();
    }
    public static void tempPerson(Person person1){
  person1.age=80;
    }
}

输出结果:

方式二是通过方法用参数进行引用传递,与方式一不同的是,方法结束后,person1指向堆内存的连线会断开,也就等于person1只有在方法中才会指向堆内存。

完整代码:

public class Main {
    public static void main(String[] args) {
        Person person=new Person();
        //给对象person赋值
        person.name="李明";
        person.age=18;
        //引用传递
//        Person person1=person;
       tempPerson(person);
       person.Tell();
    }
    public static void tempPerson(Person person1){
  person1.age=80;
    }
}
//定义一个类
class Person{
    public String name;//类的成员属性姓名
    public int age;//类的成员属性年龄
    /**
     * 类的方法,输出姓名和年龄
     */
    public void Tell(){
        System.out.println(age+"  "+name);
    }
}

第六课:引用与垃圾产生分析

垃圾的产生:所谓的垃圾空间指的是没有栈内存指向的堆内存空间就是垃圾空间;所有的垃圾空间会被GC(垃圾收集器)不定期回收。

范例:

代码:

 Person person1=new Person();
 //给对象person1赋值
 person1.name="李明";
 person1.age=18;
 Person person2=new Person();
 person2.name="张三";
 person2.age=20;
 person2=person1;
 person2.age=50;
person1.Tell();

分析:这段代码分定义了类Person的两个实例person1和person2,并给两个实例都做了赋值,接着把person1的值赋给person2,赋值后的person2就不再指向原地址,而是和person1指向同一地址,原来的地址空间就变成了垃圾空间。

输出结果:

第二章链接:Java基础知识全面总结(第二章)-优快云博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

psjasf1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值