面向对象(基础篇)

IDE,集成开发环境

开发工具:

eclipse:绿色、开源、免费的,是一个有多个插口的平台工具,本身不带JDK,必须自己安装JDK。

myeclipse:是一款名叫myeclipse的插件安装到eclipse后的总称,自带JDK ,不需要自己安装JDK。

一、面向对象的基本概念:面向对象=对象+类+继承+消息

抽象数据类型:很多个体相似的或者是相同的特征,以及行为,归纳总结为一种类型,用一堆不同的数据来描述一种新的事务,这种事务就是一种抽象数据类型。

二、类和对象

类:是由属性和方法组成的,实际上一个属性就是一个变量,而方法是一些操作行为。

对象:对象就是类型中的具体个体。实例:现实中:先有对象,再有类型。计算机:先定义的类型,再创建对象。类型是对象的模板,对象是类的具体实例。

创建对象   类名   变量名= new  类名();     //变量中存的是对象的地址信息

属性的访问 : 变量名.属性;        方法的调用  :变量名.方法名();  有参传参

null和NullPointerException:   null是引用类型的默认值,也就是变量空间里没有地址信息

String str="abc" ;    str=null;//清空了地址信息

System.out.println(str.length())//这句语句会出现空指针异常,运行时出现

构造方法(构造器)

构造方法:是类中的特殊方法,方法名与类名一致,没有返回值,类中一定会有构造方法,如果没有提供,系统会默认提供一个无参的构造方法

构造方法定义格式

public  类名(类型1  参数1,类型2   参数2,...){程序语句;}

构造器也可以重载,构造器的作用是给属性赋值(初始化)  

构造器的使用: 类名  变量=new 构造方法  // 1:实例化对象 2 :给成员变量初始化

三 、this关键字和static关键字

this的作用:1、调用本类属性 2、调用本类构造方法(位于构造方法首行) 3、this也可表示当前对象

static :

1、使用static 声明的属性,此属性称为全局变量(也称静态属性),可以使用 类名.static属性  来修改内容。(也称类属性)  可以用static属性统计一个类产生了多少实例化对象

2、使用static 声明方法,也称类方法。注:非static 声明的方法可以调用static 声明的属性或方法,但是static 声明的方法是不能调用非static声明的属性或者方法。

四、JVM内存管理及GC机制

一般JVM规范会分为以下几个区域:1、方法区 2、堆区 3、本地方法栈 4、虚拟机栈 5、程序计数器   jvm所管理的内存有两块,分别是栈,堆,还有一个叫方法区。

1、方法区:jvm虚拟机把所需要的字节码文件加载到方法区里,方法区存的就是类的信息,如方法、属性等。

2、堆:存的是引用类型的对象

3:栈:在运行期间,jvm会给每一个方法单独分配一个空间,这个空间叫栈帧,而方法中所涉及的变量,都在栈帧中进行开辟。当方法结束,栈帧消失。

GC机制(垃圾回收机制):当堆里的对象没有被任何引用变量指向时,会成为垃圾,当这样的对象越来越多,内存剩余空间越来越小,会出现内存溢出(泄露)情况。

System.gc(  ); 是jvm的清洁工,会在内存中游荡,发现垃圾,处理。可以调用这个功能,只是通知。gc处理的时间,程序员说了不算。

五、代码块

1、普通代码块:就是指直接在方法或是语句中定义的代码块

public void CodeDemo01{

    public  static void  mian(String arg[]){

          {                        //定义一个普通代码块

                int  x=30;    //定义局部变量

               System.out.println("普通代码块:"+x)  ;

           }

           int  x=100;        //与局部变量名称相同

            System.out.println("代码块之外:"+x)  ;

     }

}

输出结果:普通代码块:30

                代码块之外:100

2、构造块:是直接写在类中的代码块

class Demo{

    {

         System.out.println("构造块");

     }

     public Demo(){

          System.out.println("构造方法");

    }

}

在主方法生成多个个对象,会得到  构造块    构造方法  、  构造块    构造方法 、构造块    构造方法 的输出结果,可知构造块优先构造方法执行,每次实例化对象都会执行构造块中的代码。

3、静态代码块

class Demo{

    {

         System.out.println("构造块");

     }

    static{ 

       System.out.println("静态代码块");

    }

     public Demo(){

          System.out.println("构造方法");

    }

}

public class   test{

    static{     System.out.println("测试类的静态代码块");}

   public static void main(String arg[]){

       new  Demo();

       new  Demo();

   }

}

创建两个对象,运行程序输出结果:测试类的静态代码块     静态代码块   构造块    构造方法  、  构造块    构造方法 ,由此可知静态代码块优先主方法执行,而在类中定义的静态代码块会优先于构造块执行,不管创建多少个对象,静态代码块只运行一次。


六、Java四大内部类

成员内部类、静态内部类、局部内部类、匿名内部类

1、成员内部类:定义在另一个类(外部类)的内部,而且与成员方法和属性平级叫成员内部类,相当于外部类的非静态方法,如果被static修饰,就变成静态内部类。

2、静态内部类:使用static修饰的成员内部类叫静态内部类

说明

成员内部类

静态内部类

静态成员

静态成员需同时有final关键词修饰

可以

静态方法

不可定义

可以

访问外部类非static属性/方法

外部类名.this.成员方法/属性

不可以

外部类访问内部类

需要通过内部类的一个实例来访问

需要通过内部类的一个实例来访问

创建实例

外部类名.内部类名 实例名 = 外部类实例名.new 内部类构造方法(参数)

外部类名.内部类名 实例名 = new 外部类名.内部类名(参数)

编译后的class文件

单独的class文件(so内部类中的方法和变量可以跟父类的方法和变量同名),外部类$内部类.class

单独的class文件(so内部类中的方法和变量可以跟父类的方法和变量同名),外部类$内部类.class

其他

与外部类平级的类继承内部类时,其构造方法中需要传入父类的实例对象。且在构造方法的第一句调用“外部类实例名.super(内部类参数)”


3、局部内部类:定义在代码块、方法体内、作用域内的类叫局部类。

(1)局部类只能在代码块、方法体内和作用域中使用(如创建对象和使用类对象等)

(2)局部内部类访问作用域内的局部变量,该局部变量需要使用final 修饰。

(3)可以使用abstract修饰,声明为抽象类

4、匿名内部类:没有名字的类,是一个局部内部类,前提要继承一个类或实现一个接口。

(1)只能使用一次,创建实例后,类定义会立即消失(多次使用可以使用反射的知识)

(2)必须继承一个类(抽象、非抽象都行)或实现一个接口。如果父类(或父接口)是抽象类,则匿名内部类必须实现其所有抽象方法。

(3)不能是抽象类,因为匿名内部类在定义之后,会立即创建一个实例。

(4)不能定义构造方法,匿名内部类没有类名,无法定义构造方法,但是匿名内部类具有和父类相同的所有构造方法。

(5)可以定义代码块,拥有实例的初始化,但不能定义静态代码块。

(6)可以定义新方法和属性(不能使用static修饰),但是不能通过实例名.方法名的形式调用,因为new 创建的上转型对象。(父类声明指向子类对象)

(7)是局部内部类,要符合局部内部类的要求。

abstract class Person {
    public abstract void eat();
}
 
public class Demo {
    public static void main(String[] args) {
        Person p = new Person() {
            public void eat() {
                System.out.println("eat something");
            }
        };
        p.eat();
    }
}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值