------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

涉及的内容:成员访问权限比较、单例设计模式、内部类、包

1、成员访问权限比较

权限大小

成员修饰符     public       protected       default(默认)       private

同一个类中       OK             OK              OK                 OK

同一个包中       OK             OK              OK                 NO

子类访问         OK             OK              NO                 NO

不同包中         OK             NO               NO                NO

2.单例设计模式:

设计模式:解决某一类问题最行之有效的方法,java中共23种设计模式。
单例设计模式:解决一个类在内存中只存在一个对象。
想要保证对象唯一:
1.为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。
 2.为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象。
 3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
 这三步怎么用代码体现呢?
1.将构造函数私有化(防止其他程序建立对象)
 private Single(){};
 2。在本类中建立一个本类对象。
 private static Single  s=new Single();
3.提供一个方法可以获取到该对象。
public static Single getInstance()
{
return s;
}
 注意:对于事物该怎么描述,还怎么描述。
 当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。

单例设计模式一:饿汉式

这个是先初始化对象
Single类一进内存,就已经创建了对象。

class  Single  

{

private int num;

public void setNum();

private Single(){};

private static Single  s=new Single();

public static Single getInstance()

{

return s;

}

}

class  Single

{

public static void main(String[] args)

{  Single ss=Single.getInstance();

}

}

class  Single
{
private int num;
public void setNum();
private Single(){};
private static Single  s=new Single();
public static Single getInstance()
{
return s;
}
}
class  Single
{
public static void main(String[] args)
{
Single ss=Single.getInstance();
}
}

单例设计模式二:
对象是方法被 调用时,才初始化,也叫对象的延时加载。
称为:懒汉式
Singlel类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。
*/

class Single  
  1. {
  2. private static Single s=null;
  3. private Single(){};
  4. public static  Single getInstance()
  5. {
  6. if(s==null)
  7. {
  8. s=new Single();
  9. return s;
  10. }
  11. }
  12. }</SPAN>
class Single
{
private static Single s=null;
private Single(){};
public static  Single getInstance()
{
if(s==null)
{
s=new Single();
return s;
}
}
}

注意:在开发中通常用 饿汉式 ,因为他安全,简单。
     而懒汉式有问题:通常要通过锁的机制保证安全性,这样影响了效率。
3、内部类:

内部类:将一个类定义在另一个类的里面,对里面那个类就称为内部类
访问特点:
1.内部类可以直接访问外部类中的成员,包括私有成员。
之所以可以直接访问外部类中的成员,是因为内部类中持有了一个
外部类的引用,格式:外部类名/this
2.而外部类要访问内部类中的成员必须建立内部类的对象。
访问格式:
1.当内部类定义在外部了的成员位置上,而且非私有(内部类是可以private私有化的,一旦私有化就不能这样访问了),可以在外部其他类中直接建立内部类对象。
格式:
   外部类名.内部类 变量名=外部类对象.内部类对象;
Outer.Inner in=new Outer().new Inner();//
2.当内部类在成员位置上,就可以被成员修饰符所修饰。
比如,private:将内部类在外部类中进行封装。
static:内部类就具备static的特性。当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限。

问题:1.在外部其他类中,如何直接访问static内部类的非静态成员呢?
new Outer.Inner().function();//因为是static内部类,所以可以直接通过 (外部类.内部类)调用内部类,即Outer.Inner,然后再调用内部类的非静态方法时,需要new一个对象再调用,即new Outer.Inner().function()。
同理:在外部其他类中,如何直接访问static内部类的静态成员呢?
直接通过类名就可以了:Outer.Inner.function();

注意:

1.非静态外部类可以有静态成员,而非静态内部类就不能有静态成员了,当内部类中定义了静态成员,该内部类必须是static的。因为静态变量是类在加载的时候就要分配内存空间的,你放在非静态内部类中,这个非静态内部类还没调用就给分配内存空间?这可能么?

2.当外部类中的静态方法访问内部类时,内部类也必须是static的(静态只能访问静态)

3.当描述事物时,事物的内部还有事物,该事物用内部类来描述。因为内部事物在使用外部事物的内容。
定义内部类的一般格式举例:
class Body
{
private class XinZang//内部类一般不暴露出去
{
}
public void show()//给其他的类提供调用内部类的入口
{
}
}

