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. 关于sql和MySQL的语句执行顺序

    sql和mysql执行顺序,发现内部机制是一样的.最大区别是在别名的引用上. 一.sql执行顺序 (1) from (3) join (2) on (4) where (5) group by(开始使 ...

  2. Android抓包方法(转)

    Android抓包方法(转) 作者:Findyou 地址:http://www.cnblogs.com/findyou/p/3491014.html 前言: 做前端测试,基本要求会抓包,会分析请求数据 ...

  3. Spring Boot配置文件放在jar外部

    Spring Boot程序默认从application.properties或者application.yaml读取配置,如何将配置信息外置,方便配置呢? 查询官网,可以得到下面的几种方案: 通过命令 ...

  4. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-2项目说明和源码下载

    本文目录1. 摘要2. Window下运行 3.linux下运行4. 开发记录5. 总结 1.概要 写<Asp.Net Core 2.0 项目实战>系列断断续续已经很长时间了,期间很多朋友 ...

  5. Servlet解决中文乱码问题

    request.setCharacterEncoding("UTF-8"); 并且把这句话放在request.getParameter()之前

  6. String.IsNullorEmpty()方法的使用

    != null 就是不为null !string.IsNullOrEmpty  不是null且不是""(string.Empty)

  7. 上传前端webuploader

    多文件上传时,是有几个文件调用几次方法. 可以设置为单线程.

  8. 关闭selinux服务

    vim /etc/selinux/config 将SELINUX=disabled 执行setenforce 0

  9. 离线下载安装 NLTK 的 nltk_data 模块

    离线下载安装 NLTK 的 nltk_data 模块 转 https://blog.csdn.net/u010167269/article/details/63684137 在 Linux 上使用 N ...

  10. POJ 3122 Pie【二分答案】

    <题目链接> 题目大意: 将n个半径不一但是高度为1的蛋糕分给 F+1个人,每个人分得蛋糕的体积应当相同,并且需要注意的是,每个人分得的整块蛋糕都只能从一个蛋糕上切下来,而不是从几个蛋糕上 ...