我知道这个程序的setXxx与c 构造函数器有什么区别

对代码不满足,是任何真正天才的程序员的根本特征。
[Java] 关于set()和get()方法的一点总结
在很多程序中,都喜欢定义一个private变量,然后为这个私有变量加上get(),set()方法。那为什么不直接定义一个public变量呢?这样做到底有什么好处和意义呢?
我只知道用get()和set()有一个好处,当输入.get(.set)时就能显示所有的属性。把所有设置都归纳起来,对于外部的使用都方便而已。假如你开发一个类给别人用,人家只要输入.get就能知道所有的属性。
难道get()和set()真的只是一种规范做法而已,完全等效于public变量?
唯一可以信服的答案暂时就是:用get()与set()可以控制变量。
如果get()和set()方法里面只放一个赋值语句的话,和public变量应该没什么区别。
但是设想,如果你的变量score代表的是一个学生的数学成绩,理论上,分数只可能是0-100的整数,如果你把将score设为public,不用get()和set(),那么用户很可能会输入1-100以外的数字,如果你把将score设为privata,再用setScore()来设置分数,你就完全可以控制这种行为了。
我们先来看看set和get这两个词的表面意思,set是设置的意思,而get是获取的意思,顾名思义,这两个方法是对数据进行设置和获取用的。而且,在类中使用set和get方法时,都是在set和get后面跟上一些特定的词来形成特定意思的方法名,比如setage()和getage(),表示设置年龄和获取年龄。
然后我们来了解一下JAVA面向对象编程中的封闭性和安全性。封闭性即对类中的域变量进行封闭操作,即用private来修饰他们,如此一来其他类则不能对该变量访问。这样我们就将这些变量封闭在了类内部,这样就提高了数据的安全性,当我们想要操作这些域变量怎么办呢?我们可以通过两种方法,第一中即通过public方式的构造器(或称构造函数),对象一实例化就对该变量赋值。第二种就是通过上面提到的set和get方法,这里我举一个特定的例子,我定义一个Person类,该类中有name、age这两个私有域变量,然后我定义setname()、getname()、setage()、getage()这四个方法,通过这四个方法来实现对name和age的操作。这样一来,我不用直接对Person类中的域变量操作,而是通过set和get方法间接地操作这些变量,这样就能提高域变量的安全性,同时又保证了域变量的封装型。
最后说说set和get方法的使用场景,一般来说set和get方法都是对私有域变量进行操作的,所以大多数都是使用在包含特定属性的类实体中。
其实这两个方法只是类中的setxxx和getxxx方法的总称。
import java.util.D
public class User {
public String getUsername() {
public void setUsername(String username) {
this.username =
public String getPassword() {
public void setPassword(String password) {
this.password =
public String getGender() {
public void setGender(String gender) {
this.gender =
public Date getBirthday() {
public void setBirthday(Date birthday) {
this.birthday =
public String getEmail() {
public void setEmail(String email) {
this.email =
User u = new User();
u.setXXX();
u.getXXX();
你想给他赋值就用u.setXXX();&&&&取这个类的对象的某个值就get
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!从最菜的技术开始学起
【java】给成员变量赋值的两种方式的区别 --setXxx()方法和构造方法
setXxx()方法------单纯修改属性值构造方法------给对象中属性进行初始化,若修改初始化值则相当于重新new了一个对象而将原对象变成了垃圾。
注意:这两种方式中,在开发中用setXxx()方法更多一些,比较灵活。public class Test_Person {
public static void main(String[] args) {
//有参构造
Person p1 = new Person("果果",20);
//p1 = new Person("花花",23); 修改属性值,但同时也将原对象变成了垃圾。
System.out.println(p1.getName() + ":" +p1.getAge());
//空参构造
Person p2 = new Person();
p1.setName("夏天");
//p1.setName("秋天");
修改了属性值,重新赋值。
p1.setAge(26);
System.out.println(p1.getName() + ":" +p1.getAge());
class Person{
//空参构造
public Person() {
//有参构造
public Person(String name,int age) {
this.name =
this.age =
//setXxx()方法设置name
public void setName(String name) {
this.name =
public String getName() {
//setXxx()方法设置age
public void setAge(int age) {
this.age =
public int getAge() {
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!当前位置: >>
黑马程序员入学Java知识(精华总结)
黑马程序员入学 Java 知识――精华总结J2SE 部分,Java 高新技术部分,7K 面试题部分等黑马入学要求的知识点总结! 一、黑马程序员―java 概述与基础知识 ............................................................................... 5 1、何为编程?................................................................................................................. 5 2、Java 语言概述,历史、特点 ..................................................................................... 6 3、什么是跨平台性?原理是什么?JVM ..................................................................... 6 4、Jre 和 Jdk 的区别? ...................................................................................................... 7 5、java 虚拟机 JVM ........................................................................................................ 7 6、 Java 程序运行机制................................................................................................... 7 7、 学习 java 注意的地方 .............................................................................................. 7 8、Java 语法格式............................................................................................................. 8 9、代码注释:单行//,多行/* */,文档注释/** */ ...................................................... 8 10、Java 中的标识符....................................................................................................... 8 11、java 中的常量和变量 ............................................................................................... 9 12、Java 成员变量和局部变量 ....................................................................................... 9 14、基本数据类型转换之向上转型和向下转换 ......................................................... 11 15、Java 的运算符......................................................................................................... 12 16、表达式和三目运算符 ............................................................................................. 12 17、程序流程控制 ......................................................................................................... 13 18、三大循环结构:........................................................................................................ 15 19、嵌套循环与流程控制 ............................................................................................. 17 二、黑马程序员―方法与数组 ............................................................................................. 19 1、什么是方法(Method)? ...................................................................................... 19 2、 Java 中方法的格式:............................................................................................. 19 3、方法里的属性 ........................................................................................................... 20 4、方法特点................................................................................................................... 20 5、什么是方法的重载(Overload)? ........................................................................ 21 6、 可变参数................................................................................................................. 22 7、数组简介:............................................................................................................... 22 8、一维数组的声明与初始化: ................................................................................... 23 9、数组的使用: ........................................................................................................... 24 10、分配内存空间 ......................................................................................................... 26 11、二维数组: ............................................................................................................. 27 12、操作数组的工具类-Arrays..................................................................................... 27 13、Java5 新特性对数组的支持: ............................................................................... 28 三、黑马程序员―面向对象(1) ....................................................................................... 29 1、什么叫面向对象? ................................................................................................... 29 2、类............................................................................................................................... 29 3、构造方法................................................................................................................... 30 4、static 关键字 ............................................................................................................. 32 5、匿名对象................................................................................................................... 33 6、this 关键字 ................................................................................................................ 33 7、面向对象之封装 ....................................................................................................... 33 8、访问修饰符............................................................................................................... 34 9、类的设计分析 ........................................................................................................... 34 10、面向对象之继承 ..................................................................................................... 35 11、子类访问父类和方法覆写 ..................................................................................... 36 12、super 关键字和调用父类构造方法 ....................................................................... 36 13、面向对象之多态 ..................................................................................................... 38 14、引用变量类型转换 ................................................................................................. 39 四、黑马程序员―面向对象(2) ....................................................................................... 40 1、基本数据类型的包装类 ........................................................................................... 40 2、基本数据类型和包装类相互转换 ........................................................................... 41 3、基本类型和 String 之间的转换 ............................................................................... 41 4、Object 类 ................................................................................................................... 42 5、代码块....................................................................................................................... 42 6、构造方法的私有化 ................................................................................................... 44 7、 Singleton 模式(单例模式) 饿汉式和懒汉式 ........................................................ 45 8、final 关键字 ............................................................................................................. 47 9、抽象类....................................................................................................................... 47 10、抽象类的体现-模板模式 ....................................................................................... 49 11、接口(interface) ........................................................................................................ 51 12、接口的使用............................................................................................................. 52 13、面向接口编程之制定标准和简单工厂模式 ......................................................... 53 14、面向接口编程之适配器模式 ................................................................................. 55 15、 接口和抽象类的比较 ........................................................................................... 56 16、匿名内部类............................................................................................................. 57 17、枚举类..................................................................................................................... 57 五、黑马程序员―异常处理和常用类 ................................................................................. 60 1、异常........................................................................................................................... 60 2、异常处理格式 ........................................................................................................... 60 3、多异常处理............................................................................................................... 61 4、异常的分类............................................................................................................... 62 5、声明异常(throws) ................................................................................................ 63 6、throw ......................................................................................................................... 63 8、throw 和 catch 同时使用 .......................................................................................... 64 9、常用类....................................................................................................................... 65 10、String 方法 .............................................................................................................. 67 11、StringBuffer 与 StringBuilder ............................................................................... 69 12、Math 和 Random 和 UUID ..................................................................................... 72 13、Date 和 Calendar ..................................................................................................... 74 14、System ..................................................................................................................... 77 六、黑马程序员―线程技术 ................................................................................................. 78 1、进程和线程............................................................................................................... 78 2、创建线程方式 ........................................................................................................... 79 3、两种进程创建方式比较 ........................................................................................... 80 4、线程的生命周期 ....................................................................................................... 82 5、控制线程................................................................................................................... 83 6、多线程安全问题 ....................................................................................................... 85 7、多线程安全问题的解决方法 ................................................................................... 86 8、线程通信................................................................................................................... 90 七、黑马程序员―集合框架(1) ....................................................................................... 93 1、集合类 & 容器...................................................................................................... 93 2、Collection 接口 ......................................................................................................... 94 3、Iterator 接口 .............................................................................................................. 95 4、集合遍历输出方式 ................................................................................................... 96 6、TreeSet ...................................................................................................................... 99 7、List 接口 ................................................................................................................. 103 8、List 接口中常用类.................................................................................................. 105 9、Map 接口 ................................................................................................................ 108 八、黑马程序员―集合框架(2) ..................................................................................... 111 1、Collections 类 ......................................................................................................... 111 2、Arrays ...................................................................................................................... 113 3、泛型(Generic) ......................................................................................................... 114 4、泛型的使用............................................................................................................. 114 5、声明多个泛型类型和通配符 ................................................................................. 119 6、泛型的上限与下限 ................................................................................................. 119 7、泛型接口和方法 ..................................................................................................... 122 8、泛型的嵌套(map 例子) ..................................................................................... 122 九、黑马程序员―IO 操作(1)........................................................................................ 123 1、IO 的概述和 File 方法 ........................................................................................... 124 2、递归(Recursion) ...................................................................................................... 125 3、文件过滤器 java.io.FilenameFilter........................................................................ 127 4、流............................................................................................................................. 128 5、操作流的步骤(重点) ......................................................................................... 129 6、字节流和字符流 ..................................................................................................... 130 7、文件拷贝................................................................................................................. 132 8、字节→字符转换流 ................................................................................................. 134 9、自动关闭资源的 try 语句 ...................................................................................... 135 十、IO 文件操作(2) ....................................................................................................... 136 1、内存操作流............................................................................................................. 136 2、打印流..................................................................................................................... 138 3、格式化输出............................................................................................................. 139 4、标准流..................................................................................................................... 141 5、Scanner(简单文本扫描器) ..................................................................................... 142 6、缓冲流..................................................................................................................... 144 7、合并流(SequenceInputStream) .......................................................................... 146 十一、黑马程序员―网络编程 ........................................................................................... 147 1、什么是网络编程? ................................................................................................. 147 2、网络通讯要素 ......................................................................................................... 147 3、TCP 和 UDP 的联系和用途 .................................................................................. 148 4、InetAddress 与 Socket............................................................................................. 149 5、UDP 传输................................................................................................................ 150 6、TCP 传输 ................................................................................................................ 154 8、小例子..................................................................................................................... 160 十二、黑马程序员―反射机制 ........................................................................................... 162 1、反射的概念............................................................................................................. 162 2、获得 Class 对象 ...................................................................................................... 164 3、九个预定义 Class 对象 .......................................................................................... 165 4、利用 Class 获取类的属性信息 .............................................................................. 166 5、Class 中得到构造方法 Constructor、方法 Method、字段 Field ......................... 167 6、利用反射创建对象 ................................................................................................. 172 7、使用反射调用方法 ................................................................................................. 176 8、使用反射调用可变参数方法 ................................................................................. 177 9、使用反射操作字段 ................................................................................................. 178 10、反射和泛型-反射来获取泛型信息...................................................................... 180 十三、黑马程序员―反射机制 ........................................................................................... 182 1、GUI(图形用户界面) ............................................................................................... 182 2、布局管理器............................................................................................................. 183 3、事件监听机制组成 ................................................................................................. 184 4、Dialog ...................................................................................................................... 191 5、菜单......................................................................................................................... 194 1、Eclipse 的使用技巧 ................................................................................................ 198 2、静态导入(1.5 特性,好处是不用写类名) ....................................................... 200 3、可变参数................................................................................................................. 201 5、基本数据类型的自动拆箱与装箱 ......................................................................... 202 6、枚举......................................................................................................................... 202 7、反射实现框架功能 ................................................................................................. 204 1、内省?了解 JavaBean ............................................................................................ 206 2、内省综合案例和 Beanutils 工具包 ........................................................................ 206 3、注解(Annotation) ............................................................................................... 209 4、泛型......................................................................................................................... 212 1、类加载器................................................................................................................. 216 2、类加载器的委托机制 ............................................................................................. 217 3、一个类加载器的高级问题分析 ............................................................................. 221 4、 代理的概念与作用 ............................................................................................... 221 5、动态代理技术 ......................................................................................................... 223 6、分析 JVM 动态生成的类 ....................................................................................... 223 8、 实现类似 spring 的可配置的 AOP 框架 ............................................................. 230 黑马程序员――面试题之交通灯管理系统 ............................................................... 234 1、面向对象的分析与设计 ......................................................................................... 235 2、Road 类的编写 ....................................................................................................... 236 3、Lamp 类的编写 ...................................................................................................... 237 4、LampController 类的编写 ...................................................................................... 240 5、MainClass 类的编写............................................................................................... 241 黑马程序员――面试题之银行业务系统 ................................................................... 242 1、需求......................................................................................................................... 243 2、需求分析................................................................................................................. 243 3、NumberManager 类 ................................................................................................ 244 4、NumberMachine 类................................................................................................. 245 5、CustomerType 枚举类 ............................................................................................ 245 6、ServiceWindow 类 .................................................................................................. 246 7、MainClass 类与 Constants 类 ................................................................................. 249一、黑马程序员―java 概述与基础知识1、何为编程?编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码, 并最终得到结果 的过程。 为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通 过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完 成某种特定的任务。这种人和计算机之间交流的过程就是编程。2、Java 语言概述,历史、特点是 SUN(Stanford University Network,斯坦福大学网络公司)1995 年推出的一门高级语言。 是一种面向 Internet 的编程语言。 随着 Java 技术在 web 方面的不断成熟,已经成为 Web 应用程序的首选开发语言。 是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。java5.0 之后的三大技术框架 J2EE(Java 2 Platform Enterprise Edition)企业版 在 jdk5.0 版本后称为 JAVAEE,是为开发企业环境下的应用程序提供的一套解决方案。 该技术 体系中包含的技术如 Servlet Jsp 等,主要针对于 Web 应用程序开发。是传智播客就业班和 黑马训练营的主要学习内容之一.。 J2SE(Java 2 Platform Standard Edition)标准版 在 jdk5.0 版本后称为 JAVASE,这是在 java 基础阶段主要学习的内容,也是 java 的基础,以后不 管从事 Android 开发或者是物联网+云计算的开发,等是建立在 JSE 基础上的,因此该技术是 java 的最核心技术,是传智播客基础班的主要上课内容.。 J2ME(Java 2 Platform Micro Edition)小型版 在 jdk5.0 版本以后称为 JAVAME,该技术多应用于一些电子产品的嵌入式开发,以前在手机开 发上应用的也比较多,但是随着智能手机的发展,现在手机应用程序(比如 Android 程序)的开 发已经不再使用该技术。3、什么是跨平台性?原理是什么?JVM所谓跨平台性,是指 java 语言编写的程序,一次编译后,可以在多个系统平台上运行。实现原理:Java 程序是通过 java 虚拟机在系统平台上运行的,只要该系统可以安装相 应的 java 虚拟机,该系统就可以运行 java 程序。 (注意不是能在所有的平台上运行,关键是 该平台是否能安装相应的虚拟机) 。 我的总结:Java 程序之所以能够实现跨平台运行,是因为它根本就不直接运行在任何底层 平台上,而是需要在哪里运行,就在哪里(如 Windows 平台)事先准备好自己的 Java 平台, 而这只是仅仅是安装和配置一个软件而已! 4、Jre 和 Jdk 的区别?JRE: (Java Runtime Environment) , java 运行环境。 包括 Java 虚拟机(JVM Java Virtual Machine) 和 Java 程序所需的核心类库等,如果想要运行一个开发好的 Java 程序,计算机中只需要安 装 JRE 即可。 JDK: (Java Development Kit Java)开发工具包。JDK 是提供给 Java 开发人员使用的,其中 包含了 java 的开发工具,也包括了 JRE。所以安装了 JDK,就不用在单独安装 JRE 了。 其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等简单而言:使用 JDK 开发完成的 java 程序,交给 JRE 去运行。 我的总结:必须熟练的记忆,核心类库,开发工具!5、java 虚拟机 JVMJava Virtual Machine ,简称 JVM; 它是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,它是 Java 最具吸引力的特 性之一,JVM 读取并处理编译过的与平台无关的字节码(class)文件。 Java 编译器针对 JVM 产生 class 文件,因此是独立于平台的。 Java 解释器负责将 JVM 的代码在特定的平台上运行。 Java 虚拟机是不跨平台的.6、Java 程序运行机制编译: javac 文件名.文件后缀名 运行: java 类名 我的总结:Java 程序的组成:Java 源文件,字节码文件。7、学习 java 注意的地方Java 语言拼写上严格区分大小写; 一个 Java 源文件里可以定义多个 Java 类,但其中最多只能有一个类被定义成 public 类; 若源文件中包括了 public 类,源文件必须和该 public 类同名; 一个源文件中包含 N 个 Java 类时,编译后会生成 N 份字节码文件,即每个类都会生成一份 单独的 class 文件,且字节码文件名和 其对应的类名相同; 我的总结:一个 Java 源文件只定义一个类,不同的类使用不同的源文件定义; 将每个源文件中单独定义的类都定义成 public 的; 保持 Java 源文件的主文件名与源文件中的类名一致;8、Java 语法格式任何一种语言都有自己的语法规则,Java 也一样,既然是规则,那么知道其如何使用就可以了。 代码都定义在类中,类由 class 来定义,区分 public class 和 代码严格区分大小写,如 main 和 Main 是不一样的; Java 中的标识符与关键字; 注释; main 方法的作用: 程序的入口 保证程序的独立运行 被 JVM 调用9、代码注释:单行//,多行/* */,文档注释/** */1.单行注释 //: //后到本行结束的所有字符会被编译器忽略; 2.多行注释 /* */: /* */之间的所有字符会被编译器忽略 3.文档注释 /** */: 在/** */之间的所有字符会被编译器忽略,java 特有的(用于生成文档); 我的总结:多行和文档注释都不能嵌套使用。10、Java 中的标识符可简单理解为在 Java 程序中为了增强阅读性自定义的名称。比如:类名,方法名,变量名 等。 命名规则: (1) 由字母、数字、下划线、$组成,不能以数字开头 注意:此处的字母还可以是中文,日文等; (2) 大小写敏感 (3) 不得使用 java 中的关键字和保留字 (4) 别用 Java API 里面的类名作为自己的类名。 11、java 中的常量和变量变量的概念: 占据着内存中的某一个存储区域; 该区域有自己的名称(变量名)和类型(数据类型); 该区域的数据可以在同一类型范围内不断变化; 为什么要定义变量: 用来不断的存放同一类型的常量,并可以重复使用; 使用变量注意: 变量的作用范围, 初始化值 定义变量的格式:t 数据类型 变量名 = 初始化值; 注:格式是固定的,记住格式,以不变应万变。 作用范围:定义开始到定义它的代码块结束; 同一范围内,不允许多个个局部变量命名冲突12、Java 成员变量和局部变量局部变量:不是声明在类体括号里面的变量; 局部变量使用前必须初始化值; 局部变量没有默认初始化值; 局部变量的作用域是从定义开始到定义它的代码块结束; 成员变量:在方法体外,类体内声明的变量, 又称字段(Field)或全局变量; (其实 Java 中没有全 局变量,由于 Java 是面向对象语言,所有变量都是类成员) 成员变量的作用域是整个类中; 我的总结:注意成员变量和局部变量的区别package reviewD public class Demo2 { public static void main(String[] args) { System.out.println(i); } } 备注:局部变量调用前没有初始化,所以编译的时候就会报错! package reviewD public class Demo2 { public static void main(String[] args) { System.out.println(i); } } 备注:此时 i 为全局变量,未初始化会被赋予默认的初始化值!程序正确! 我的总结: 局部变量是定义在方法中的变量,,,出了该方法就不能访问该变量了.... 成员变量是在类中定义,,,,并且在类的成员方法中都能访问的变量..13、基本数据类型在数据类型中,最常用也是最基础的数据类型,被称作基本数据类型。可以使用这些类型的 值来代表一些简单的状态。 Java 语言的基本数据类型总共有以下 8 种,下面是按照用途划分出的 4 个类别:定点类型: 整数型是一类代表整数值的类型。当需要代表一个整数的值时,可以根据需要从 4 种类型 中挑选合适的,如果没有特殊要求的话,一般选择 int 类型。4 种整数型区别主要在每个数 据在内存中占用的空间大小和代表的数值的范围。浮点类型: 小数型是一类代表小数值的类型。当需要代表一个小数的值时,可以根据需要从以下 2 种 类型中挑选合适的。如果没有特殊要求,一般选择 double 类型。 由于小数的存储方式和整数不同, 所以小数都有一定的精度, 所以在计算机中运算时不够精 确。根据精度和存储区间的不同,设计了两种小数类型。字符型: 字符型代表特定的某个字符, 按照前面介绍的知识, 计算机中都是以字符集的形式来保存字 符的,所以字符型的值实际只是字符集中的编号,而不是实际代表的字符,由计算机完成从 编号转换成对应字符的工作。Java 语言中为了更加方便国际化,使用 Unicode 字符集作为 默认的字符集,该字符集包含各种语言中常见的字符。在程序代码中,字符使用一对单引号 加上需要表达的字符来标识,例 如’A’ 、 ’a’等,当然也可以直接使用字符编码,也就是一个非负整数进行表示。布尔型: 布尔型代表逻辑中的成立和不成立。 Java 语言中使用关键字 true 代表成立, false 代表不成 立。布尔型是存储逻辑值的类型,其实很多程序中都有逻辑值的概念,Java 把逻辑的值用 布尔型来进行表达。14、基本数据类型转换之向上转型和向下转换向上转换: 整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则: 容量小的类型可自动转换为容量大的数据类型; byte,short,char → int → long → float → double byte,short,char 之间不会相互转换,他们在计算时首先会转换为 int 类型。 boolean 类型是不可以转换为其他基本数据类型。 Eg: int i = 123; long l = //自动转换,不需强转 float f = 3.14F; double d = 向下转换: 整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则: 容量小的类型可自动转换为容量大的数据类型; byte,short,char → int → long → float → double byte,short,char 之间不会相互转换,他们在计算时首先会转换为 int 类型。 boolean 类型是不可以转换为其他基本数据类型。 Eg: long l = 123L; int i = (int)//必须强转 double d = 3.14; float f = (float) 我的总结:类型转化 小转大,自动!自动类型转换(也叫隐式类型转换) 大转小,强转!强制类型转换(也叫显式类型转换)15、Java 的运算符运算符是一种特殊符号,用以表示数据的运算、赋值和比较等共分以下几种: 算术运算符(+ 、― 、* 、/ 、%) 赋值运算符(= 、+=、-=、*=、/=,、%=) 关系运算符(&、&=、&、&=、!=) 条件运算符(&&、||、 !&、|、^) 位运算符(&、|、^、~、&&、&&、&&&、&&&) 我的总结: 逻辑运算符用于连接布尔型表达式,在 Java 中不可以写成 3&x&6,应该写成 x&3 & x&6 。 “&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为 真,右边参与运算,如果左边为假,那么右边不参与运算。 “|”和“||”的区别同理,双或时,左边为真,右边不参与运算。 “ ^ ”与“|”不同之处是:当左右都为 true 时,&^&结果为 false。16、表达式和三目运算符是由数字、运算符、数字分组符号(括号)等以能求得数值的有意义排列的序列; a+b 3.14 + a (x + y) * z + 100 boolean b= i & 10 && (i%10 != 0) 表达式的类型和值: 对表达式中操作数进行运算得到的结果是表达式的值。 表达式值的数据类型即为表达式的类型。 表达式的运算顺序 应按照运算符的优先级从高到低的顺序进行; 优先级相同的运算符按照事先约定的结合方向进行; “三目运算符” ,语法格式: x ? y : 其中 x 为 boolean 类型表达式,先计算 x 的值,若为 true,则整个三目运算符的结果是表达式 y 的值,否则就是 z 的值。 package reviewD public class Demo2 { public static void main(String[] args) { String s = &lz&; s = (s == &lz& ? &正确& : &错误&); System.out.println(s); } } 输出:正确17、程序流程控制顺序结构 分支结构(条件结构) 循环结构 控制循环结构 顺序结构: 如果代码里没有流程控制, 程序是至上而下一行一行执行的, 一条语句执行完之后继续执行 下一条语句,直到程序的最后。 if 语句: 基本语法:if(表达式){方法体}else if(表达式){方法体}else(方法体) 几种形式: 三种格式: if(条件表达式){执行语句;} if(条件表达式){执行语句;}else{执行语句;} if(条件表达式){执行语句;}else if (条件表达式){执行语句;}??else{执行语句;} public class If3 { public static void main(String args[]) { int i = 3; if (i & 5) { System.out.println(&变量 i 大于 5&); } else if (i & 4) { System.out.println(&变量 i 小于 4&); } else { System.out.println(&其他&); } } } switch 控制语句 格式: switch(表达式) { case 表达式可能的结果值 1: 执行语句; break; case 表达式可能的结果值 2: 执行语句; break; ... default: 执行语句; break;//最后这个一般不写 } 备注: case 之间与 default 没有顺序。先执行第一个 case,都没有匹配的 case 值执行 default。 结束 switch 语句的两种情况:遇到 break,switch 语句执行结束。 如果匹配的 case 或者 default 没有对应的 break,那么程序会从第一次匹配的 case 语句开始 继续向下执行,运行可以执行的语句,直到遇到 break 或者 switch 结束为止。 class switch2 { public static void main(String[] args) { int a = 7,b = 5; switch(a-b) { case 3://表达式可能的值; { System.out.println(&33!&); } case 4: { System.out.println(&44!&); } default://都没有执行则 执行该语句! System.out.println(&其它的&); } } } 注意:switch 语句只能使用 byte、char、short、int 四种基本类型以及它们的包装类和枚举18、三大循环结构:用于处理需要重复执行的操作; 根据判断条件的成立与否,决定程序段落的执行次数,而这个程序段落我们称为循环体; while:事先不需要知道循环执行多少次; do while:同上,只是至少要执行一次(先做,后判断); for:需要知道循环次数; 循环结构(while & do while) while 语句 格式: while(条件表达式值为 true) { 执行语句; } do while 语句 格式: do { 执行语句; } while(条件表达式值为 true); 我的总结:do while 特点是无论条件是否满足,循环体至少被执行一次。 循环里的条件表达式不能直接写 false 或直接写结果是 false 的表达式,不过可以使用变量来 传递 false 值; 循环结构(for) 格式: for(初始化表达式(1) ;循环条件表达式(2) ;循环后的操作表达式(3)) { 执行语句; (4) } 执行顺序:(1) → (2) → (4) → (3) → (2) → (4) → (3) 备注: 1, for 里面的 3 个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行 循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条 件不满足为止。 2, while 与 for 可以互换,区别在于 for 为了循环而定义的变量在 for 循环结束就在内存中释 放。而 while 循环使用的变量在循环结束后还可以继续使用。 3, 最简单无限循环格式:while(true) , for(;;),无限循环存在的原因是并不知道循环多少次, 而是根据某些条件,来控制循环。 Eg: 用三种循环控制求出 100 以内前 5 个 3 的倍数的数字; class while { public static void main(String[] args) { int i = 1,k = 0; while(i&=100) { if(i%3==0) { if(k&5) System.out.println(i); k++; } i++; } } } class dowhile { public static void main(String[] args) { int i = 1,k = 0; do{ if(i%3==0) { if(k&5) System.out.println(i); k++; } i++; } while(i&=100); } } class for { public static void main(String[] args) { int i = 1,k = 0; for(;i&100;i++) { if(i%3==0&&k&5) { System.out.println(i); k++; } } } }19、嵌套循环与流程控制嵌套循环:循环里套循环 假设外循环的循环次数是 m 次,内循环的循环次数是 n 次, 那么内层循环的循环次数需要 m * n 次。 Eg:利用 for 循环语句的嵌套打印出乘法口诀表 class break1 { public static void main(String[] args) { for(int i=1;i&=10;i++)//定义 i 与 j 的值必须在 for 循环里面,否则每次跳出循环重新 执行就无法取值 { for(int j=1;j&=10;j++) { if(j&=i) System.out.print(j+&*&+i+&=&+i*j+& &);//小注意:print()括号里面 必须传递参数,println()无限制! } System.out.println(); } } } 流程控制 break 语句、 continue 语句; break:终止该层循环; continue:跳过该层循环 注: ①:若这两个语句离开应用范围,存在是没有意义的。 ②:这个两个语句后面都不能有语句,因为执行不到。 ③:continue 语句是跳过本次循环,继续下次循环。 ④:标签的出现,可以让这两个语句作用于指定的循环。 Eg: package reviewD public class Demo2 { public static void main(String[] args) { int i = 1; for (; i & 10; i++) { System.out.println(i); if(i == 8){//流程控制,不会完全执行! } } } } 二、黑马程序员―方法与数组第二篇:1、什么是方法(Method)?方法是一组为了实现特定功能的代码块的集合。方法在语法上的功能主要有以下两个: ①:结构化代码 将代码按照功能进行组织,使代码的结构比较清晰,容易阅读和修改,也就是程序的可维护 性强。 ②:减少代码重复 一个固定的功能,可能会在程序中多次使用,在使用时只需要调用写好的方法,而不用重复 书写对应的功能代码。 方法在书写时需要注意以下两点: ①:逻辑严谨 方法实现的一个完整的功能, 所以在书写时要考虑到各种可能的情况, 并对每种情况做出恰 当的处理。 ②:通用性强(可重复利用) 方法实现的是一种功能,在实际实现时,可以根据需要,使方法具备一定的通用性,除非必 要,否则不要写专用的方法。在 Java 语言中,恰当的使用方法,将使程序更加优雅,便于 阅读和使用。 我的总结: 方法:一段可重复使用的代码段; 程序中完成独立功能的一段代码的集合。2、Java 中方法的格式:[修饰符] 返回值类型 方法名([参数类型 形式参数 1,参数类型 形式参数 2,??]) { 执行语句; [return 返回值;]//需要的话 } 参数列表(参数的类型 ,参数的个数,参数的顺序) 我的总结:只要上述有一个不一样,那么这个参数列表就不一样!对于方法而言,即使同 名也不是同一个方法,也就是下面讲的方法签名。 3、方法里的属性访问控制符:访问控制符限定方法的可见范围,或者说是方法被调用的范围。方法的访问控 制符有四种,按可见范围从大到小依次是:public、protected,无访问控制符,private。其中 无访问控制符不书写关键字即可。具体的范围在后续有详细介绍。 形式参数:在方法被调用时用于接收外界输入的数据。 实参:调用方法时实际传给方法的数据。 返回值:方法在执行完毕后返还给调用它的环境的数据。 返回值类型:事先约定的返回值的数据类型,如无返回值,必须给出返回类型 void。 方法签名:方法名和方法的参数列表(能区别方法);//最关键的 java 语言中调用方法:对象名.方法名(实参列表) 。 实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配。 return 语句终止方法的运行并指定要返回的数据。4、方法特点它可以实现独立的功能; 必须定义在类里面; 它只有被调用才会执行; 它可以被重复使用; 方法结束后方法里的对象失去引用; 如何定义一个功能,并通过方法体现出来: ① 明确该功能运算后的结果.明确返回值类型; ② 明确在实现该功能过程中是否有未知内容参与运算,确定参数列表; Eg: package reviewD /** * player 的值分别是1,2,3或者其他值时,该方法返回“大明” , “二明” , “小明” , “我 没有这个孩子” 。 */ public class Demo2 { public static void main(String[] args) { int player = 5; System.out.println(&返回的结果是:&+show(player)); } public static String show(int p){ switch (p) { case 1: return &大明&; case 2: return &二明&; case 3: return &小明&; default: return &我没有这个孩子!&; } } }5、什么是方法的重载(Overload)?概念: 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型或 参数顺序不同即可。 存在的原因: 屏蔽了一个对象的同一类方法由于参数不同所造成的差异。 特点: 与返回值类型无关,只看参数列表。 以下是方法重载的示例: public void a(int a){} public int a(){} public void a(int a,String s){} Eg: class Chongzai { public static void main(String[] args) { int ret = name(3,4,5); System.out.println(ret); } public static int name(int a, int b) { int c = a+b; } public static int name(int a, int b, int m)//这就叫做方法的重载,只 要参数列表不一样。好处:用户使用时限制很小; { int c = a+b+m; } } 我的总结:方法重载,方法名相同,但是参数列表不一致! (和方法覆写不一样,方法覆写 的方法名和参数列表都必须一样) ,注意方法重载和方法覆写的不同!6、可变参数从 java5 开始出现了可变参数,这是对 java 方法及数组的拓展! 方法中可以接受的参数不再是固定个数的,而是随着具体需求传递的多少来决定。 定义格式: 返回值类型 方法名(参数类型 ... 形式参数){ } 可变参数的特点: 只能出现在参数列表的最后; ... 位于变量类型和变量名之间,前后有无空格都可以; 调用可变参数的方法时, 编译器为该可变参数隐含创建一个数组, 在方法体中以数组的形式 访问可变参数。 Eg: package reviewD import java.util.A public class Demo6 { public static void main(String[] args) { int []age = {1,2,3,69,36,636,459}; show(age); } public static void show(int...a){//此时这里写的就是可变参数,和数组 的作用一样! //把数组给打印出来! System.out.println(Arrays.toString(a)); } }7、数组简介:数组(Array)是 Java 语言中内置的一种基本数据存储结构, 通俗的理解, 就是一组数的集合, 目的是用来一次存储多个数据。 数组是程序中实现很多算法的基础, 可以在一定程度上简化 代码的书写。 备注: 1. 2. 3. 4.数组的好处:数组里的每个元素都有编号,编号从 0 开始,并且依次递增,方便操作这 些元素; 使用 Java 数组:必须先声明数组,再给该数组分配内存; 数组对应在内存中一段连续空间。 数组元素必须是相同数据类型, 也可以是引用数据类型, 但是同一个数组中的元素必须 是同一类数据类型。8、一维数组的声明与初始化:一维数组:可以理解为一列多行、类型相同的数据,其中每个数据被称为数组元素; 一维数组的声明方式: type varName[]; 或 type[] varN(推荐) Eg:int age[]; int [] 数组的长度一旦确定,就不能改变,也就数组是定长的; 我的总结:java 语言声明数组的时候不能指定其长度(元素的个数) Eg:int a[5]; //非法 初始化: Java 中的数组必先初始化才可以使用, 所谓初始化就是为数组的数组元素分配内存, 并为每 个数组元素赋值; 数组初始化的两种方式: 静态初始化: 初始化时由我们自己指定每个数组元素的初始值, 由系统决定需要的数组长度; 格式:数组名 = new 数组类型[]{元素 1,元素 2,元素 3...元素 n}; 简化语法:数组名 = {元素 1,元素 2,元素 3...元素 n}; 动态初始化:初始化时由我们指定数组的长度,由系统为数组元素分配初始值; 格式:数组名 = new 数组类型[数组长度]; 我的总结: 不能静态和动态初始化同时使用: 也就是说不能同时指定数组的长度和元素; Eg: package reviewD /** * 声明数组及初始化 */ public class Demo3 { public static void main(String[] args) { int []age = new int[10]; //动态初始化 for (int i = 0; i & age. i++) { age[i] = System.out.print(age[i]+& } } } 输出:0 1 2 3 4 5 6&);7899、数组的使用:Java 语言的数组索引是从 0 开始的, 也就是说数组里的第一个元素的索引是 0,第二个元素的 索引是 1,依次可以类推。 常见操作: 给数组元素赋值 数组名[索引] = 数组类型的值 ; 访问数组元素 数组类型 变量 = 数组名[索引]; 得到数组的长度 int len = 数组名. //length 是数组的属性 遍历数组(备注:length 属性和循环语句) 数组元素的索引范围(0,长度―1) Eg:判断数组是否重复 package reviewD /** * 判断数组是否重复 */ public class Demo3 { public static void main(String[] args) { int []age = {1,2,3,4,5,6,5}; for (int i = 0; i & age.length-1; i++) {//双层循环,定住一个, 再考虑下一个! for (int j = i+1; j & age. j++) { if(age[i] == age[j]){ System.out.println(&有重复的!&+i+& &+j); } } } } } 求最大值: package reviewD public class Demo4 { public static void main(String[] args) { int age[] = new int[] { 12, 26, 3, 60, 55, 6, 48, 4, 98 }; int max = age[0]; for (int i = 0; i & age. i++) { if (max & age[i]) { max = age[i]; } } System.out.println(max); } } 经典用法:冒泡法排序 class Bubblesort { public static void main(String args[]) { int [] arr={5,1,6,4,2,8,9}; bubble(arr); printarray(arr); } public static void bubble(int[] arr) { for (int i=0;i&arr.length-1 ;i++ ) { for (int y=0;y&arr.length-i-1 ; y++) //让每一次比较的元素减 少,-1是为了防止数组角标越界; { if(arr[y]&arr[y+1]) //相邻两元素相比 { int temp = 0; temp = arr[y]; arr[y] = arr[y+1] ; arr[y+1] = } } } } public static void printarray(int[] arr) { for (int i=0;i&arr.i++ ) { if(i!=arr.length-1) System.out.print(arr[i]+&,&); else System.out.println(arr[i]); } } } //选择排序 public class Demo6 { public static void main(String[] args) { int []age = {1,2,36,363,56,95,12,32,}; for (int i = 0; i & age. i++) { for (int j = i+1; j &= age.length-1; j++) { if(age[i] & age[j]){ int temp = age[i]; age[i] = age[j]; age[j] = } } } System.out.println(Arrays.toString(age)); } } //输出为:[1, 2, 12, 32, 36, 56, 95, 363, ]10、分配内存空间分配内存空间 数组名=new 数据类型[数组长度]; new 关键字用来实现为数组或对象分配内存 (堆内存) 数组具有固定的长度。获取数组的长度: 数组名.length 定义数组+分配内存空间 数据类型[]数组名=new 数据类型[数组长度]; 定义数组时不指定长度,分配空间时指定数组长度;如:String cities[] = new String[6]; 数组元素: 数组名[下标值]; 数组下标从 0 开始scores[0]=75; 数组的内存分配 栈内存和堆内存 如定义一个数组 int[]scores 将在栈内存中为 scores 分配内存空间,其值是一个不确定的值。 当执行语句 scores=new int[5]时,将在堆内存分配连续 5 个空间,每个空间 4 个字节,用于 存放整型数据,其初始值为 0,然后将该段空间首地址,也就是第一个元素的地址,比如 0*3000,赋给 scores 变量。该地址相当于一个指针,指向堆内存中分配的空间。此时堆内存 中分配的 5 个空间可以分别使用 scores[0],一直到 scores[4]来表示。当执行四个赋值语句时, 分别用指定值填充到对应元素位置。如果此时将 null 值赋给 scores 时,scores 变量将不再指 向任何位置,此时堆内存中分配的空间就变成了垃圾,由垃圾回收器在某一时间进行回收。 在方法中定义的变量, 包括基本数据类型变量和引用数据类型变量, 都将在栈内存中分配空 间,当超过变量作用范围后,自动回收 我的总结:初始化=定义数组+分配空间+赋值11、二维数组:二维数组:(其实是一个一维数组,它的每一个元素又是一个一维数组), 可以看做是一张表格。 初始化: 动态初始化 int[ ][ ] arr = new int[3][2]; 定义了一个二维数组,其中有 3 个一维数组,每一个一维数组中有 2 个元素 静态初始化 int[ ][ ] arr = new int[][]{{1,2},{3,4},{5,6}}; int[ ][ ] arr = {{1,2},{3,4},{5,6}}; Eg: public class Demo3 { public static void main(String[] args) { int age[][] = new int[][]{{1,2},{3,4},{5,6,7}}; System.out.println(age[0].length);//2 System.out.println(age[2].length);//3 } }12、操作数组的工具类-Arraysstatic int binarySearch(type[] a, type key) 使用二分搜索法来搜索 key 元素在数组中的索引; 若 a 数组不包括 key,返回负数。 (该方法必须已按升序排列后调用) 。 static int binarySearch(type[] a, int fromIndex, int toIndex, type key) 使用二分搜索法来搜索 key 元素在数组中从 fromIndex 到 toIndex 的索引;若 a 数组不包括 key,返回负数。 (该方 法必须已按升序排列后调用) 。 static boolean[] copyOf(type[] original, int newLength) 复制指定的数组见下面备注 static byte[] copyOfRange(type[] original, int from, int to) 将数组的指定范围复制到一个新数 组。 static boolean equals(type[] a, type[] a2) 如果两个数组长度相等和元素一一相等,则返回 true static void fill(type[] a, type val) 将 a 数组所有元素都赋为 val。 static void fill(type[] a, int fromIndex, int toIndex, type val) 将 a 数组从 formIndex 到 tiondex 索 引之间的元素都赋为 val。 static void sort(type[] a) //sort(int[] arr)对指定的数组按数字升序进行排序。 static void sort(type[] a, int fromIndex, int toIndex) 对指定数组的从 formIndex 到 tiondex 索引 之间的元素按数字升序进行排序。 static String toString(type[] a) 返回指定数组内容的字符串表示形式。多个数组元素之间用英 文逗号或空格隔开。 我的总结:使用数组工具类可以节省时间,提高效率,注意常查阅 api; Eg: package reviewD import java.util.A //使用Arrays类 public class Demo4 { public static void main(String[] args) { int[] age = new int[] { 12, 26, 3, 60, 55, 6, 48, 4, 98 }; System.out.println(Arrays.toString(age));// 直接打印出数组的方 法 int []age2 = {1,2,3,4,5,6,98,65,23}; int i = Arrays.binarySearch(age2, 98); System.out.println(i); } }13、Java5 新特性对数组的支持:增强 for 循环 → for-each for (参数类型 参数名 : 数组名) { 代码块 } Eg: package reviewD public class Demo6 { public static void main(String[] args) { int []age = {1,2,3,69,36,636,459}; for (int i : age) { System.out.println(i); } } } 这样就用 for-each 把数组遍历输出! 我的总结:for-each 用于数组和 Iterable 对象!在以后的集合学习中还会经常用到 for-each 循环。三、黑马程序员―面向对象(1)第三篇:1、什么叫面向对象?面向对象(Object-Oriented,简称 OO)就是一种常见的程序结构设计方法。 面向对象思想的基础是将相关的数据和方法放在一起, 组合成一种新的复合数据类型, 然后 使用新创建的复合数据类型作为项目的基础。 面向对象是一个很抽象的概念,它相对面向过程而言。 过程与对象都是一种解决问题的思想。 面向过程:强调的是功能行为,一种过程,先干啥,再干啥; 面向对象:将功能封装到对象里,强调的是具备某功能的对象; 按照面向对象的思想,可以把任何的东西看做对象! 面向对象的三个特征: 封装(Encapsulation); 继承(Inheritance); 多态(Polymorphism)。 我的总结: 面向过程:强调的是具体的功能实现; (执行者) 面向对象:强调的是具备功能的对象。 (管理者)2、类类(class)是 Java 语言的最小编程单位,也是设计和实现 Java 程序的基础,本部分将深入介 绍类的相关知识。 类的概念 类是一组事物共有特征和功能的描述。 类是对于一组事物的总体描述, 是按照面向对象技术 进行设计时最小的单位,也是组成项目的最基本的模块。类的概念是抽象的,类似于建筑设 计中的图纸,是对于现实需要代表的具体内容的抽象。类只包含框架结构,而不包含具体的 数据。所以类代表的是总体,而不代表某个特定的个体。 我的总结:类是抽象的,对象是具体的,实实在在的! 类的定义: [修饰符] class 类名{ 1~n 个构造方法; 0~n 个字段; 0~n 个方法 } 定义类,其实就是定义类里面的对象 对象包含: 状态; (属性) 功能、行为; (方法) 通过类来描述对象; 状态--------成员变量; 功能、行为――方法; Eg: class Person{ //属性 private S //方法 public void show(){ System.out.println(&个人情况:&+name+age+sal); } }3、构造方法构造方法:用来构造类的实例(每一个类都默认有一个无参的构造方法,得使用 new 调用) 字段:类或对象所包含的数据,对类状态的一种描述; 方法:类或对象的特征或行为 作用: 给类中的字段进行初始化,可以用来创建对象。 特点: 方法名与类名相同 不用定义返回值类型 不需要写 return 语句 我的总结: 注意: 默认构造方法的特点。 多个构造方法是以重载的形式存在的。 构造方法的重载:(需要哪个就去适配哪个,调用哪个) this([实参]);调用当前类的构造方法 注意: this([实参]);必须放在构造器的第一行;对象的产生格式: 类名称 对象名 = new 类名称(); 因为有(),所以是方法,实际上它就是构造方法,并且是非私有的构造方法。 如:CellPhone cp = new CellPhone(); Eg: class Person{ private S public void show(){ System.out.println(&个人情况:&+name+age+sal); } public Person(String name) { super(); this.name = } public Person(String name, int age) { super(); this.name = this.age = } public Person(String name, int age, int sal) { super(); this.name = this.age = this.sal = } }4、static 关键字特点: 随着类的加载而加载 优先于对象存在 被所有对象所共享 可以直接被类名调用 使用注意: 静态方法只能访问静态成员 但是非静态成员可以访问静态成员; 静态方法中不可以使用 this,super 关键字 主方法(main)是静态的(可以利用类名去调用静态的 main 方法,很正常!但是会陷 入死循环,导致内存溢出,jvm 自动停止! ) public static void main(String[] agrs){} 可修饰字段,方法。 用 static 修饰的成员表示它属于这个类共有,而不是属于该类的单个实例。 static 修饰的字段 == 类字段 static 修饰的方法 == 类方法 没使用 static 修饰的字段和方法,成员属于类的单个实例, 不属于类。 没有 static 修饰的字段 == 实例字段 没有 static 修饰的方法 == 实例方法 类和实例访问字段和方法的语法: 访问类成员: 类.字段 类.方法 访问实例成员: 实例.字段 实例.方法 我的总结: static 修饰的字段和方法,既可以通过类调用,也可以使用实例调用; 没 static 修饰的字段和方法,只能使用实例来调用(建议使用:类名来调用; 对象调用类成员,也会转换类名调用) static 关键字不能与 this,super 同时连用!其实在底层 , 5、匿名对象一个没有名字的对象, 创建了一个对象出来,没有赋给一个变量; 特点: 对方法或字段只进行一次调用时; 可作为实际参数进行传递; 只在堆里面开辟存储区域, 只能使用一次, 使用完就被销毁了; 何时使用?只拿来用一次! ! new Person();表示匿名对象,没有名字的对象 new Person().age = 17;//使用一次之后就被销毁了6、this 关键字特点:this 表示当前对象。 当前对象 ←→ 当前正在调用实例成员的对象 换言之:谁调用了方法,谁就是当前对象。 什么时候使用 this 关键字呢? 方法间的相互调用; this.字段; 构造器中相互调用,但是此时 this([参数])必须写在构造方法第一行。 this 不能用在 static 修饰的方法里和 static 修饰的代码块里; Eg:构造方法中的 this.name =7、面向对象之封装封装的两个含义: 1.把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类); 2.&信息隐藏&, 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,字段; 封装机制在程序中的体现是:把描述对象的状态用字段表示,描述对象的行为用方法表示, 把字段和方法定义在一个类中,并保证外界不能任意更改其内部的字段值,也不允许任意 调动其内部的功能方法。 程 序 中 的 一 种 体 现 : 通 常 将 类 中 的 成 员 变 量 私 有 化 (private) , 通 过 对 外 提 供 方 法 (setXxx,getXxx),可对该变量(xxx)进行访问。 boolean 类型的变量没有 getXX,只有 isXX; Eg: class Person1{ private S public String getName() { } public void setName(String name) { this.name = } public int getAge() { } public void setAge(int age) { this.age = } }8、访问修饰符private 类访问权限:本类内部可以访问,不能继承到子类; default 什么都不写,包访问权限:本类内部可以访问,同包其他类也可以访问,同包可继承; protected 子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以 访问,能继承到子类; public 公共访问权限:任何地方都可以访问,能继承到子类; 我的总结:9、类的设计分析分析思路: 根据要求写出类所包含的字段; 所有的字段都必须私有化; 封装之后的字段可通过 setter 和 getter 设值和取得; 按需求可添加若干构造方法; 根据需求可添加相应的方法; 类中的所有方法都不要直接处理(输出打印),而是交给调用者去处理。10、面向对象之继承首先有反映一般事物特性的类,然后在此基础上反映出特殊事物的类; 也就是说:继承是一种从一般到特殊的关系; 特点: 1、提高了代码的复用性。 2、让类与类之间产生关系,有了这个继承关系才有了多态的特性。 3、Java 语言中只支持单继承(有别于 C 语言) 。 因为多继承容易带来安全隐患(父类多了, 功能相同的话,就会出现调用不确定性吗, 覆写一个方法,到底覆写的谁的?) 。 ps:接口可以实现多继承 4、Java 支持多层继承,object 是每个类的超类,实现树形结构。 我的总结: 继承是多态的前提。 对类而言,只支持单继承。接口可以实现多继承 格式: [修饰符] class SubClass extends SuperClass 按照这种关系,我们把 SuperClass 类称为父类或基类,把 SubClass 称为子类或派生类或拓 展类;我的总结: java.lang.Object 是所有类的父类, Object 要么是直接父类要么是间接父类。 Eg: 学生属于人的一种特殊情况,此时我把人的共性写在 Person 类里面,为了让学生拥有这 些共性(别的比如老师也可以有这些共性),然后我就让学生来拓展 Person 类。 我的总结: 子类与父类的关系: 子类拓展父类(子类是父类的一种特殊情况) 主要是以父类为基础,然后添加属于自己的字段和方法。 父类的私有成员子类不能继承到;父类的构造方法不能被继承; Java 只支持单继承,不支持多继承;//不然的话,比如 show 方法,继承了多个,不知道到底 调用那一个。 一个类有且只有一个直接父类; 一个类没显示的继承其他的一个类的时候,默认的直接父类就是 Object 类; Student 的直接父类是 Person,Object 类也是 Student 类的父类,但是是间接父类; 一旦一个类显示的继承了其他的一个类的时候,此时默认的直接父类 Object 就会被取消; Java 里一个类只能有一个直接父类;java.lang.Object 是所有类的父类, Object 要么是直接父类 要么是间接父类。 子类对象实例化过程 在继承操作中,对于子类对象的实例化: 子类对象在实例化之前必须首先调用父类中的构造方法之后再调用自身的构造方法。11、子类访问父类和方法覆写子类不能直接访问父类的私有成员; 但是子类可以调用父类中的非私有方法来间接访问父类的私有成员。 Person 类中有私有字段 name,Student 继承 Person new Sudent(). × new Student().getName(); √ 子类拓展父类(子类是父类的一种特殊情况) 主要是以父类为基础,然后添加属于自己的字段和方法。 方法覆写产生原因: 当父类中某个方法不适合于子类时,子类出现父类一模一样的方法. 判断必杀技:子类方法前加上@Override 能编译通过,表明是方法的覆写。 调用被覆盖的父类方法:使用 super.方法名(实参); 方法覆写时应遵循的原则(一同两小一大): (一同):方法签名必须相同; (两小): 子类方法的返回值类型比父类方法的返回值类型更小或相等 子类方法声明抛出的异常应比父类方法申明抛出的异常更小或相等; (一大):子类方法的访问权限应比父类方法更大或相等; 子类需要覆写父类方法。 当父类的某个方法不适合于子类本身的特征行为时就当覆写父类中应当改变的方法。12、super 关键字和调用父类构造方法表示父类对象的默认引用 如果子类要调用父类被覆盖的实例方法, 可用 super 作为调用者调用父类被覆盖的实例方法。 使用 super 调用父类方法 使用 super 调用父类的构造方法 调用构造方法 本类中调用另一个重载构造方法用 this(参数列表) 子类构造方法调用父类构造方法用 super(参数列表) 子类调用父类的构造方法时: super 必须放在第一句 Java 在执行子类的构造方法前会先调用父类无参的构造方法, 其目的是为了对继承自父类的 成员做初始化操作。 子类在创建对象的时候, 默认调用父类的无参构造方法, 要是子类构造方法中显示指定调用 父类其他构造方法,就调用指定的父类构造方法,取消调用父类无参构造方法。 Eg: package reviewD class A{ S A(){ System.out.println(&父类默认隐式的构造方法!&); } A(String name){ System.out.println(&父类显式的构造方法!&); } } class B extends A{ B(){ super(null); System.out.println(&子类默认隐式的构造方法!&); } } public class Demo10 { public static void main(String[] args) { new B(); } } 结果:父类显式的构造方法!子类默认隐式的构造方法! 13、面向对象之多态多态:指同一个实体同时具有多种形式 好比,你去面馆吃面,说我要吃面,那么;老板给我牛肉面,鸡蛋面等都可以, 这就是说&面&有多种形态,也就是说实体有多种形态; 编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给变量的对象决定。 如果编译时类型和运行时类型不同,就出现多态。 Eg: 前提:Student extendsPerson:Person p = new Person(); Student s = new Student(); Person p = new Student();//多态 引用关系:父类变量指向子类实例对象 实现多态的机制: 父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引 用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引 用变量的类型中定义的方法。 多态的作用: 把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码, 做出通用的编程,以适应需求的不断变化。 只修改方法的实现,不必修改方法的声明 继承是多态产生的前提条件; 分类: 编译时多态:方法重载 运行时多态:方法覆写 Eg: class Dog{ void eat(){ System.out.println(&一般的狗吃一般的狗粮!&); } } class HashDog extends Dog{ void eat(){ System.out.println(&哈士奇吃哈士奇的狗粮!&); } } class ZangAoDog extends Dog{ void eat(){ System.out.println(&藏獒吃藏獒的狗粮!&); } } //定义一个动物园喂的方法 class Zoo{ void feed(Dog d){ d.eat(); } } public class Demo11 { public static void main(String[] args) { Dog hd = new HashDog(); Dog zd = new ZangAoDog(); Zoo z = new Zoo(); z.feed(hd); z.feed(zd); } } 输出: 哈士奇吃哈士奇的狗粮! 藏獒吃藏獒的狗粮!14、引用变量类型转换向上转型(子类→父类) :(自动完成) 父类名称 父类对象 = 子类实例 ; 向下转型(父类→子类) :(强制完成) 子类名称 子类对象 = (子类名称)父类实例 ; 对象名instanceof 类判断指定的变量名此时引用的真正类型是不是当前给出的类或子类; 我的总结:对象的类型和类必须有继承关系 Eg: class A extends B{} B b = new A(); If(b instanceof A){ ... }四、黑马程序员―面向对象(2)第四篇:1、基本数据类型的包装类引言:Java 提倡的万物皆对象,但是数据类型的划分出现了基本数据类型和引用数据类型, 那么我们怎么能把基本数据类型称为对象呢?除了 Integer 和 Character 定义的名称和对应的基本类型差异大,其他六种都是将首字母大写 就可以了。 Integer,Byte,Float,Double,Short,Long 都是 Number 类的子类。(Number 类后面讲); Character 和 Boolean 都是 Object 直接子类; 8 个类都是 final 修饰的(不可被继承)。 2、基本数据类型和包装类相互转换把基本数据类型 → 包装类: 通过对应包装类的构造方法实现 除了 Character 外,其他包装类都可以传入一个字符串参数构建包装类对象。 包装类 → 基本数据类型 包装类的实例方法 xxxValue(); // xxx 表示包装类对应的基本数据类型 Eg: boolean bool = Boolean b2 = new Boolean(bool); Integer i = new Integer(3); int i2 = i.intValue(); Boolean b1 = new Boolean(&TRue&);//true boolean b2 = b1.booleanValue(); Float f = new Float(&3.14&);//3.14 Integer i2 = new Integer(&123s&);//NumberFormatException 备注: 自动装箱&自动拆箱 jdk1.5 开始出现的特性: 自动装箱:可把一个基本类型变量直接赋给对应的包装类对象或则 Object 对象 自动拆箱:允许把 包装类对象直接赋给对应的基本数据类型 Eg: Integer i = 3;//装箱 int i2 =//拆箱 Object flag = new Boolean(false); if(flag instanceof Boolean){ Boolean b = (Boolean) boolean b2 = } 我的总结:对于基本数据类型和包装类之间的装换,我们可以直接的用,相互转换,因为 java5 之后的自动拆箱、装箱功能!即便不知道这个,其实使用中也不影响!3、基本类型和 String 之间的转换String → 基本类型,除了 Character 外所有的包装类提供 parseXxx(String s)静态方法,用于 把一个特定的字符串转换成基本类型变量; 基本类型 → String,String 类有静态方法 valueOf(),用于将基本类型的变量转换成 String 类型。String str = &17&; int i = Integer.parseInt(str);//String --& 基本类型 String s1 = String.valueOf(i);//基本类型 --& String 我的总结:这个从后续的学习来看,用处不大,记住有这样的方法就行,查 api!4、Object 类所有类的公共父类,一旦一个类没有显示地继承一个类则其直接父类一定是 Object。 一切数据类型都可用 Object 接收 class OOXX extends Object{}等价于 class ooXX {} 常见方法 public boolean equals(Object obj):对象比较 public int hashCode():取得该对象的 Hash 码 public String toString():对象描述 Object 类的 toString()方法: “对象的描述” 建议所有类都覆写此方法 直接打印输出对象时,会调用该对象的 toString()方法。//可以不写出来 打印对象的时候,实际调用的对象实际指向的类的自我描述; 全限定类名+@+十六进制的 hashCode 值,等价于 全限定类名+@+IntegertoHexString(该对象.hashCode) equals 也是判断是否指向同一个对象 没有实际意义,有必要可以重写 public boolean equals(Object obj) {} String 覆写了 Object 的 equals 方法:只比较字符的序列是否相同 ==用于判断两个变量是否相等 基本类型: 引用类型:必须指向同一个对象,才 true 只能比较有父子或平级关系的两个对象 new String(&1&) == new String(&1&); ?5、代码块 代码块指的是使用&{}&括起来的一段代码,根据代码块存在的位置可以分为 4 种: 普通代码块; 构造代码块; 静态代码块; 同步代码块(线程同步的时候讲解)。 代码块里变量的作用域: 只在自己所在区域(前后的{})内有效; 普通代码块: 普通代码块就是直接定义在方法或语句中定义的代码块: public void show(){ 普通代码块 } 构造代码块: 直接写在类中的代码块: 优先于构造方法执行,每次实例化对象之前都会执行构造代码块。 Eg: public class Demo { { System.out.println(&我是构造代码块&); } public Demo(){ System.out.println(&我是构造方法&); } public static void main(String[] args) { Demo d1 = new Demo(); Demo d2 = new Demo(); } } 静态代码块 使用 static 修饰的构造代码块: 优先于主方法执行,优先于构造代码块执行,不管有创建多少对象,静态代码块只执 行一次,可用于给静态变量赋值; Eg: package reviewD /** * 测试各代码块的优先级 * 优先级顺序:静态代码块 > 构造代码块 > 普通代码块 * 备注:无论创建几个对象,静态代码块只执行一次! */ public class Demo13 { Demo13(){ System.out.println(&我是构造方法!&); } { System.out.println(&我是构造代码块! &);//实例化对象的时候才会去调 用! } static{ System.out.println(&我是静态代码块!&); } public static void main(String[] args) { new Demo13(); new Demo13();//再次创建对象,证明无论创建几次对象,静态代码块都只执行 一次 System.out.println(&我是普通代码块!&); } } 输出: 我是静态代码块! 我是构造代码块! 我是构造方法! 我是构造代码块! 我是构造方法! 我是普通代码块! 我的总结:这个例子非常好!6、构造方法的私有化有的时候我们为了避免外界创建某类的实例, 就将某类的构造方法私有化, 即将它的构造方 法用 private 修饰: 外界如何用到? 提供 get 方法!不提供的话外界就没法创建对象! (对反射无效) Eg:package reviewD class Stu{ //将构造方法私有化 private Stu(){ } } public class Demo15 { public static void main(String[] args) { Stu s = new Stu(); } }7、Singleton 模式(单例模式) 饿汉式和懒汉式目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例。 好比一个国家就只有一个皇帝(XXX),此时每个人叫的“皇帝”都是指叫的 XXX 本人; 常见单例模式类型: 饿汉式单例:直接将对象定义出来 懒汉式单例:只给出变量,并不将其初始化; 我的总结: 饿汉式,static 修饰,随着}

我要回帖

更多关于 mfc这个程序阻止重启 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信