实例:

class Outer  
  1. {
  2. private int x=3;
  3. class Inner//内部类
  4. {
  5. int x=4;
  6. void function()
  7. {
  8. int x=5;
  9. System.out.ptintln("inner:"+x);//5
  10. System.out.ptintln("inner:"+this.x);//4
  11. System.out.ptintln("inner:"+Outer.this.x);//注意,此为内部类访问外部类的格式。
  12. }
  13. }
  14. void method()//外部类访问内部类时,必须建立内部类的对象才能访问。
  15. {
  16. Inner in=new Inner();
  17. in.function();
  18. }
  19. }
  20. class InnerClassDemo
  21. {
  22. public static void main(String[] args)
  23. {
  24. Outer out=new Outer();
  25. out.method();
  26. //直接访问内部类中的成员。
  27. Outer.Inner in=new Outer().new Inner();//
  28. in.function();
  29. }
  30. }</SPAN>
class Outer
{
private int x=3;
class Inner//内部类
{
int x=4;
void function()
{
int x=5;
System.out.ptintln("inner:"+x);//5
System.out.ptintln("inner:"+this.x);//4
System.out.ptintln("inner:"+Outer.this.x);//注意,此为内部类访问外部类的格式。}
}
void method()//外部类访问内部类时,必须建立内部类的对象才能访问。{
Inner in=new Inner();
in.function();
}
}
class InnerClassDemo{
public static void main(String[] args)
{Outer out=new Outer();
out.method();
//直接访问内部类中的成员。
Outer.Inner in=new Outer().new Inner();//
in.function();
}
}

/*
内部类定义在局部时
1,不可以别被成员修饰符修饰,如static
2.可以直接访问外部类中的成员,因为还持有外部类中的引用。
但是不可以访问它所在的局部变量。只能访问被final修饰的局部变量。
*/

[java] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px; COLOR: #333333; FONT-FAMILY: KaiTi_GB2312">class Outer
  2. {
  3. int x=3;
  4. void method(final int a)
  5. {
  6. final int y=4;
  7. class Inner//内部类定义在局部
  8. {
  9. void function()
  10. {
  11. System.out.println(a);
  12. }
  13. }
  14. new Inner().function();
  15. }
  16. }
  17. class  InnerClassDemo3
  18. {
  19. public static void main(String[] args)
  20. {
  21. Outer out=new Outer();
  22. out.method(7);
  23. out.method(8);
  24. }
  25. }</SPAN>
class Outer
{
int x=3;
void method(final int a)
{
final int y=4;class Inner//内部类定义在局部
{
void function()
{
System.out.println(a);
}
}
new Inner().function();
}
}
class  InnerClassDemo3
{
public static void main(String[] args)
{
Outer out=new Outer();
out.method(7);
out.method(8);
}
}

