`

5、java类与对象

 
阅读更多
1、包、接口、抽象类、类、封装类、内部类、对象、this、单列、堆
2、访问权限:public、protected、default、private
3、全局(类)变量、成员变量、局部变量
4、静态(类)方法、构造方法、成员方法、主方法、主调方法、被调方法、栈、实例方法、抽象方法。
5、静态块、块、方法块
6、基本数据类型、引用数据类型
7、方法重构、复写
8、封装、继承(上下转型)、多态、抽象
9、super、final
10、类加载、垃圾回收
11、反射、注解
12、线程
13、异常


QA:1、引用数据类型的值跟随调用而改动。
       2、局部变量不受其他局部变量影响。

---->构造方法:
     构造方法是特殊的方法:
                     1、没有实例时,也可以被调用,具有static属性;
                     2、使用this可以调用其他构造|成员|私有方法
                     3、构造方法名与类名相同
                     4、构造方法没有返回值
                     5、不能用static、abstract、final关键字
                     6、使用super()可以调用父类构造|成员方法;【默认调用无参构造】

---->多态:
     多态是基于继承而来的,一个基类可以有不同的子类,呈现出不同的类型。


---->this:
     增加可读性<-->可维护性;(String name){ this name = name;}
     在编写代码时,多使用this关键字。
     this代表当前对象,不可在该对象之外使用。

---->全局变量:
     任何一个对象取得这个变量的值是一致的,任何一个对象修改该变量,全局修改。
     使用A.age 可以获得,也可以使用某个对象 c.age也可以获取到;
     全局变量在类初始化阶段加载到堆(Class 的堆)内存中,只执行一次。
     类块也是在类初始化阶段执行的。
     全局变量的初始值为 0,"",false等。
     使用场景:统计、特殊需求;
     全局变量的访问时通过Class的实例访问,而不是类的实例。

---->类初始化
     初始化发生条件:1、该类存在主方法
                     2、类加载
                     3、调用构造方法、class实例化之前初始化

---->类方法:
     为什么使用类方法?因为每个方法在每个对象实例时都会开销少许内存,当创建过多对象,就会造成资源浪费,特别对于操作返回值一致的方法,应该使用类方法,减少资源开销。
     静态方法只加载一次在栈内存中。

---->块:
     从上面的知识可知,静态块和全局属性在类加载时执行,而构造方法在实例化时执行,那么块在什么时候执行呢? 答案:在实例化阶段执行,在构造方法前执行,即在每执行一次构造方法前都会执行。

---->封装:
     将对象的变量和某些方法设置为private的,通过其他授权的(public)成员方法来访问。

---->访问权限:
     public可以修饰类、全局|成员变量、构造方法、成员方法,被public修饰的成员,可以在任何一个类中被调用。
     protected可以修饰 全局|成员变量、构造方法、成员方法,不能修饰类(此处指外部类,内部类除外)。被protected修饰的成员,能被同包的类调用。如果有不同包的类想调用它们,那么这个主调类必须是(protected)的子类。
     default可以修饰类、全局|成员变量,构造方法、成员方法、局部变量,默认权限即同包权限,同包类的子类可调用,不同包的子类不能调用。
     private可以修饰 全局|成员变量,构造方法、成员方法,不能修饰类(此处指外部类,不考虑内部类)。被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用。

---->继承:
    
---->方法的重载:
     条件:在同一个类中,方法名相同,参数类型不同,参数个数不同,而返回值不同其他相同会编译错误(即仅仅返回类型不一样不能构成重载)。

---->方法的复写override:
     有时也叫方法覆盖。
     条件:发生在继承中,方法名相同,参数类型相同,参数个数相同,访问权限不能比父类严格。

---->抽象类:
     父类方法不确定是否使用时,可以使用abstract修饰。
     抽象类可以有实例方法。

---->接口:
     接口是没有实例方法的封装类,接口不能继承类,可以继承接口
     接口中可以声明变量
     在interface里面的变量都是public static final 的,可以简写为:int X =1;
     1.接口中的变量为什么要用static关键字修饰?
       接口不能被实例化,不使用static修饰则无法变量加载到堆内存中,故不能对其访问。
     2.接口中的变量为什么样final关键字修饰?
       因为变量是被static修饰的,每个对象的修改都会造成全局修改,而影响到其他对象的使用,必须使用final修饰。
     3.体现的设计模式:对修改关闭,对扩展开发(关闭原则)。
                       多态
                       低耦合
     4.上面说到接口不可实例化,而
         Runnable runnable = new Runnable(){
                       public void run() {
  }
    };
        这种写法是Java匿名内部类的用法。对于一个接口,他就是实现;对于类,他就是继承。这种匿名类向上转型为Runnable
          //将runnable向下转型,Thread有专门的构造方法向下转型Thread(Runnable target)
            new Thread(runnable)
        


---->final:
     不希望被继承
     不希望子类复写某些方法
     不希望修改某些变量

---->Exception:
     java通过异常类型表示不同的异常,
     处理异常的2中方法:catch后处理{throw e;//又抛给主调方法}
                       抛给主调方法处理
     发生异常情况:编译异常
                   运行时异常
                   error
     异常都是Throwable的子类
     //虽然建议我们最小捕获,但是我们有时并不知道要报什么异常,就用exption;
     自定义异常:
         throw new Exception("出现异常了!");
         String ss () throws Exception{}
     finally{}
     finally一般会执行,是一个万能的保险,在try语块中若有有系统退出这样的语句,finally语句块不会执行。
     在try{}中有return但是在return前发生了异常,则此return不会执行,就要在finally{}添加return ;若无异常则在try{}中的return之前执行finally里中的return,之后try{}中的return不会再执行。

public static void main(String[] args) {
		int s =0;
		try
		{
			 s=ss(0);
			 System.out.println("没有异常");
		}
		catch(Exception e)
		{
			System.out.println("有异常");
			e.printStackTrace();
		}
		finally
		{
			System.out.println("[[]");
		}
	}
	
	static int ss (int i) throws Exception  
	{
		try{
			int x= 4/i;
			System.out.println("这里还是回执行的");
			return x;
		}catch(Exception e)
		{
			System.out.println("抛出异常?");

			throw new Exception("报异常");
		}
		finally
		{
			return 3;
		}
	}

    我测试了下,下面的finally执行之后就不报异常,不添加finally 主方法可以捕获异常,应该是主方法觉得在s已经获得正确的值,没有捕获异常的必要,就没有去执行捕获,不知道这样解释对不对
    网上搜了下,就是不要在finally里添加retrun语句。If you return in a finally block then any Throwables that aren't caught (in a catch block that is part of the same try statement as the finally block) will be completely lost. The really bad part about this is that it looks so innocent. I can think of no reason to return in a finally clause. If nothing else, catch(Throwable t) and return in that so it is obvious what is happening. Note this also applies to other things that transfer control (continue, throw, etc).

---->线程(第8节详解)


  • 大小: 5.2 KB
分享到:
评论

相关推荐

    JAVA类与对象及数组习题

    JAVA类与对象及数组习题 JAVA类和对象及数组是JAVA编程语言的基础概念。下面是关于JAVA类和对象及数组的习题,涵盖了构造方法、继承、多重继承、变量声明、数组初始化等方面的知识点。 1. 构造方法的调用方式: ...

    java类与对象教学(2)

    在“java类与对象教学(2)”中,我们将深入探讨几个关键知识点:对象重构、`this`关键字、静态变量与静态方法,以及对象的进一步讨论和包的使用。 1. **对象重构**: 重构是改进代码结构的过程,不改变其外部行为,...

    Java 面向对象 练习题与答案

    Java 面向对象编程练习题与答案 本资源摘要信息涵盖了 Java 面向对象编程的多个知识点,包括 Font 类、Toolkit 类、包机制、抽象类、数组操作等。 1. Font 类: Font 类是 Java 中的一个类,用于设置程序中的字体...

    JAVA类与对象及数组习题及答案.pdf

    在本段内容中,我们将会讨论Java编程语言的基础知识点,包括类和对象的使用、基本数据类型、数组、方法的定义和调用等。...这些题目和答案能够帮助初学者加深对Java类、对象和数组以及一些基础编程概念的理解。

    Java面向对象程序设计课后答案全解

    5. **构造器**:构造器用于初始化新创建的对象,通常与类同名且无返回类型。学习何时、如何以及为什么使用构造器是理解对象生命周期的关键。 6. **抽象类与接口**:抽象类用于定义一个通用的模板,不能被实例化,但...

    java编程中的类和对象的详细介绍

    2. **面向对象与面向过程的区别** - **面向过程**关注解决问题的步骤,通过一系列函数调用来逐步实现任务,更注重执行流程。 - **面向对象**关注功能模块,通过类来组织代码,每个类代表一个功能或对象,强调功能...

    Java调用c++类对象

    在Java中,我们需要创建一个Java类,该类包含一个或多个被声明为native的方法。例如: ```java public class JniWrapper { static { System.loadLibrary("cppLibrary"); } public native void callCppMethod()...

    Java面向对象程序设计

    2. **类与对象**:类是创建对象的模板或蓝图,定义了一组相关的属性(数据成员)和方法(成员函数)。对象则是类的实例,具有类定义的属性和行为。 3. **封装**:封装是面向对象的核心特征之一,它隐藏了对象内部的...

    再发一些Java对象、Java类学习实例.rar

    在这个"Java对象、Java类学习实例.rar"压缩包中,你可能会找到一系列针对初学者的实例,帮助理解这两个概念。 首先,我们要了解Java中的对象。在Java中,一切皆为对象。一个对象代表了现实世界中的一个实体,它可以...

    xml文件自动转成java对象工具

    XML文件自动转换为Java对象工具是一种实用的开发辅助软件,它可以帮助程序员快速地将XML数据映射到Java类,从而简化了数据处理的过程。在Java开发中,XML常被用作数据交换格式,但手动编写Java类来表示XML结构既耗时...

    ACCP5.0S2教程\使用Java实现面向对象编程(Java OOP)\使用Java实现面向对象编程(Java OOP)上机贯穿案例源码

    1. **类与对象**:在Java中,类是创建对象的模板,对象则是程序运行时的实体。学习者应理解如何定义类,包括属性(成员变量)和方法(成员函数),以及如何实例化对象。 2. **封装**:封装是隐藏对象内部的细节,只...

    java面向对象测试题含答案.docx

    本资源摘要信息涵盖了 Java 面向对象编程的基础知识点,包括类和对象之间的关系、类的声明、方法的声明和使用、构造方法、面向对象编程的基本概念等。 1. 类和对象之间的关系:类和对象之间存在抽象和具体的关系,...

    Educoder题目:Java面向对象 - String类答案解析.md

    Educoder题目:Java面向对象 - String类答案解析

    Java面向对象精髓编程

    Java面向对象精髓编程是Java开发的核心概念,它涵盖了类、对象、封装、继承、多态等关键要素。本文将深入探讨这些概念,并结合实际案例,帮助初学者从零开始掌握Java编程。 首先,我们从“Hello, World!”开始。这...

    面向对象与Java实现(类、对象、构造方法

    面向对象与Java实现:类、对象、构造方法详解 面向对象程序设计(Object-Oriented Programming,简称OOP)是一种先进的软件设计思想,其核心在于将现实世界中的事物和概念映射到计算机程序中,通过类(Class)和...

    Java面向对象程序设计(第二版)

    综上所述,《Java面向对象程序设计(第二版)》所涉及的知识点大致涵盖了面向对象编程的核心概念、类与对象、接口与抽象类、包的使用、异常处理机制、集合框架,以及I/O操作等。这些知识点构成了Java编程语言的基础...

    Java语言面向对象程序设计实验指导与习题答案

    5. **抽象类与接口**:抽象类是一种不能被实例化的类,它用来作为其他类的基类,包含抽象方法和非抽象方法。接口则是一种完全抽象的类型,只包含方法签名,不包含实现,它可以被多个类实现。 6. **构造器**:构造器...

    java对象和类对象和类

    在Java编程语言中,"对象"、"类对象"和"类"是核心概念,它们构成了面向对象编程的基础。理解这些概念对于任何Java开发者来说都至关重要。 首先,我们来谈谈"对象"。在Java中,对象是类的实例。它是程序运行时的数据...

Global site tag (gtag.js) - Google Analytics