JAVA自学笔记10
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的更多相关文章
- JAVA自学笔记05
JAVA自学笔记05 1.方法 1)方法就是完成特定功能的代码块,类似C语言中的函数. 2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,-){ 函数体; return ...
- JAVA自学笔记06
JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...
- JAVA自学笔记04
JAVA自学笔记04 1.switch语句 1)格式:switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; - default: 语句体n+ ...
- JAVA自学笔记11
JAVA自学笔记11 1:Eclipse的安装 2:用Eclipse写一个HelloWorld案例,最终在控制台输出你的名字 A:创建项目 B:在src目录下创建包.cn.itcast C:在cn.i ...
- JAVA自学笔记14
JAVA自学笔记14 1.正则表达式 1)是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.其实就是一种规则.有自己的特殊应用 2)组成规则: 规则字符在java.util.rege ...
- JAVA自学笔记15
JAVA自学笔记15 @例题1:共有5个学生,请把五个学生的信息存储到数组中,并遍历数组,并获取每个学生的信息 Students[] students=new Student[5]; Student ...
- JAVA自学笔记18
JAVA自学笔记18 1.Map接口: 1)功能: 2) Map<String,String>m=new HashMap<String,String>(); //添加元素,元素 ...
- JAVA自学笔记21
JAVA自学笔记21 1.转换流 由于字节流操作中文不是非常方便,因此java提供了转换流 字符流=字节流+编码表 1)编码表 由字符及其对应的数值组成的一张表 图解: 2)String类的编码和解码 ...
- JAVA自学笔记22
JAVA自学笔记22 1.操作基本数据类型的流 DataInputStream DataOutputStream 数据输出流允许应用程序以适当方式将基本的Java数据类型写入输出流中.然后,应用程序可 ...
随机推荐
- 实践出真知-所谓"java没有指针",那叫做引用!
java没有指针,那我们如何实现动态数组呢? 上篇评论提及 ”不仅有vector,还有ArrayList,还有List,可做选择“. "java没有指针",那叫做引用! 今天尝试了 ...
- 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
从第0行开始,输出第k行,传的参数为第几行,所以在方法中先将所传参数加1,然后将最后一行加入集合中返回. 代码如下: public static List<Integer> generat ...
- 040 Http与RPC
一直在说,但是没有系统的文档理解过. 1.本质 目前有很多Java的RPC框架,有基于Json的,有基于XML,也有基于二进制对象的. 他们最本质的区别,就是RPC主要是基于TCP/IP协议的,而HT ...
- 011 Linux环境下配置eclipse,以及创建maven工程
一:maven的安装 1.安装配置maven环境变量 2.验证 二:eclipse的安装 3.解压配置eclipse 4.启动eclipse,必须在虚拟机的eclipse下启动 5.结果 三:修改配置 ...
- Java 之 Web前端(三)
1.JSP a.全称:Java Server Page b.运行:翻译.编译.类装载.类实例化.(初始化.服务.销毁 (这三点为Servlet的生命周期)) 2.JSP的基本组成 a.HTML模板 注 ...
- Python做性能测试-1、Locust基础篇
前言:说起性能测试,大家想到的基本上都是工具jmeter和loadrunner多少也对执行性能测试的方式有一点认识,这些工具基本都实现了请求-响应-结果统计分析这样完整的测试链路,用户方面只需组织这些 ...
- HDU 2196 Computer (树上最长路)【树形DP】
<题目链接> 题目大意: 输出树上每个点到其它点的最大距离. 解题分析: 下面的做法是将树看成有向图的做法,计算最长路需要考虑几种情况. dp[i][0] : 表示以i为根的子树中的结点与 ...
- Postman 使用技巧之多环境测试及接口依赖关系处理
一.前言 在日常开发中,除了正常的单元测试,某些情况我们还需要测试 HTTP 接口,团队中目前使用的是「 Postman 」这款 API调试 . HTTP 请求工具.通常我们将经常要测试的接口按照项目 ...
- Left join on where 区别
on 后面 直接加条件的话,不会对左边的表产生影响,on条件是在左关联时候的条件,不管如何都会返回左边表中的记录 where 加条件 才会对左边的表 生效.where条件是关联查询之后的条件
- c#接口与抽象类的区别(一)
abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类.抽象类与非抽象类在以下方面是不同的: 抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误.虽然一些变量和值在编 ...