/*匿名内部类:
1.匿名内部类其实就是内部类的简写格式。

2.匿名内部类没有名字,怎么创建对象呢?
所以定义匿名内部类的前提:
内部类必须是继承一个类或者实现接口。
3.匿名内部类的格式:
new 父类或者接口(){定义子类的内容};
4.其实匿名内部类就是一个匿内部类名子类对象。而且这个对象有点胖
也可理解为带内容的对象。
5.匿名内部类中定义的方法最好不要超过3个。否则调用会很麻烦。

[java] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px; COLOR: #333333; FONT-FAMILY: KaiTi_GB2312">什么时候用匿名内部类呢??
  2. */
  3. abstract class AbsDemo
  4. {
  5. abstract void show();
  6. }
  7. class Outer
  8. {
  9. int x=3;
  10. /*普通内部类的写法
  11. class Inner extends AbsDemo
  12. {
  13. void show()
  14. {
  15. System.out.println("show:"+x);
  16. }
  17. }
  18. 匿名内部类怎么写呢?看下面
  19. */
  20. public void function()
  21. {
  22. //new Inner().show();
  23. new AbsDemo()//匿名内部类的写法,既然匿名内部类没有名字,那么在创建对象时就用期父类或者接口的名字
  24. //然后再实现其父类或接口的方法就可以了。此处相当于创建了一个匿名内部类对象
  25. {
  26. void show()
  27. {
  28. System.out.println("x==="+x);
  29. }
  30. void abc()
  31. {
  32. System.out.println("haha");
  33. }
  34. }.show();
  35. /*为了调用方便,可采用以下的方式
  36. AbsDemo d=new AbsDemo()//此处为多态,左边是父类的引用,右边是创建的匿名内部类的对象。
  37. {
  38. void show()
  39. {
  40. System.out.println("x==="+x);
  41. }
  42. void abc()
  43. {
  44. System.out.println("haha");
  45. }
  46. };
  47. d.show;
  48. d.abc;//
  49. */
  50. }
  51. }
  52. /*什么时候用匿名内部类呢??*/
  53. 实例:
  54. 当你发现一个方法的参数是一个接口类型的参数,而且此接口中的方法不超过3个时,
  55. 考虑用匿名内部类。
  56. abstract class AbsDemo
  57. {
  58. abstract void show();
  59. }
  60. class Demo
  61. {
  62. public static void main(String[] args)
  63. {
  64. /*考虑
  65. show ();方法中填一个匿名内部类即
  66. */
  67. show(new Inter()
  68. {
  69. public void method()
  70. {
  71. System.out.println("method show run")
  72. }
  73. });
  74. }
  75. public static void show(Inter in)
  76. {
  77. in.method();
  78. }
  79. }
什么时候用匿名内部类呢??*/
abstract class AbsDemo
{
abstract void show();
}
class Outer
{
int x=3;
/*普通内部类的写法
class Inner extends AbsDemo
{
void show(){
System.out.println("show:"+x);
}}匿名内部类怎么写呢?看下面 */public void function()
{
//new Inner().show();
new AbsDemo()//匿名内部类的写法,既然匿名内部类没有名字,那么在创建对象时就用期父类或者接口的名字
//然后再实现其父类或接口的方法就可以了。此处相当于创建了一个匿名内部类对象
{
void show()
{
System.out.println("x==="+x);
}
void abc()
{
System.out.println("haha");
}
}.show();/*为了调用方便,可采用以下的方式
AbsDemo d=new AbsDemo()//此处为多态,左边是父类的引用,右边是创建的匿名内部类的对象。{
void show()
{
System.out.println("x==="+x);
}
void abc()
{
System.out.println("haha");
}};
d.show;
d.abc;//
*/
}
}
/*什么时候用匿名内部类呢??*/
实例:
当你发现一个方法的参数是一个接口类型的参数,而且此接口中的方法不超过3个时,
考虑用匿名内部类。
abstract class AbsDemo
{
abstract void show();
}
class Demo
{
public static void main(String[] args)
{
/*考虑show ();方法中填一个匿名内部类即
*/
show(new Inter()
{
public void method()
{
System.out.println("method show run")
}});}
public static void show(Inter in)
{
in.method();
}
}

4.包的介绍:

包的导入:
1、为了简化类名的书写,使用import导入
如:import packa.packb.packc.*;  是将包packa下的包packb下的包packc下的所有类导入进来。
注:如果需要packb下还有类需要导入,则还需在导入,
如: import packa.packb.*;
2、注意事项:
a.两个包中有相同类名文件,当再一 类中创建对象时,需要加上包名.类名创建。
b.建议定义包名不要重复,可以使用URL来定义,因为URL是唯一的。
   如:www.itcast.com---->package cn.itcast.Demo以及cn.itcast.Test
 
Java中各个主要包的作用(javax开头的都是扩展包)
java.util是JAVA的utility工具包,包含一些使用工具类,如定义系统特性、使用与日期日历相关的函数等的类
java.lang是JAVA的language核心语言包;如String、Math、Integer、System、Thread,提供常用的功能。特殊之处是不需要导入,是作为默认导入的包。
java.awt是JAVA的abstractwindow toolkit,抽象窗口工具包;包含了构成抽象窗口共具体的多个类,这些类用于构建和管理应用程序的图形用户(GUI)。
java.applet是创建APPLET的必须包;包含applet运行时所需要的一些类。
java.net是JAVA有关网络操作的包。
java.io是JAVA的输入输出流的包。
java.sql是JAVA的数据库操作包。
javax.swing是新的界面包

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

