访问修饰符:

公开访问(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程序通过LPCREATESTRUCT中的lpCreateParams传递参数给窗口过程函数

    win32窗口程序中如果需要给窗口过程函数传递自定义参数,可以通过LPCREATESTRUCT结构体中的lpCreateParams进行传递. 创建窗口实例函数: m_hWnd = CreateWin ...

  2. 如何用selenium webdriver 捕获js error

    ### 问题 捕捉页面上js error ### 解决办法 从Selenium webdriver log 中解析 # -*- coding:utf8 -*- import unittest from ...

  3. Python之路,day12-Python基础

    Mysql数据库操作 数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据 ...

  4. grid安装

    在cs6.5,cs7.2上安装grid11.2.0.1 和database11.2.0.1还是有问题 1.i386与i686的问题 2.cs7.2中的semmni内核参数问题 已经设置了kernel. ...

  5. 怎样让SoapHttpClientProtocol不使用系统默认代理

    方法很简单,但找起来很难. 使用SoapHttpClientProtocol类的Proxy属性. 不能设空值,必须设一个新值. 赶脚底层在链接的时候会判断这个属性是不是null,如果null就会用默认 ...

  6. Druid连接池初探

    Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. Maven配置 在pom.xml文件中添加如 ...

  7. CocoaPods本身版本的更新

    sudo gem update --system sudo gem install cocoapods pod setup pod --version sudo gem install cocoapo ...

  8. [zz]谱聚类

    了凡春秋USTC 谱聚类 http://chunqiu.blog.ustc.edu.cn/?p=505 最近忙着写文章,好久不写博客了.最近看到一个聚类方法--谱聚类,号称现代聚类方法,看到它简洁的公 ...

  9. 提供VR定制开发、AR定制开发(VR游戏定制、应用定制)

    设置输出路径 添加烘培输出的贴图类型 添加“LightingMap”类型 设置烘培贴图大小和目标贴图位置为“自发光” 设置烘培材质,选择“输出到源” 点击“渲染”即可 24.标准材质贴图的烘培光影处理 ...

  10. ios打包出来为pkg的处理方法

    Add LSRequiresIPhoneOS YES to your Info.plist The key can be found as Application requires iPhone en ...