一、匿名对象

概念:匿名对象是指在创建对象时,只有创建的语句,却没有把对象地址值赋给某个变量。

特点:

(1)匿名对象直接使用,没有变量名。当做形参使用。

new Person().name="张三";

(2)匿名对象只能调用一次方法,再次调用相当于又创建了一个新的匿名对象

new Person().setName("小明");
System.out.println(new Person().getName()); //输出为空,因为又创建了一个新的匿名对象,跟上一个并没有关系

(3)作为返回值使用传递

public Person getPerson(){
//Person p=new Person(); //这一步骤省略直接用匿名对象来做返回值
//return p;
return new Person();
}

实例:

package com.oracel.demo03;
//匿名对象 自定义类
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean compare(Person p){
return this.age==p.age;
}
//匿名对象作为返回值来传递
public Person getPerson(){
//Person p=new Person();
//return p;
return new Person();
}
}
package com.oracel.demo03;
//测试类
public class Test {
public static void main(String[] args){
//有名对象
// Person p=new Person();
// p.setName("张三");
// p.getName();
// //匿名对象(只能调用一次方法) new:创建 Person():对象 合起来就是创建对象
// new Person().setName("阿莱");
// System.out.println(new Person().getName());
// //匿名对象当做形参传递
// p.compare(new Person());
//匿名对象的三个作用:1.调用一次方法2.当做形参传递3.作为返回值来传递
}
}

二、内部类

概念:将类写在其他类的内部,可以写在其他类的成员位置或局部位置,称为内部类,而“其他类”则称为外部类。

什么时候会使用?

在描述一个事物时,若事物内部还包含有其他可能包含的事物,比如在描述汽车时,汽车内部还包含着发动机,则发动机就可以用内部类来描述。

格式:

class Car{                      //car      就是外部类
class FaDongJi{ //fadongji 就是内部类
}
}

内部类的分类:

内部类还可以分为成员内部类和局部内部类。成员内部类就是在成员位置的内部类,而局部内部类则是在局部方法内的内部类。

定义内部类时,就是一个正常定义类的过程,同样包含各种修饰符 、继承与实现关系等。在内部类中可以直接访问外部类的所有成员。

2.1成员内部类

定义格式:

 class 外部类名称{
修饰词 class 内部类名称{
}
}

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-font-kerning:1.0pt;}

访问方式:

外部类名称.内部类名称   变量名称=new 外部类名称().new 内部类名称();
Car.FaDongJi cf=new Car().new FaDongJi();

2.2局部内部类

定义格式:

class 外部类名称{
public void method(){ //外部类的局部方法
class 局部内部类名称{ //局部内部类 }
}
}

访问方式:在外部类方法中创建局部内部类的对象,进行访问。

package com.oracel.demo03;

public class Jeep {
public void show(){ //外部类的方法
//局部内部类
class gulu{
public void method(){
System.out.println("这是轱辘的方法");
}
}
//局部类访问方法:在外部类方法中,创建内部类对象,进行访问
gulu g=new gulu(); //内部类的对象
g.method();
}
}
//在main方法中,创建外部类对象,调用局部方法,就可以访问局部内部类了
public class demo01{
public static void main(String[] args){
Jeep j=new Jeep();
j.gulu(); }
}

 内部类的实际应用---匿名内部类

概念:最常用到的内部类就是匿名内部类,它是局部内部类的一种。

定义的匿名内部类有两种含义:

(1)临时定义某一指定类型的子类

(2)定义后即刻创建刚刚定义的这个子类的对象

