`
nail2008
  • 浏览: 46606 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SCJP笔记_章一_声明与访问控制

    博客分类:
  • SCJP
阅读更多

 

      打算考SCJP。上SUN的网站模考了一下,没有全做(3小时太长了),做完的题目只对了40%,当然语言方面也有障碍。感觉自己基础挺差,逛来逛去买本《SCJP考试指南》,每天花一点时间看看,给自己找个目标。

     先写个流水账的笔记,以后慢慢精简,修正。请大家多多提意见,谢谢大家!

     

第一章 声明与访问控制

 

1.1 Java回顾

没啥好说的,基本概念的罗列:

  • ——模板。对象——模板的实例。状态和行为(也就是变量和方法)。
  • 标识符(identifier——类、变量和方法等java组件的名称。
  • 关键字(keyword——java占了不,让我们用的名字。当然标识符我们也不能用。
  • 继承(inheritance——书云:此乃面向对象语言的核心。好像是这么回事。
  • 接口(interface——书云:接口好比100%抽象的超类。我想说说抽象类和接口的使用,很多兄弟把接口用烂了,一个项目全都是接口,看不见一个抽象类。有为同事说的很好:接口是用来管理类的。抽象类才是体现对象关系。


1.2 标识符和JavaBeans

相关考试目标:

      考试目标1.3 编写代码,将基本类型、数组、枚举和对象作为静态变量、实例变量和局部变量声明、初始化并使用。此外,使用合法的标识符为变量命名。

      考试目标1.4 编写代码,声明静态和非静态方法,(如果合适的话)使用遵循JavaBeans命名标准的方法名。此外,编写代码,声明并使用可变长度的变元列表。

      本节说的是两个考试目标中的Java标识符相关内容:

  • 合法标识符——编译器判断名称合法性的规则。
  • SunJava编码规范——Sun对类,变量和方法的命名建议。
  • JavaBeans命名标准——JavaBeans规范的命名要求。

1.2.1 合法标识符

Unicode字符、数字、货币符号、连字符组成。Unicode字符这里可以理解为"可以组成字的符号"。换句话说只要你高兴,用中文命名变量也可以。但是一些特殊的符号是不能用的,比如+-./.

必须知道的几条规则:

  • 不能以数字开头,必须以"字母""$""_"开头。
  • (复习可忽略)首字之后,可以字母、数字、"$""_"任意组合。
  • (复习可忽略)标识符的字符数没有限制。
  •  关键字不能用作标识符,注意1.4新增assert1.5新增enum。其他不常用的关键字:const,native,strictfp,transient,volatile.
  •  大小写敏感

一些非法的标识符:

int :b;    //:非法 
int -d;    //-非法
int e#;   //#非法  
int .f;      //.非法  
int 7g;    //不能以数字开头

1.2.2 Sun的Java编码规范

Sun的一些命名建议:

  • 类和接口。首字母大写,驼峰命名法,名词。
  • 方法。首字母小写,驼峰命名法,动词-名词组合。
  • 变量。首字母小写,驼峰命名法,有意义的短名称。
  • 常量。表示为static和final的变量。全部大写,并以下划线做分隔符。

1.2.3 JavaBeans标准

标准的目的:说白话就是你写的别人能看懂,别人写的你也知道是什么。

JavaBeans由两部分组成:属性(property)和事件监听器(event listener)。

属性就是JavaBean的私有变量,以及访问属性的对应getter,setter方法。

JavaBeans属性命名规则:

 

private String property;
	private Boolean flag;
	public String getProperty() {
		return property;
	}
	public void setProperty(String property) {
		this.property = property;
	}
	public Boolean getFlag() {
		return flag;
	}
	public void setFlag(Boolean flag) {
		this.flag = flag;
	}

JavaBeans 监听器命名规则:

  • 向事件源注册的监听方法以“add”开头
  • 取消注册的方法以“remove”开头
  • 要操作的监听器类型必须作为变元传递给方法
  • 必须以“Listener”结尾

不规范的例子:

void setCustomerName(String s)  		//must be public
public void modifyMyValue(int v)		//can't be 'modify'
public void addXListener(MyListener m)	//listener type mismatch

 

1.3 声明类

相关考试目标:

      考试目标1.1 编写代码,声明类(包括抽象类和各种形式的嵌套类)、接口和枚举。编写代码,包含包和导入语句(包括静态导入)的恰当使用。

1.3.1 源文件声明规则

  • 每个源代码文件只能有一个public类
  • 注释可以出现在任一行的开始或结尾
  • 如文件中有一个public类,那么文件名必须与类名匹配
  • 如果有package语句,那么它必须位于源代码文件的第一行,并出现在任何import语句之前
  • 如果有import语句,则它们必须位于package和类声明之间
  • 如果没有package和import语句,那么类声明必须位于第一行
  • 一个文件可以具有多个非公共类
  • 不包含公共类的文件可以具有与该文件中的任何类都不匹配的名称。

1.3.2 类声明和修饰符

修饰符分为两类:

  • 访问修饰符:public  默认
  • 非访问修饰符:strictfp final abstract

书云——Java是一种以包为中心的语言。

这句话告诉我们为什么要有类声明和修饰符——访问控制。

当类A可以访问类B时,即B对A可见(visibility),这意味着类A可以:

  • 创建类B的一个实例(instance)
  • 扩展(extend)类B,就是继承B
  • 访问(access)类B,就是访问类B的某些变量和方法,当然这取决与他们的访问修饰符

其他(非访问)类修饰符:strictfp final abstract

  • strictfp 对于考试,我们只要知道它是关键字就可以了。它可以修饰类和方法,但不可用于变量。作用是声明该类或方法在处理浮点数时将遵守IEEE754标准。否则在处理浮点数时可能与平台相关。
  • final 最终类。该类不能再有子类,即不能被继承。
  • abstract 抽象类。与final相反,就是让你继承来实现的。

 

 

1.4 声明接口

考试目标1.1 编写代码,声明类(包括抽象类和各种形式的嵌套类)、接口和枚举。编写代码,包含包和导入语句(包括静态导入)的恰当使用。

考试目标1.2 编写代码,声明接口。编写代码,实现或扩展一个或多个接口。编写代码,声明抽象类。编写代码,扩展抽象类。

1.4.1 声明接口

接口就是一份契约(contract),说明它能够做什么。任何实现这个接口的类都必须同意为该接口的所有方法提供实现。

  • 接口方法隐含都是公共的和抽象的,所以不必实际地键入public或abstract修饰符。
  • 接口只能声明常量,不能声明实例变量。
  • 接口方法一定不能是静态的。因为接口方法是abstract的,static是必须被是实现的。
  • 接口可以继承,并且只能继承接口。
  • 用interface来声明。
  • 接口类型能够被多态地使用。

1.4.2 声明接口常量

接口中可以定义常量,而且都是public static final的,常量一旦被定义是无法修改或重新赋值的。

 

//接口InterfaceA
public interface InterfaceA {
	public static final int CONSTANT_1 = 1;
	int CONSTANT_2 = 2;
	void addElement(Object o);
	void addElement(Integer id);
}

//接口InterfaceB 继承了InterfaceA
public interface InterfaceB extends InterfaceA {	
	void delElement(Object o);
}

//InterfaceB的实现类ImplB
public class ImplB implements InterfaceB {

	public void delElement(Object o) {
		int i  = CONSTANT_1;
	}

	public void addElement(Object o) {
		// TODO Auto-generated method stub
	}

	public void addElement(Integer id) {
		id = CONSTANT_2;		
	}

}

 

 

1.5 声明类成员

相关考试目标:

      考试目标1.3 编写代码,将基本类型、数组、枚举和对象作为静态变量、实例变量和局部变量声明、初始化并使用。此外,使用合法的标识符为变量命名。

      考试目标1.4 编写代码,声明静态和非静态方法,(如果合适的话)使用遵循JavaBeans命名标准的方法名。此外,编写代码,声明并使用可变长度的变元列表。

在类中,方法和实例变量(非局部的)统称为成员(member)。可以使用访问修饰符和非访问修饰符修饰成员,并且比声明类时有更多的修饰符可供选择(和组合)。

1.5.1 访问修饰符

类成员可以使用全部4种访问修饰符,包括:public protected private 和默认。

对于protected的成员变量,在包外可以通过继承来访问父类的protected成员。但是,在子类中实例化父类,用"."的类引用方式是无法访问的。

对于局部变量,不可以使用访问修饰符局部变量唯一一个可以使用的修饰符是final。

4种访问级别的可访问范围:

访问级别 访问控制修饰符 同类 同包 同包子类 包外子类 包外
公开 public
受保护 protected 继承可以
默认
私有 private

 

 

 

 

 

 

 

 

1.5.2 非访问修饰符

类的成员变量可以使用的非访问修饰符:

final、abstract、static、transient、synchronized、native、strictfp

final方法:

子类不能重写父类中的final成员

final变元:

变元就是方法声明中出险在两个圆括号之间的变量声明。变元也是一种局部变量,它可以使用的修饰符只有final,被final声明的变元,意味着不能在该方法中修改它,final变元必须保持与传递给方法时参数所具有的值相同。

抽象方法:

抽象类的第一个具体子类必须实现超类的所有抽象方法。

不能同时标识为abstract和final,abstract表示超类完全不知道子类在该方法中该怎样运作,final表示超类知道子类在该方法中该怎样运作的每件事情(无论继承树有多深)。

不能同时标识为abstract和private,子类无法访问超类的private的方法,当然也就无法实现。

不能同时标识为abstract和static。

同步方法:

synchronized方法一次只能被一个线程访问,只能应用于方法,可以使用所有的访问控制级别。

本地方法:

native修饰符表明方法是用与平台相关的语言(通常为C)实现的。只能应用于方法。它实质上就是一个本地接口,比如

	public native void runFormC();

strictfp方法:

跟修饰类的时候一样,它可以修改类或方法,不能用于变量。

具有可变变元列表的方法(var-arg):

数量可变的变元。要注意:

 

  • var-arg必须制定它的变元类型,即它是int?char?还是Object?
  • 一个使用var-arg的方法中有其他参数是合法的。
  • var-arg必须是方法签名中的最后一个参数,且一个方法中只能有一个var-arg。

合法的var-arg声明:

 

void doStuff(int...x){}
	void doStuff(char c,int...is){}
	void doStuff(Object...objects){}

 

1.5.3 构造函数声明

  • 构造函数没有返回类型。
  • 构造函数的名称必须与类名一致。
  • 不能标识为static、final、abstract
class Foo2{
	
	//legal constructors
	
	Foo2(){  }
	private Foo2(byte b){  }
	Foo2(int x){  }
	
	//illegal constructors
	
	void Foo2(){  }		//it's a method,not a constructor
	Foo2(){  }			//not a method or a constructor
	Foo2(short s);		//looks like an abstract method
	static Foo2(float f){  }//can't be static
	final Foo2(long x){  }//can't be final
	abstract Foo2(char c){  }//can't be abstract
	Foo2(int... x,int t){  }//bad var-arg syntax

}

 

1.5.4 变量声明

两种类型的变量:

  • 基本变量:char,boolean,byte,short,int,long,double,float
  • 引用变量:用于引用(访问)一个对象。

基本变量的范围:

类型 字节 最小范围 最大范围
byte 8 1 -2^7 2^7-1
short 16 2 -2^15 2^15-1
int 32 4 -2^31 2^31-1
long 64 8 -2^63 2^63-1
float 32 4 -- --
double 64 8 -- --

 

 

 

 

 

 

 

 

 

 

 

声明引用变量

Object o;
String str;

实例变量

实例变量定义在类中,但位于任何方法之外,并且只有在实例化类时才会被初始化。

  • 实例变量可以使用所有4种访问修饰符。
  • 可以标识为final、transient
  • 不可以标识为abstract、synchronized、strictfp、native
  • 不可以标识为static,否则就是类变量(静态变量)了。

局部(自动/栈/方法)变量

局部变量是在方法内声明的变量,作用域只在方法内部。可以用的修饰符只有final。

 

数组声明

Java中,在声明数组中不可指定数组的大小,只有在实例化的时候,JVM才分配空间。

 

int[] key;
int key [];
int key[];
String[][][] str;
String[] str [];

 

final变量

对于声明为final的基本变量,只是说它们的值不可以修改;而对于引用变量,是指不能修改“引用”了,仍然可以修改该引用的对象的数据。

 

transient变量

表示为瞬态的,则是在告诉JVM,当试图序列化包含这个变量的对象时应跳过它。不需熟悉。

 

volatile变量

volatile告诉JVM,访问该变量的线程必须总是使自己对该变量的私有副本与内存中的主副本保持一致。不需熟悉。

 

静态变量和静态方法

static成员独立于为类而创建的任何实例

 

修饰符使用表:

修饰符     类      成员方法 构造方法 成员变量 局部变量
abstract(抽象的)
static(静态的)
public(公共的)
protected(受保护的)
private(私有的)
synchronized(同步的)
native(本地的)
transient(暂时的)
volatile(易失的)
final(不可改变的)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.5.5 声明枚举

Java5.0以后,我们可以使用枚举——enum

枚举就是限制一个变量只能具有几个预定义的值中的某个值。

枚举可以被声明为独立的类,类成员,但是不能在方法内声明它们。

声明枚举的方式:

enum CoffeeSize {BIG,HUGE,OVERWHELMING};      //在这个枚举声明的后面没有其他声明的情况下,可以加一个分号

枚举类中的构造函数:

enum CoffeeSize{
	BIG(8),HUGE(10),OVERWHELMING(16);
	CoffeeSize(int ounces){
		this.ounces = ounces;
	}
	private int ounces;
	public int getOunces(){
		return ounces;
	}
}
  
1
0
分享到:
评论
5 楼 mengqiang81 2009-07-12  
楼主回复的好详细啊,谢谢啊。没想到现在有中文翻译的教材了,我以前看的都是英文的,看几天就看不动了,太累。打算去买本中文的,跟英文版的对照着看
4 楼 nail2008 2009-07-10  
好像09年的考试号也有变化
3 楼 nail2008 2009-07-10  
mengqiang81 写道
我也打算考scjp,请问楼主打算花多长时间来复习,还有你的书是1.6的吗?是中文版的吗?还有能不能提供sun官网的测试地址。
不胜感激

你好~我打算用2个月,每天看2-3个小时,时间不是那么急,同时的也在提升英文水平,做点私活。
书是1.6的,是电子工业出版社的《SCJP考试指南》针对的是考试号310-065.这本书是翻译的
《SCJP Sun Certified Progammer for Java6 Study Guide(Exam 310-065)》。
书还没看完,不好下评论,原书一定不错,权威、幽默。翻译的看着总是很别扭,一些关键词语翻译的怪怪的,比如“继承”都翻译成了“扩展”。
Sun培训中心:
https://www.suntrainingcatalogue.com/eduserv/client/welcome.do?l=zh_CN
这个是考试简介:
https://www.suntrainingcatalogue.com/eduserv/client/viewPromo.do;jsessionid=F9B22E815119FC8CFEBA9D6E5D4CE2CC.tomcat1?pr_id=3942
这个可以报名,还有考试目标:
https://www.suntrainingcatalogue.com/eduserv/client/loadCourse.do?coCourseCode=CX-310-065.xml
我是08年模拟测试的,当时好像所有的在线测试都没说收费,刚才看了一下,中文网的065是收费的,这个好像还是free的,但是要预定。考试都是英文的,考试完成后会给你发一封邮件告诉你成绩结果,会告诉你每个部分的分数,但是没有答案,没有原题回放。
https://www.suntrainingcatalogue.com/eduserv/client/learningPath.do?p=/training/certification/resources/epractice.html
很多中文的复习书都会带几套模拟题的,还有模拟软件。

2 楼 mengqiang81 2009-07-09  
还有,你写的东西很好,我决定经常来学习一下
1 楼 mengqiang81 2009-07-09  
我也打算考scjp,请问楼主打算花多长时间来复习,还有你的书是1.6的吗?是中文版的吗?还有能不能提供sun官网的测试地址。
不胜感激

相关推荐

    SCJP1.4.rar_scjp .p_scjp 310-065 _scjp p_scjp ppt_scjp1

    1. **题目与答案**:这部分可能包含了一系列针对SCJP考试的实践题目,以及对应的参考答案。考生可以通过做这些题目来检查自己的理解程度,了解考试可能涉及的知识点,从而进行有针对性的复习。 2. **PPT**(演示...

    SCJP考题_学习笔记

    2. **学习笔记**: "scjp_amay's notes for 1.4.doc"可能是一位名叫Amay的学习者针对Java 1.4版本的SCJP考试整理的笔记,这个版本可能包含对当时Java语言特性的详细解析,例如原始类型、字符串常量池、异常处理机制等...

    SCJP6.rar_SCJP310-065_SCJP6_scjp 0_scjp 310-0_test scjp

    1. "SCJP 6.0認證教戰手冊考題1-100.pdf":这部分涵盖了100道考题,主要针对Java的基础知识,如语法、数据类型、流程控制、异常处理、面向对象编程等。考生可以通过这些题目熟悉基本概念和编程技巧。 2. "SCJP 6.0...

    SCJP-sl-275.rar_SL-275_scjp_scjp SL-2_scjp SL-275

    1. **Java语言基础**:SCJP认证的基础部分涵盖了Java语法的各个方面,包括数据类型、变量、运算符、流程控制语句(如if-else、switch、for、while)、数组、方法、字符串处理等。理解这些基本概念对于编写有效的Java...

    scjp.rar_scjp_sjcp考试

    1. **Java语法**:这是Java编程的基础,包括变量声明、数据类型、运算符、控制结构(如if语句、for循环、while循环)、方法定义等。 2. **面向对象编程**:Java是一种面向对象的语言,考生需要理解类、对象、继承、...

    SCJP_Guide.rar_scjp

    这个压缩包"SCJP_Guide.rar_scjp"包含了备考SCJP的关键资料,特别是"SCJP_Guide.pdf",这很可能是官方的学习指南或模拟试题集,对于准备考试的人来说是极其宝贵的资源。 SCJP考试主要涵盖以下几个方面的知识点: 1...

    SCJP.rar_scjp

    11. **包与访问修饰符**:掌握包的使用,理解public、private、protected和默认访问修饰符的权限控制。 12. **枚举与注解**:理解枚举类型的使用,以及注解在代码中的应用和自定义。 通过SCJP的备考,你可以系统地...

    SCJP_经典题笔记

    通过这些题目,我们可以学习到Java中的类型转换规则、方法的重载和覆盖、异常处理机制以及静态变量的特性,这些都是Java编程基础的重要组成部分,对于通过SCJP认证考试以及日常编程工作都非常有帮助。在实际编程中,...

    scjp笔记 考过scjp的学生的第一手资料 强烈推荐

    1. **Java基础知识**:这部分涵盖了Java语言的基础语法,包括变量、数据类型、运算符、流程控制(如if语句、for循环、while循环)、方法定义与调用、数组等。 2. **面向对象编程**:Java的核心特性是面向对象,因此...

    Scjp笔记 - 帝国程序开发.htm

    Scjp笔记 - 帝国程序开发

    SCJP复习笔记分享

    - 内部类可以访问外部类的所有实例变量,无论这些实例变量有什么样的访问控制符。 - 如果内部类定义在一个方法中,则该内部类可以访问方法所在类的实例变量以及该方法中的局部变量,但局部变量必须是`final`的。 ...

    scjp.rar_scjp

    1. **Java基础**:涵盖Java语法、数据类型、流程控制、类与对象、封装、继承、多态等核心概念。 2. **异常处理**:理解Java的异常体系,学习如何使用try-catch-finally语句块处理程序中的错误。 3. **集合框架**:...

    SCJP_认证考试指南(中文版).zip

     本书主要内容包括:声明和访问控制、面向对象、赋值和初始化、运算符、流程控制、异常和断言、I/O、格式化和解析、泛型、集合、内部类、线程和Java开发。书中在介绍考试要点时针对每个考试目标,使用了大量的插图...

Global site tag (gtag.js) - Google Analytics