JAVA自学笔记10

1、形式参数与返回值

1)类名作为形式参数(基本类型、引用类型)

作形参必须是类的对象

2)抽象类名作形参

需要该抽象类的子类对象,通过多态实现

3)接口名为形参

需要的是该接口的实现类对象

4)类名作返回值类型

返回的是该类的一个对象

class StudentDemo{
public Student getStudent(){
return new Student()}//匿名对象,返回一个student类型
}
//创建该类的对象并调用该对象的getStudent()方法即可创建Student对象

5)抽象类名作返回值类型

返回的是抽象类的子类对象,该子类不是抽象类

abstract class Person{
public abstract void study();
}
class PersonDemo{
public Person getPerson(){
return Person的子类名(需先定义);
}
}

6)接口作返回值类型

返回的是该接口的实现类对象

2、链式编程

1)每次调用方法完毕后返回的是一个对象

3、包(package)

1)本质是文件夹

2)目的是对类进行分类管理

3)可按模块分也可按功能分

4)格式:package 包名;

多级包用.分开

5)注意事项:package语句必须是程序的第一条可执行的代码

package语句在一个java文件中只能有一句

如果没有package,默认无包名

6)编译与运行

A.手动式:

编写一个带包的Java文件

通过Javac命令编译该java文件

手动创建包名

把第二步骤生成的class文件放到第三步骤的最底层包

回到与包根目录在同一目录的地方,带包名运行

B,自动式:javac编译时带上-d即可,即

javac -d.包名.java

系统将自动创建相关文件夹,运行方式与手动式一样

7)不同包下类之间的访问:(导包)

import (所在包名).包名;//用什么包就导入什么包,这种方式导入是到类的名称

之后需创建关于该类的名称

先后顺序:package*(只能有一个)>import(可以有多个)>class(可以有多个,建议是一个)

4、修饰符

1)

2)class前加public

3)状态修饰符:static/final

4)抽象修饰符 abstract

5)对于类,只能使用默认的或public权限修饰符,不能使用static修饰符,其余的可以,常用public

6)对于成员变量,除abstract外所有修饰符均适用,常用private

7)对于构造方法:不允许适用static/final/abstract,只能使用权限修饰符修饰,常用public

8)对于成员方法:可被所有修饰符修饰,常用public

9)除此之外的组合规则:

成员变量:public static final//d定义静态成员变量

成员方法:public static

public absrtact

public final

5、内部类

1)把类定义在其他类的内部,这个类就被称为内部类

2)内部类可以直接访问外部类的成员,包括外部类私有的

但外部类若要访问内部类的成员,则必须创建对象

3)位置:

成员位置类:在成员位置定义的类被称为成员内部类

在测试类中要直接使用内部类,需经外部类允许:

外部类名.内部类名 对象名=new 外部类构造方法名().内部构造方法名();

Outer.Inner oi=new Outer().new Inner();

局部位置类:在局部位置定义的类,被称为局部内部类

4)成员内部类的常见修饰符:private 为了保证数据的安全性,修饰成员变量

static使数据访问更加方便,修饰内部类,因为内部类可以看作是外部类的成员

__被静态修饰的成员内部只能访问外部类的静态成员

__内部类被静态修饰后的成员方法可以有静态的也可以有非静态

静态内部类访问的外部类数据必须用静态修饰

成员内部类被静态修饰后的访问方式是:

外部类名.内部类名 对象名=new 外部类名.内部类名();

不能再使用new 外部类名().new 内部类名();方式访问

调用静态内部类内某一静态成员方法时也可使用

外部类名.内部类名.方法();

来调用

@例题1:

补齐程序,注意内部类与外部类间不存在继承关系

class Outer{
public int num=10;
class Inner{
public int num=20;
}
public void show(){
int num=30;
System.out.println(___);
System.out.println(___);
System.out.println(___);
}}}

使程序依次输出30、20、10,请完善以上代码

num

this.num

new Outer().num//不是讲台变量,只能通过创建匿名对象来访问

或Outer.this.num

5)局部内部类(定义在成员方法内)来访问局部变量

可以直接访问外部类的成员

在局部位置,可以创建内部类对象,通过对象调用内部类的方法,来使用局部内部类功能

@例题2:局部内部类访问局部变量的注意事项

局部内部类访问的局部变量必须用final修饰

因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立刻从堆内存中消失,还要使用那个变量。为了让数据还能继续被使用,就用final修饰,这样在堆内存里面存储的其实是一个常量值。通过反编译工具可以看一下

6)匿名内部类

①是内部类的简化方法

前提是存在一个类或者接口,可以是具体类也可以是抽象类

格式: new 类名或者接口名(){重写方法};

本质:是一个继承了该类或者实现了接口的子类匿名对象

②匿名内部类方法的调用



直接在匿名对象后调用(要在构造完匿名对象后加分号),但只能调一次

对需要调用多个方法时,需定义类或接口的对象,通过该对象来调用(多态的思想)