 作用与格式:

作用:匿名内部类是创建某个类型子类对象的快捷方式。

格式:

new 父类或接口(){
//进行方法重写
};

练习题:编写一个抽象类Phone,两个抽象方法,call()  sendMessage()
      两个子类OldPhone 和 NewPhone , 其中NewPhone想添加一个玩游戏的功能.
      请根据接口的思想实现,并用匿名内部类的方式调用玩游戏的功能.

//父类
package com.oracel.homework; public abstract class Phone {
public abstract void call();
public abstract void sendMessage();
}
//旧手机子类
package com.oracel.homework; public class OldPhone extends Phone{
public void call() {
System.out.println("旧手机打电话");
}
public void sendMessage() {
System.out.println("旧手机发短信");
} }
//接口:玩游戏
package com.oracel.homework; public interface PlayGame{
public abstract void playgames();
}
//新手机子类
package com.oracel.homework; public class NewPhone extends Phone implements PlayGame{
public void call() {
System.out.println("新手机打电话");
}
public void sendMessage() {
System.out.println("新手机发短信");
}
public void playgames(){ }
}
 //测试类
package com.oracel.homework; public class Test { public static void main(String[] args) {
new OldPhone().call();
new OldPhone().sendMessage();
new NewPhone().call();
new NewPhone().sendMessage();
//用匿名内部类 重写方法 输出方法
new NewPhone(){
public void playgames(){
System.out.println("新手机玩游戏");
}
}.playgames(); } }

 三、包的声明和格式

概念:java的包,其实就是我们电脑系统中的文件夹,包里存放的是类文件。

当类文件很多的时候,通常我们会采用多个包进行存放管理他们,这种方式称为分包管理。

在项目中,我们将相同功能的类放到一个包中,方便管理。并且日常项目的分工也是以包作为边界。

类中声明的包必须与实际class文件所在的文件夹情况相一致,即类声明在a包下,则生成的.class文件必须在a文件夹下,否则,程序运行时会找不到类。

 声明格式:

通常使用公司网址反写,可以有多层包,包名采用全部小写字母,多层包之间用”.”连接

package  包名.包名.包名....;

如:Oracle.com包名反写为com.oracle

注意:包的声明,必须在有效代码的第一行!!!!!!!!

 包的访问:

在访问类时,为了能够找到该类,必须使用含有包名的类全名(包名.类名)。

//包名.包名….类名
java.util.Scanner
java.util.Random
com.oracle.Demo
//带有包的类,创建对象格式:包名.类名 变量名 = new包名.类名();
com.oracle.Demo d = new com.oracle.Demo();

前提:包的访问与访问权限密切相关,这里以一般情况来说,即类用public修饰的情况。

类的简化访问:

当我们要使用一个类时,这个类与当前程序在同一个包中(即同一个文件夹中),或者这个类是java.lang包中的类时通常可以省略掉包名,直接使用该类。

Person p=new Person();

当我们要使用的类,与当前程序不在同一个包中(即不同文件夹中),要访问的类必须用public修饰才可访问。

package com.oracle02;
public class Person {}

 四、import导包

概念: 我们每次使用类时,都需要写很长的包名。很麻烦,我们可以通过import导包的方式来简化。

    可以通过导包的方式使用该类,可以避免使用全类名编写(即,包类.类名)。

 格式:

  import     包名.类名;

注意: import导包代码书写的位置:在声明包package后,定义所有类class前,使用导包import包名.包名.类名;

 五、访问修饰符

Java中提供了四中访问权限修饰符:

public        protected      default    private

下图为访问能力:

总结:

(1) 要想仅能在本类中访问使用private修饰;

(2)要想本包中的类都可以访问不加修饰符即可

(3)要想本包中的类与其他包中的子类可以访问使用protected修饰

(4)要想所有包中的所有类都可以访问使用public修饰

 注意:如果类用public修饰,则类名必须与文件名相同。一个文件中只能有一个public修饰的类。

六、代码块

1.局部代码块

定义:局部代码块是定义在方法或语句中

特点:

1).以”{}”划定的代码区域,此时只需要关注作用域的不同即可

2.方法和类都是以代码块的方式划定边界的

2.构造方法块

构造代码块是定义在类中成员位置的代码块

特点:

1).优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作

2.每创建一个对象均会执行一次构造代码块

3.静态代码块

定义:静态代码块是定义在成员位置,使用static修饰的代码块。

特点:

1).  它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。

2.  该类第一次创建对象时执行,该类不管创建多少对象,静态代码块只执行一次。

(3).可用于给静态变量赋值,用来给类进行初始化

练习题:

package com.oracel.demo03;
//匿名对象 自定义类
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean compare(Person p){
return this.age==p.age;
}
//匿名对象作为返回值来传递
public Person getPerson(){
//Person p=new Person();
//return p;
return new Person();
}
}

