目录
4.静态变量(static修饰的成员变量)和非静态变量的区别
1.Java语言属于面向对象编程语言
面向对象解决问题的思路:
从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人
类的自然思维方式,强调直接以问题域中的事物为中心来思考问题,认识问题,并
根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构
成单位
2.面向对象编程包括
面向对象的分析(OOA,Object Oriented Analysis)
面向对象的设计(OOD,Object Oriented Design)
面向对象的编程实现(OOP,Object Oriented Programming)
面向对象思想说明
OOA:通常是把构成问题域的事务分解成各个对象,给对象赋予相应的属性
和行为,通过多个对象的相互协调
OOD:这些对象没有先后顺序,共同作用才构成了整个系统。我们只要用代
码设计出这几个类型的对象,然后让他们互相通信、传递消息就可以完成
系统功能
OOP:编写代码
分析系统中涉及的事务,根据“对象”抽象出“类”;
找出对象共有的特点,并且在类中定义为属性;
找出对象共有的行为,并且定义为类的方法。
3.面向对象概念
抽象(abstract):
从事物中舍弃个别的非本质特征,抽取共同的本质特征
只考虑与问题域相关的信息,而忽略与问题域不相关的部分
对象(object):是系统中用来描述客观事物的一个实体。
可以是有形的,也可以是无形的(如一个客户,一张银行卡,窗体中的一个按钮等等)
对象是构成世界的一个独立单位
具有自己的静态结构(属性)和动态行为(方法)
一、面向对象思想
1、面向对象与面向过程区别和联系。
A:区别:
**面向过程关注执行过程,这个时候我们是执行者。
**面向对象关注的是最终功能,这个时候我们是指挥者。
B:联系:.
**面向对象是基于面向过程的。
2、面向对象
A:面向对象思想的特点。
**是符合人们思考习惯的一种思想。
***编程思想就是来源于生活。
**将复杂的问题简单化了。
**把我们从执行者变成了指挥者。
3、面向对象思考问题的方式
找对象,完成功能。
如果对象不存在,自己就造一个对象。
4、面向对象的三大特性
A:封装
B:继承
C:多态
此外面向对象还有个一个特性------->抽象!
二、类与对象
1、类
是对现实世界事务的抽象。
A:类就是一类事物的抽象。
B:什么是类
把相似的对象划归成一个类。
在软件设计中,类,就是一个模板,它定义了通用于一个特定种
类的所有对象的属性(变量)和行为(方法)
2、对象
是该类事物具体的存在个体。
3、如何描述一个类
A:现实生活中我们用属性和行为来描述一个事物。
B:这个时候我们就可以用属性和行为来描述一个类
那么,他们在类中分别对应什么呢?
**属性 -- 成员变量 (属性)--------------->整个类中有效
**行为 -- 成员方法 (函数,功能)------>整个类中有效
4、自定义类的分析过程
A:分析:
**首先分析这个类是个什么样的事物
**其次你就应该该事物具有哪些属性和行为
**把这个事物的属性和行为对应成我们类的成员变量和成员方法。
B:自定义一个电脑类
**属性 颜色,品牌,重量
**行为 开机,关机,上网
对应成类
//自定义电脑类
class Computer
{
String color;//颜色
String type;//品牌
double weight;//重量
public void start(){}//开机
public void stop(){}//关机
public void online(){}//上网
}
5、对象的创建和使用及对象的内存图
A:对象的创建
Student s = new Student();//创建一个Student的对象,并把它赋给了Student类型的s。
B:使用对象
如果你想使用类中的方法和属性,你必须通过类的实例(对象)来调用。
调用方式:
对象名.属性;
对象名.方法名(参数列表);
三、成员变量和局部变量的区别
1、作用范围
成员变量作用于整个类。
局部变量只作用于它所属的范围(函数,语句);
2、生命周期&位置
成员变量存储在堆内存中,是属于对象的,随着对象的存在而存在,随着对象的消失而消失。
局部变量存储在栈内存中,是属性它所属范围的,使用完立即被释放。
3、初始值
成员变量都有默认初始化值。
**整型 0
**浮点型 0.0
**字符型 '\u0000' 空字符
**布尔型 false
**字符串 null
局部变量没有默认值,要想使用,必须遵循:
先定义(声明),再赋值,最后使用。
四、匿名对象(为了简化书写)
1、概念
没有名字的对象。是对象的一种简写形式。
2、什么时候用?
A:该对象只执行一次方法的调用。多次调用必须起名字!
**new Car().start();
B:可以作为实际参数传递
**public static void method(Car c){}
**method(new Car());
五、封装
1、概念
把实现细节隐藏,提供公共的访问方法。
任何对象或者系统都应该有一个明确的边界,边界内部的改变对外部没有影响,在java中,类包含了数据和方法,将数据放到一个类中就构成了封装。他将变化的进行了隔离,这样大大的提高了程序的安全性,由于他提供了公共访问方式,我们只需要调用它的功能即可,这样就提高了代码的复用性(只关注功能不用在意具体实现),自然而然就方便使用了。我们只需要将类中的成员变量私有(在变量名前加private即可),并提供相对应的set和get方法。 机箱和主板的例子。
私有只是封装的一种体现,隐藏才算是封装。
2、好处
A:将变化隔离。
B:便于使用。
C:提高重用性。
D:提高安全性。
3、private关键字
A:private
**私有的
B:特点
**是一个权限修饰符。
**可以修饰成员,被修饰的成员只能在本类中访问。
C:一般用法
**一般用于将成员变量私有,提供公共的get,set方法进行访问。
自定义类 一般格式:
class Student{
private String name;
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
}
注意:set方法可用于对成员变量进行赋值。
六、构造方法
1、用途
创建对象,并进行初始化动作。
2、特点
A:构造方法名和类名相同
B:没有返回类型
C:没有返回值
运行特点:对象创建时被调用。
3、构造方法与成员方法的区别
A:格式区别
构造方法要求:方法名与类名相同,没有返回类型。
成员方法要求:记住函数的定义格式。
B:用途
构造方法用于创建对象,并初始化值。
成员方法用于完成一个功能。
C:什么时候被调用
构造方法一new就被调用。
成员方法时通过对象名来调用。
你想创建对象必须使用构造方法。
你想使用功能必须通过对象名来调用。
你想使用一个功能:首先创建对象,然后使用对象的功能。
4、构造重载
A:构造方法名相同,参数不同。
B:构造方法的注意事项
**自定义类中如果没有构造方法,系统会默认给出一个无参构造方法。
**如果你给定了构造方法,系统将不再提供无参构造方法了。
***如果给定的有无参构造方法,你可以继续使用无参构造方法来创建对象。
***如果没有无参构造方法,你可以不使用。否则,就会报错。
**建议:每次我们都手动给出无参构造方法。
注意:带参构造方法也可以对成员变量进行赋值。
七、this关键字
1、概念
代表本类对象的一个引用
A:方法被哪个对象调用,该方法内的this就代表哪个对象。
2、使用场景
A:局部变量隐藏成员变量
class Student{
private String name;
/*
public void setName(String n){
name = n;
}
*/
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
调用:
Student s = new Student();
s.setName("张三");
String str = s.getName();
System.out.println(str);
System.out.println(s.getName());
B:构造方法中使用this
class Student{
private String name;
private int age;
Student(){}
Student(String name){
this.name = name;
}
Student(int age){
this.age = age;
}
Student(String name,int age){
//this(name);//代表就是调用构造方法----构造方法中的调用方式
this.name = name;
this.age = age;
}
}
C:比较年龄
public boolean compare(Person p){
return this.age==p.age;
//return this.getAge()==p.getAge();//是可以的。
}
4、自定义类
在自定义类的时候:
1:给属性赋值有几种方式
定义的时候给属性。
A:set赋值 开发都用set。
B:构造方法
2:提供一个无参构造
//自定义一个学生类
class Student{
private int age;//姓名
private String name;//年龄
Student(){}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age; //return this.age;
}
public void setName(String name){
this.name = name;
}
public void getName(){
return name;
}
}
一、代码块
1.定义
它是由一对{}括起来的代码。
2、分类及详述
A:局部代码块:用在局部,可以及时释放内存,提到效率。
B:构造代码块:每个构造方法运行时都会自动调用构造代码块。可以对所有对象初始化。
C:静态代码块:随着类的加载而执行,而且只执行一次,优先与主方法。
假如我们有一个Person对象。请问Person p = new Person();在内存中到底做了什么呢?
步骤
A:把Preson.class文件加载进内存。
B:在栈内存空间开辟一个小空间,存储p变量。
C:在堆内存中开辟空间。创建对象。
D:对对象中的成员变量进行默认初始化。
E:执行构造代码块,如果没有构造代码块,就不执行。
F:对对象中的成员变量进行赋值。
G:把对象构造初始化完毕。
H:将对象在堆内存的首地址赋给栈内存变量p。
二、static
1.概念
静态的意思,用于修饰成员。
2.特点
随着类的加载而加载
优先于对象存在
被所有对象所共享
可以直接被类名调用
3.注意事项
A:静态成员只能访问静态成员。
B:静态方法中不能有this,super关键字。
C:主函数是静态的 单讲。
4.静态变量(static修饰的成员变量)和非静态变量的区别
A:静态变量随着类的加载而加载,随着类的消失而消失。生命周期最长。
非静态变量随着对象的创建而存在,随着对象的消失而消失。
B:静态变量和类相关,是所属于类的,可以直接被类名调用,也可以被对象名调用。也称为类变量。
非静态变量和对象相关,是所属于对象的,只能被对象名调用。称为实例(对象)变量。
C:静态变量存储于方法区中的静态区。
非静态变量存储于对象的区域,在堆内存中。
D:静态变量的数据被所有的对象共享。
非静态变量是每个对象特有的数据。
5.内存图
6.什么时候用
分析问题时:
当这个内容是所有对象所共享的时候,我们就把它定义为static修饰的。
当这个内容是每个对象所特有的时候,就把它定义为非static修饰的。
写代码的时候,你可以考虑:
某个成员方法访问了对象所共享的内容。或者说,访问了静态成员。那么,该方法 就必须定义为static修饰的。访问了特有的属性,就不能被静态修饰。
简单说:如果函数中访问了成员变量,不能静态,否则可以静态化,直接被类名调用即可。