访问修饰符:

公开访问(public):对所有子类,非子类访问;

受保护的(protected):只有同包子类、非子类、不同包子类可访问,不同包非子类不可访问;

私有的(private):只有本类可访问,其子类不可访问;

默认(无修饰符):只有同包子类、非子类访问,不同包子类、非子类不能访问;

访问修饰符的权限:

修饰符 本类 同包 不同包
子类 非子类 子类 非子类
private × × × ×
默认 × ×
protected ×
public

封装

封装:1:类的组装:一个类的组建(数据成员或方法)被声明为私有类型(private),则任何该类外部的方法都是无法访问该组件的。

   2:信息隐藏:1):访问修饰符:访问修饰符的作用是限制属性和方法被使用和调用的范围。即指明了类的数据成员和方法的能够被访问的程度。

           2):方法:(1):get/set方法的封装体现:(1:可以只提供get/set,把属性变为制度或只写;

                                 (2:get方法可以提供权限的验证,set方法可以提供数据有效性效验。

                               (3:可以隐藏内部属性的存放;

                (2):功能的具体步骤:

封装好处:类成员变量可以称为制度或者只写的。

     类可以对存储在其成员变量中的内种有一个整体的控制。

     类的用户不需要知道类是如何存储数据的。

静态成员

  static修饰的全局变量叫静态变量,也叫类变量,类变量的值为所有对象共享;

  static修饰的方法叫静态方法,既类方法,类方法只能使用静态变量,而不能使用非静态的全局变量。

static属性:

1:当属性没有static修饰的时候:

(1:在语法上该属性必须用对象进行访问;”public String name“

(2:内存上该属性是放在每个对象上的(每个对象上有一个name属性);

(3:语义上该属性是属于某个对象的;

(4:变量产生的时机,是在new对象的;

(5:根据语义分析,很少有变量属性是static的;

(6:普通属性,非静态属性;

2:当属性使用static修饰的时候:

(1:语法上虽然可以用对象进行访问,但更多的是用类名直接访问;

(2:在内存上,该属性是没有放在对象上的,而是存在数据段的静态区且全类共享一个;

(3:在语义上该属性是跟类相关而跟对象无关的;

(4:变量产生的时机,是在家在类的时候;

(5:常量通常都不变的,直接用设计static;

(6:静态属性,类属性;

static方法:

没有用static修饰的方法:

    

public void study(){

      System.out.println("......");

    }

  

1:语法上必须使用对象进行调用;

2:非静态方法既可以操作静态属性也可以操作非静态属性,既可以调用其它的静态方法也可以调用其它的非静态方法;

3:家在上非static的方法被后加载;

4:语义上如果该方法与某个对象有关,就只能设计为非static的

5:设计上如果该方法的实现部分需要操作跟对象有关的属性或其它方法,那么该方法就应该设计为非static的;

使用static修饰的方法:

public static void study(){

  System.out.println(".......");

}

  

1:语法上虽然可以用对象进行调用,但更多的是用类名直接调用;

2:静态方法只能操作静态属性,调用其它静态方法,甚至不能写this/super;

3:在家在上static方法优先被加载;

4:语义上如果某个方法与某个对象吴福安,只与某个类有关,才设计为static的;

5:在设计上如果该类的工具类的工具方法,那么该方法应该设计为static的;

static共性:

1:凡是static的都是跟对象无关,都是类级别的;

2:凡是static的都是在加载期会有特殊处理;

static:1:可修饰符:含义(静态)——特点:(1:与对象有关,只与类有关;

                      (2:在加载期有特殊操作;

     2:可修饰:(1:属性:1):代表全类共享唯一值;2):会在加载区产生在数据段静态区,不在对象上产生;3):使用:常量属性,变量属性分析出全类共享;4):语法:

          (2:方法:代表类的方法;加载期工具方法;

          (3:初始化快:

构造绝对不能用static: "public student ( ){ "

  访问修饰符:3个关键字,4种情况;

  get/set的封装性:1)只读/只写;2)只对赋值机根据进行有效性限定;3)隐藏内部属性存放形式;

  static 静态:

    特点:1、与对象无关、该对象是指定义了static属性或方式的那个是伪对象

       2、加载期有特殊性;

    可修饰性:1、属性:1)类属性、2)用法:可以用类或对象、3)效果:全类共享一个值、4)内存:为加载期产生在数据段的静态区;

         2、方法:1)类方法、2)用法:可以用类或对象、3)效果:不能操作到本类的非静态属性或非静态方法,也不能操作this或super对象、4)鸡汁:由于优先加载所以不能调用非静态的内容;

静态类初始化块:

 public class PersonBean {

	//实例初始化块

	//该代码块在new对象的构造的时候会被自动执行,new一次就执行一次

	//new对象构造方法要执行4步,该代码块在第3步之前执行,即在对属性进行初始化之前

	//因此先在初始化块中对属性进行赋值,会被第3步的赋值覆盖

	{

		System.out.println("Person的实例初始化块");

	}

	//静态初始化块

	//该代码块是在加载PersonBean的class的时候就被自动执行了

	//一个类只加载一次,所以静态初始化块也只执行一次

	//所以很多打开资源、开启链接的预加载动作可以写到静态初始化块中

	static{

		System.out.println("Person的静态初始化块");

	}

	//属性

	private String name;

	private int age = 20;

	private static int a;

	//构造

	public PersonBean(){

		System.out.println("PersonBean的构造");

	}

	public PersonBean(String name, int age){

		this.name = name;

		this.age = 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;

	}

}

  

内部类:

 在java中,还可以在类的内部定义类。这种在类的内部定义的类,称为内部类。内部类所在的类称为外部类。

  特点:独立的class文件;同样需要变异;同样可以产生对象;

  使用内部类:是掌握java高级编程的一部分。

  内部类可以分为4种:静态内部类,成员内部类,局部内部类,匿名内部类;

package com.lovo.innerclass;

//OutClass被称之为外部类

//所有的内部类都是一个独立的类,都拥有各自的属性、行为、构造等等
//每个内部类都会被编译成一篇独立的Class文件,文件名都带外部类类名$
public class OutClass {
private int a;
private static int b;
//成员内部类
//位置:直接写在外部类当中,位置和属性、构造、方法平行。
//Class文件的名字:”外部类类名" + $ + "内部类类名”
//可以有访问修饰符,代表是否可以在外部的类使用
//不管带什么访问修饰符,本类(外部类)的所有方法都可以使用
public class InnerClass1{
public void innerMethod(){
//内部类如果要调用外部类的属性,请书写下面格式:
OutClass.this.a = 100;
}
} //静态内部类--成员内部类的特例
//位置:直接写在外部类当中,位置和属性、构造、方法平行。
//Class文件的名字:”外部类类名" + $ + "内部类类名”
//可以有访问修饰符,代表是否可以在外部的类使用
//不管带什么访问修饰符,本类(外部类)的所有方法都可以使用
public static class InnerClass2{
public void innerMethod(){
//静态内部类只能使用外部类的静态属性或静态方法,请书写下面格式:
OutClass.b = 100;
}
} public void test1(final int e){
this.a = e;
final int A = 1200;
//局部内部类
//位置:直接写在外部类的方法当中,其位置和局部变量平行。
//Class文件的名字:”外部类类名" + $ + "序号" + "内部类类名”
//没有访问修饰符,只能在所定义的外部类方法中使用
class InnerClass3{
public void innerMethod(){
//局部内部类不能操作它所在方法的局部变量(非常特殊)
System.out.println(OutClass.this.a);
System.out.println(e);
}
} //直接产生内部类对象
InnerClass3 in = new InnerClass3();
in.innerMethod();
} public void test2(){
//匿名内部类--是局部内部类的特例
//位置:直接写在外部类的方法当中,其位置和局部变量平行。
//Class文件的名字:”外部类类名" + $ + "序号"
//在产生对象的同时去定义这个类,只能用这一次
new Object(){
public void introduce(){
//匿名内部类不能操作它所在方法的局部变量(非常特殊)
System.out.println("我可不是Object哦~~~");
}
}.introduce();
}
}

  所有的内部类都是一个独立的类,都拥有各自的属性、行为、构造等;每个内部类都会被编译程一篇独立的class文件,文件名都带外部类类

  位置:直接写在外部类当中,位置和属性,构造,方法平行;

       class文件名字是“外部类类名” + $ + “内部类类名”;

     可以有访问修饰符,代表是否可以在外不使用;

     不管带什么访问修饰符,本类(外部类)的所有方法都可以使用;

  在外部使用成员内部类——首先产生外部类对象,然后使用特殊语法外部类对象;new产生内部类对象,然后在调用内部类对象的属性或方法(受访问修饰符限制);

  

public class TestInnerClass {

	public static void main(String[] args) {
// TODO Auto-generated method stub
//在外部使用成员内部类--首先产生外部类对象、然后使用特殊语法外部类对象.new
//产生内部类对象,然后再调用内部类对象的属性或方法(受访问修饰符限制)
OutClass out = new OutClass();
OutClass.InnerClass1 oi = out.new InnerClass1();
oi.innerMethod(); //在外部类使用静态内部类---可以用外部类类名直接访问操作,无需产生外部类对象
OutClass.InnerClass2 oi2 = new OutClass.InnerClass2();
} }

  

小结:

  访问修饰符:公有的(public)、受保护的(protected)、私有的(private)、默认的(无访问修饰符);

  通过private访问修饰符隐藏类中的成员变量,称为封装;

  静态成员变量或静态方法并不与类的每个实例关联。静态成员变量或静态方法只有单个实例,他们对类的所有实例以及程序中的其它类是共享的;

  静态初始化块在类装载时执行。实例初始化块在类被实例化时执行,在构造器中调用之间调用。

  内部类是在类的内部定义的类。内部类四中形式:静态内部类、成员内部类、局部内部类、匿名内部类;

类:属性、构造、方法、初始化块、内部类、

类的高级:访问修饰符、封装、静态类成员static、内部类;的更多相关文章

  1. Java自学-类和对象 访问修饰符

    Java的四种访问修饰符 成员变量有四种修饰符 private 私有的 package/friendly/default 不写 protected 受保护的 public 公共的 比如public 表 ...

  2. 【译文】 C#面向对象的基本概念 (Basic C# OOP Concept) 第一部分(类,对象,变量,方法,访问修饰符)

    译文出处:http://www.codeproject.com/Articles/838365/Basic-Csharp-OOP-Concept 相关文档:http://files.cnblogs.c ...

  3. C#封装访问修饰符

    C# 封装 封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中".在面向对象程序设计方法论中,封装是为了防止对实现细节的访问. 抽象和封装是面向对象程序设计的相关特性. ...

  4. C#面向对象 (访问修饰符、封装、继承、多态)

    先看一下创建一个新项目时的基本格式 using System; using System.Collections.Generic; using System.Linq; //引用的命名空间 using ...

  5. Java中各种(类、方法、属性)访问修饰符与修饰符的说明

    类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所 ...

  6. [No0000E7]C# 封装 与访问修饰符

    C# 支持的访问修饰符: Public Private Protected Internal Protected internal Public 访问修饰符 Public 访问修饰符允许一个类将其成员 ...

  7. 20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)

    1:C#中的访问修饰符 public: 公共成员,完全公开,没有访问限制. private: 私有的,只能在当前类的内部访问. protected: 受保护的,只能在当前类的内部以及该类的子类中访问. ...

  8. java中的访问修饰符

    Java有四种访问权限,其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符.其中package代表缺省的访问权限,具体到代码中就是不写任何修饰符的 ...

  9. java的访问控制(包、访问修饰符、修饰符)

    一.     java的类包 编写好一个源程序后,首先要执行javac命令进行编译源文件,并生成与源文件同名后缀为“.class”的字节码文件(类文件),该类文件与源文件默认在同一个目录中.该类文件是 ...

  10. C#学习-图解教程(2):访问修饰符(其中两种)

    学习内容:C#:学习书籍:图解教程(中文第四版). 目录:第四章 类的基本概念 -----> 4.8 访问修饰符 访问修饰符 从类的内部,任何函数成员都可以使用成员的名称访问类中任意的其他成员. ...

随机推荐

  1. Win32隐藏输出console窗口

    #include <Windows.h> void HideConsole() { ::ShowWindow(::GetConsoleWindow(), SW_HIDE); } void ...

  2. Python面向对象详解

    Python面向对象的"怜人之处" Python的待客之道--谁能进来 Python的封装--只给你想要的 Python的继承--到处认干爹 Python的多态--说是就是

  3. Mysql 安装-操作-备份

    Mysql 5.7 安装windows 1.配置mysql的path->系统属性->环境变量-path添加最后 2.配置目录和主从 [mysqld]port = 3306 basedir= ...

  4. LeetCode---Hash Table

    299. Bulls and Cows 思路:抽屉法,放进secrets,拿出guess,最终cows = cows - bulls public String getHint(String secr ...

  5. js中的replace全局替换

    比如想把str中的所有“&”替换成“&” replace (\&\,"&");只是替换第一个,那么怎么全部都替换呢? replace(new Reg ...

  6. Verilog HDL那些事_建模篇笔记(实验九:VGA驱动)

    1.了解VGA协议 VGA协议有5个输入信号,列同步信号(HSYNC Signal),行同步信号(VSYNC Signal),红-绿-蓝,颜色信号(RGB Signal). 一帧屏幕的显示是由行从上至 ...

  7. Entity Framework 连接低版本数据库

    使用EF6连接SQL2012生成的Edmx,分页时生成的查询语句使用了SQL 2012引入的新特性  OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY,结果在生产环境使用的数 ...

  8. MyBatis入门学习教程-解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...

  9. c# winform 窗体起始位置 设置

    窗体起始位置为顶部中间,WinForm居中显示: ; ; this.StartPosition = FormStartPosition.Manual; //窗体的位置由Location属性决定 thi ...

  10. 如何使用一个对象而非数组元素为ng-options初始化

    a,是引用,而b是一个和a内容相同的另一个对象, 因此不能通过b直接赋值.如果要这样用,就用 track by xxx.id  ,它的作用是通过id(唯一的)去ng-options做一次检索匹配