Java学习(匿名对象、内部类、包、import、代码块)的更多相关文章

  1. 匿名对象 构造方法 重载 构造代码块 this 关键字

    一.匿名对象 1.匿名对象 :没有名字对象 2.匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值,无法获取属性值. 2.匿名对象永远都不可能事一个对象. 3.匿名对象的好处 : 书写简单. ...

  2. java全栈day12----final static 匿名对象 内部类 包的声明与访问

    final关键字概念 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承, 或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后, ...

  3. Java学习-039-源码 jar 包的二次开发扩展实例(源码修改)

    最近在使用已有的一些 jar 包时,发现有些 jar 包中的一些方法无法满足自己的一些需求,例如返回固定的格式,字符串处理等等,因而需要对原有 jar 文件中对应的 class 文件进行二次开发扩展, ...

  4. C#的匿名委托 和 Java的匿名局部内部类

    .NET:C#的匿名委托 和 Java的匿名局部内部类 目录 背景实验备注 背景返回目录 这几天重温Java,发现Java在嵌套类型这里提供的特性比较多,结合自身对C#中匿名委托的理解,我大胆的做了一 ...

  5. Java学习笔记之---内部类

    Java学习笔记之---内部类 (一)成员内部类 内部类在外部使用时,无法直接实例化,需要借助外部类信息才能实例化 内部类的访问修饰符可以任意,但是访问范围会受到影响 内部类可以直接访问外部类的成员, ...

  6. java 创建匿名对象及声明map list时初始化

    java 创建匿名对象 类似于c# 中的 new { a:"aaa",b:"bbb"}; 1 创建匿名对象Object myobj = new Object() ...

  7. java内置锁实现锁住代码块方案(同一个对象或锁住整个类.class)

    我们看一个例子: class Demo { public synchronized void test() { System.out.println("test方法开始执行,当前线程为:&q ...

  8. Java基础之线程——管理线程同步代码块(BankOperation4)

    控制台程序. 除了同步类对象的方法之外,还可以把程序中的语句或代码块制定为synchronized,这种方式更强大,因为可以指定哪个对象从语句或代码块的同步中获益,而不像同步方法那样仅仅是包含代码的对 ...

  9. “全栈2019”Java多线程第二十一章:同步代码块产生死锁的例子

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  10. “全栈2019”Java多线程第十八章:同步代码块双重判断详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

随机推荐

  1. golang字符串常用函数

    package utils import "fmt" import "strconv" import "strings" var str s ...

  2. laravel 添加自定义 Provider 配置之后不生效的问题

    有可能是配置缓存导致的, 运行: php artisan config:clear 可清除配置缓存,配置缓存保存在 bootstrap/cache/config.php,可以直接去那文件夹看看是不是缓 ...

  3. nodejs express框架一个工程中同时使用ejs模版和jade模版

    在某些项目中,比如你接手了一个别人的项目然后你不想用蛋疼的ejs,或者你不想用蛋疼的jade.你有不想重写之前的页面,那么你现在可能需要新引入ejs或者jade模块,你仅仅需要做下面两步也许就能完成使 ...

  4. 出现错误日志:The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path

      tomcat6出现错误日志: 信息: The APR based Apache Tomcat Native library which allows optimal performance in  ...

  5. duilib 给List表头增加百分比控制宽度的功能

    转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42503147 最近项目里需要用到包含表头列表,而窗体大小改变后,每个列表 ...

  6. fisher's exact test

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...

  7. centos中设置swap交换空间的大小设置和swappiness的比例设置

    首先使用free -m命令查看内存使用情况和swap的大小 关闭swap: 设置swap的大小: bs指的是Block Size,就是每一块的大小.这里的例子是1M,意思就是count的数字,是以1M ...

  8. echart图跟随屏幕自适应变化

    var myChart = echarts.init(document.getElementById('main'),'macarons');// var option = { //...一些配置 / ...

  9. HTML常用标签-手打抄录-来自-烟雨飘零-拜谢

    HTML常用标签及其全称 <a href="#">a 超级链接(anchor)</a>    <abbr title="abbreviati ...

  10. 状压dp Gym - 100676G

    http://codeforces.com/gym/100676 题目大意: 给你n个科目,m个关系,例如A->B,表示要学习B科目,一定要把A科目学习掉.同理,如果还有C->B,那么,B ...