转载于:https://www.cnblogs.com/yun45/archive/2013/05/14/3077684.html

黑马程序员_Java基础面向对象相关推荐

  1. 黑马程序员_Java基础Day05_面向对象之封装(Done)

    ------- android培训.java培训.期待与您交流! ---------- Day05开始接触到了Java核心部分--"面向对象". 面向对象是一种思考思想,是相对于早 ...

  2. 黑马程序员-Java基础:面向对象(上)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.面向对象概述 当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高.可随着需求的 ...

  3. 黑马程序员 JAVA基础 -面向对象(四)

    -----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 在此,分享一下自己学习JAVA的学习心得.有不对的地方请帮忙改正,也希望对想学j ...

  4. 黑马程序员_java基础笔记(03)...面向对象

    1:面向对象的概念,2 : 类和对象的关系,3 : 封装,4 : 构造函数,5 : this关键字,6 : static关键字, 7 : 单例设计模式,8 : 继承,9 : 抽象类,10 : 接口,1 ...

  5. 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码

    ---------- ASP.Net+Android+IOS开发..Net培训.期待与您交流!---------- 1,面试题目:银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内 ...

  6. 黑马程序员_java基础笔记(06)...集合

    ---------- ASP.Net+Android+IOS开发..Net培训.期待与您交流! ---------- JavaApi(其实就是java给我们提供的已经定义好的对象.工具对象:集合框架) ...

  7. 黑马程序员_Java基础_前期准备02-1

    ---------------------------------------- JavaEE+云物联.期待与您交流!----------------------------------------- ...

  8. 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式

    GUI(Graphical User Interface)(图形用户接口):用图形的方式,来 显示计算机操作的界面,这样更方便更直观 CLI(Conmand line User Interface)( ...

  9. 黑马程序员_Java基础_this,super,static,final关键字

    一,this关键字 1,当成员变量和局部变量重名时,可以使用this关键字来区分. this关键字代表的是本类对象,this一般是在一个函数中,哪个对象在调用this所在的函数,this就代表哪个对象 ...

最新文章

  1. 用linux集成电路版图设计,集成电路版图设计 [陆学斌 主编] 2012年版
  2. Linux 命令之 head -- 在屏幕上显示指定文件的开头若干行/显示文件开头内容/查看文件开头内容
  3. python如何生成列表和元组数据_Python数据类型(列表和元组)
  4. 双11“新贵”红星美凯龙:数据中台充分给足转型马力
  5. python定义常量
  6. swift中闭包的循环引用
  7. 桌面下雪软件测试工程师,桌面下雪
  8. linux制作iso启动盘
  9. 《当程序员的那些狗日日子》三
  10. arcgis两点之间连线_three3D地图设置两点之间的连线
  11. 域名实名认证中的常见问题
  12. 06 基于v5-resources在macos系统搭建a8服务
  13. Kubernetes调度之亲和性和反亲和性
  14. 利用Vlookup函数在Excel中根据一列来筛选信息
  15. 用户故事地图,产品经理必须掌握的分析利器
  16. “天地不仁,以万物为刍狗”的真正意思
  17. Xshell 常见使用
  18. js使用百度地图仅显示中国区域,实现大数据热点图
  19. 打造你的专属印章(c语言)
  20. Windows下连接RTL-SDR直接使用命令听FM广播

热门文章

  1. MySQL Miscellaneous Functions(ip uuid方法)
  2. pytorch torch.nn.Embedding
  3. python 字符串
  4. Pandas 文本数据方法 extract( ) extractall( )
  5. 留学计算机美国硕士,美国硕士留学计算机专业申请详细分析
  6. python壁纸数据抓取_python 多线程爬取壁纸网站的示例
  7. 远程显示协议 2021-01-04
  8. Veeam FAQ系列转载(二)
  9. 分库分表学习总结(4)——分布式事务常见应用场景总结
  10. Maven学习总结(1)——Maven入门