③在开发中的应用:作为实现类成员方法的参数,在参数列表内直接定义匿名内部类,套用①中格式即可

@例题3:匿名内部类面试题:

按照要求,补齐代码

interface Inter { void show(); }

class Outer { //补齐代码 }

class OuterDemo {

public static void main(String[] args) {

Outer.method().show();

// Outer.method()可以得知method是outer 中的一个静态方法,返回的是一个对象。又由于接口Inter中有一个show()方法,所以我认为method()方法的返回值类型

}

}

要求在控制台输出”HelloWorld”

JAVA自学笔记10的更多相关文章

  1. JAVA自学笔记05

    JAVA自学笔记05 1.方法 1)方法就是完成特定功能的代码块,类似C语言中的函数. 2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,-){ 函数体; return ...

  2. JAVA自学笔记06

    JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...

  3. JAVA自学笔记04

    JAVA自学笔记04 1.switch语句 1)格式:switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; - default: 语句体n+ ...

  4. JAVA自学笔记11

    JAVA自学笔记11 1:Eclipse的安装 2:用Eclipse写一个HelloWorld案例,最终在控制台输出你的名字 A:创建项目 B:在src目录下创建包.cn.itcast C:在cn.i ...

  5. JAVA自学笔记14

    JAVA自学笔记14 1.正则表达式 1)是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.其实就是一种规则.有自己的特殊应用 2)组成规则: 规则字符在java.util.rege ...

  6. JAVA自学笔记15

    JAVA自学笔记15 @例题1:共有5个学生,请把五个学生的信息存储到数组中,并遍历数组,并获取每个学生的信息 Students[] students=new Student[5]; Student ...

  7. JAVA自学笔记18

    JAVA自学笔记18 1.Map接口: 1)功能: 2) Map<String,String>m=new HashMap<String,String>(); //添加元素,元素 ...

  8. JAVA自学笔记21

    JAVA自学笔记21 1.转换流 由于字节流操作中文不是非常方便,因此java提供了转换流 字符流=字节流+编码表 1)编码表 由字符及其对应的数值组成的一张表 图解: 2)String类的编码和解码 ...

  9. JAVA自学笔记22

    JAVA自学笔记22 1.操作基本数据类型的流 DataInputStream DataOutputStream 数据输出流允许应用程序以适当方式将基本的Java数据类型写入输出流中.然后,应用程序可 ...

随机推荐

  1. MediatR

    1.MediatR是什么? 微软官方eshopOnContainer开源项目中使用到了该工具, mediatR 是一种中介工具,解耦了消息处理器和消息之间耦合的类库,支持跨平台 .net Standa ...

  2. PHP Manager 安装失败的解决方法, PHP Manager 1.4 for IIS 10,经验证支持windows server 2016版本

    // 另有无需进行修改注册表的安装包,经测试最高支持Windows Server 2016 版本,下载地址如下: https://github.com/EnhWeb/PHPManager/tree/m ...

  3. MVC和Web API 过滤器Filter

    MVC和Web API Filter(过滤器) ASP.NET MVC 支持以下类型的操作筛选器: ·        授权筛选器.这些筛选器用于实现IAuthorizationFilter和做出关于是 ...

  4. sparkStreaming消费kafka-1.0.1方式:direct方式(存储offset到zookeeper)-- 2

    参考上篇博文:https://www.cnblogs.com/niutao/p/10547718.html 同样的逻辑,不同的封装 package offsetInZookeeper /** * Cr ...

  5. scrapy 基础使用以及错误方案

    原先用的是selenium(后面有时间再写),这是第一次使用scrapy这个爬虫框架,所以记录一下这个心路历程,制作简单的爬虫其实不难,你需要的一般数据都可以爬取到. 下面是我的目录,除了main.p ...

  6. lvs介绍

    1Linux集群及系统扩展的方式概述 集群是有多台服务器组织在一起,一起工作,因为单台服务器的并发响应能力是有限的,响应处理能力也是有限的所有有了集群的出现 在系统扩展有2种方法: 1 向上扩展:是指 ...

  7. Python 高级面向对象

    一.字段 1.字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同. a.普通字段属于对象(实例变量) b.静态字段属于类(类变量) 二.属性 对于属性,有以 ...

  8. 002 如何在一台PC上装两个版本的python

    在之前学习爬虫的时候,使用的是python2.7,现在主流已经是3.7了. 在这里,写了一下如何在2.7的基础上安装python3.6 一:检查python版本 1.cmd 二:安装python3 1 ...

  9. 20165220 实验三 敏捷开发与XP实践 实验报告

    实验三 敏捷开发与XP实践-1 实验要求: 实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA ...

  10. 最佳linux文件WINDOWS上传下载方法

    通常,利用SSH管理远程Linux服务器时,经常需要与本地交互文件.当然,我们可以利用FTP方式,比如通过Filezilla客户端软件.不过直接使用SSH软件(SecureCRT.Xshell)自带的 ...