1、面向对象基本概念
一、什么是面向对象:
1、面向对象是一种编程思想。
2、面向对象是一种思考问题的思维方式。
二、建立面向对象思维方式:
1、先整体,再局部
2、先抽象,再具体
3、能做什么,再怎么做
三、如何学习面向对象:
1 、掌握一门面向对象语言的语法
2、熟悉面向对象的设计原则
3、熟悉面向对象设计模式
------------------------------------------------------------------------------------------
------------------------------------------
2、类与对象
什么是类?
1、类是:分类、类别。
2、通过分类,我们可以区别不同的事物种类,在日常生活当中,我们常常这样做。
3、所以,类是一组具有相同特性(属性)与行为(方法)的事物集合。
类与对象的关系
1、类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。
2、类由属性和方法组成:
∙属性:就相当于一个个的特征
∙方法:就相当于人的一个个的行为,例如:说话、吃饭、唱歌、睡觉
------------------------------------------------------------------------------------------
------------------------------------------
3、类和对象的定义格式
在Java中可以使用以下的语句定义一个类:
class类名称{
属性名称;
返回值类型方法名称(){}
}
对象的定义:
一个类要想真正的进行操作,则必须依靠对象,对象的定义格式如下:
类名称对象名称 = new类名称() ;
按照以上的格式就可以产生对象了。
如果要想访问类中的属性或方法(方法的定义),
则可以依靠以下的语法形式:
访问类中的属性:
对象.属性 ;
调用类中的方法:
对象.方法() ;
在java中对象声明有两种含义
声明对象:Person per = null ;
//表示声明了一个对象,但是此对象无法使用,per没有具体的内存指向
实例化对象:per = new Person() ;
//表示实例化了对象,可以使用
//通过对象调用方法:
per.eat()
//匿名对象调用方法:
new Person().eat()
------------------------------------------------------------------------------------------
------------------------------------------
4、对象内存分析
1、new关键字表示创建一个对象
2、new关键字表示实例化对象
3、new关键字表示申请内存空间
注意:如果使用一个没有申请内存空间的对象,会报空指针异常:
java.lang.NullPointerException
------------------------------------------------------------------------------------------
------------------------------------------
5、封装性
一、封装性的概念
1、封装性是面向对象思想的三大特征之一。
2、封装就是隐藏实现细节,仅对外提供访问接口。
封装有:
属性的封装、方法的封装、类的封装、组件的封装、模块化封装、系统级封装…
二、封装的好处
1、模块化
2、信息隐藏
3、代码重用
4、插件化易于调试
5、具有安全性
------------------------------------------------------------------------------------------
------------------------------------------
6、构造方法
什么是构造方法
1、构造方法就是类构造对象时调用的方法,用于对象的初始化工作
2、构造方法是实例化一个类的对象时,也就是new的时候,最先调用的方法。
构造方法的定义:
构造方法是在类中定义的,构造方法的定义格式:方法名称与类名称相同,无返回值类型的声明。
对象的实例化语法:
Horse horse = new Horse(); //new Horse后面有个括号,带括号表示调用了方法,此时调用的方法就是构造方法了
构造方法重载:
无参构造方法:
Public Horse(){}
带一个参数的构造方法:
Public Horse(String name){
this.name = name;
}
带多个参数的构造方法:
Public Horse (String name,int age){
this.name = name;
this.age = age;
}
------------------------------------------------------------------------------------------
------------------------------------------
7、方法的重载
方法重载:overloading method
在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义;
如:
public void method(int a){…}
public void method(char c){…}
------------------------------------------------------------------------------------------
------------------------------------------
8、String类
1、String可以表示出一个字符串。
2、String类实际是使用字符数组存储的。
String类的两种赋值方式:
(1)一种称为直接赋值:
String name = “小白”
(2)通过关键字new调用String的构造方法赋值
String name = new String(“小白”)
String类的两种赋值分析:
1、字符串常量池
2、String name = new String(“小白”),在内存中的分析
3、String name = “小白”,在内存中的分析
String类编译期与运行期分析:
1、编译期和运行期
2、代码示例:4种情况分析
8、String类
String类字符与字符串操作方法:
public char charAt(int index)
public char[] toCharArray()
public String(char[] value)
public String(char[] value,int offset,int count)
public String(byte[] bytes, String charsetName)
public boolean startsWith(String prefix,int toffset)
public boolean startsWith(String prefix)
public boolean endsWith(String suffix)
public String replaceAll(String regex,String replacement)
public String replaceFirst(String regex,String replacement)
public String substring(int beginIndex)
public String substring(int beginIndex,int endIndex)
public String[] split(String regex,int limit)
public String[] split(String regex)
public boolean contains(String s)
public int indexOf(int ch)
public int indexOf(int ch,intfromIndex)
public int indexOf(String str)
public int indexOf(String str,intfromIndex)
public int lastIndexOf(int ch)
public int lastIndexOf(int ch,intfromIndex)
public int lastIndexOf(String str)
public int lastIndexOf(String str,intfromIndex)
public boolean isEmpty()
public int length()
public String toLowerCase()
public String toUpperCase()
public String trim()
public String concat(String str)
------------------------------------------------------------------------------------------
------------------------------------------
9、值传递与引用传递
示例一:值传递
public class ValueDemo{
public static void main(String[] args){
int x = 10;
method(x) ;
System.out.println(“x=”+x) ;
}
public static void method(int mx){
mx = 20;
}
}
示例二:引用传递
public class RefDemo1{
public static void main(String[] args){
Weapon w = new Weapon();
method(w) ;
System.out.println(“weapon age = ”+w.age) ;
}
public static void method(Weapon mw){
mw.age = 5;
}
}
class Weapon{
int age = 2; //省略封装
}
示例三:String传递
public class RefDemo2{
public static void main(String[] args){
String name = “小飞”;
method(name) ;
System.out.println(“name=”+name) ;
}
public static void method(String sname){
sname = “小备”;
}
}
示例四:String传递
public class RefDemo3{
public static void main(String[] args){
Person p = new Person();
method(p) ;
System.out.println(“person name= ”+p.name) ;
}
public static void method(Person p ){
p.name = “备备”;
}
}
class Person{
String name = “飞飞”; //省略封装
}
10、对象的一对一关系
两个对象之间的一对一关系:
比如:
一个英雄(Hero)对一个兵器(Weapon)
代码如何表示?
11、this关键字
在Java基础中,this关键字是一个最重要的概念。使用this关键字可以完成以下的操作:
∙调用类中的属性
∙调用类中的方法或构造方法
∙表示当前对象
12、static关键字
static关键字的作用:
1、使用static关键字修饰一个属性
声明为static的变量实质上就是全局变量
2、使用static关键字修饰一个方法
通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法
3、使用static关键字修饰一个类
12、static关键字
class文件加载到内存的结构图:
类文件
.class
类加载器Class Loader
运行时数据区
方法区Method Area
堆Heap
栈Java Stacks
本地方法栈(Native Method Stacks)
程序计数器(Program Counter Register)
执行引擎
Execution Engine
本地方法接口
Native Interface
本地方法库
Native Libraries
12、static关键字
声明为static的方法有以下几条限制:
它们仅能调用其他的static方法。
它们只能访问static数据。
它们不能以任何方式引用this或super。
13、main方法
主方法:
public static void main(String[] args){
//代码块
}
public:公有的
static:静态的
void::表示没有返回值
main:方法名
String[] args:表示参数为字符串数组
14、对象数组
1、对象数组就是数组里的每个元素都是类的对象,赋值时先定义对象,然后将对象直接赋
给数组。
示例:
Hero[] heros = new Hero[10];
使用对象数组实现多个Hero的管理。
15、foreach与可变参数
1、foreach循环
JDK 1.5,也称为JAVA SE 5.0,这个版本中增加的新功能很多,在后面的课程会陆续为大家讲解。今天要讲的foreach
是其中一个。增强for循环foreach语法:
for (类型变量名称:数组或集合){
//输出操作
}
2、可变参数
一个方法中定义好了参数,在调用时必须传入与其一一对应的参数,但是在JDK 1.5之后提供了新的功能,可以根
据需要自动传入任意个数的参数,这就是可变参数。
可变参数语法:
返回值类型方法名称(数据类型…参数名称){
}
16、代码块
1、普通代码块
直接写在方法中的代码块就是普通代码块
示例:
public class Demo1{
public static void main(String []args){
{//普通代码块
String info = “局部变量‐1” ;
System.out.println(info) ;
}
String info = “局部变量‐2” ;
System.out.println(info) ;
}
}
16、代码块
2、构造块是在类中定义的代码块
示例:
class Demo{
{ //构造块
System.out.println("构造块") ;
}
public Demo(){
System.out.println("构造方法。") ;
}
}
16、代码块
3、在类中使用static声明的代码块称为静态代码块
示例:
class Demo{
{
System.out.println("构造块") ;
}
static{
System.out.println("静态代码块") ;
}
public Demo(){
System.out.println("构造方法。") ;
}
};
17、单例设计模式
单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
1、构造方法私有化
2、声明一个本类对象
3、给外部提供一个静态方法获取对象实例
两种实现方式:
1、饿汉式
2、懒汉式
总结
1、面向对象基本概念
2、类与对象
12、static关键字
13、main方法
3、类和对象的定义格式
4、对象与内存分析
5、封装性
14、对象数组
15、foreach与可变参数
16、代码块
6、构造方法
17、单例设计模式
7、方法的重载
8、String类
9、值传递与引用传递
10、对象的一对一关系
11、this关键字
笔记来源:扣丁学堂 原PDF作者:威哥
如果本篇文章侵犯作者版本,请联系博客主进行删除。