面向对象
OO:面向对象
OOP:面向对象编程
OOA:面向对象分析
OOD:面向对象设计
面向对象的特征
继承,封装,多态
什么是对象?
对象是存在的具体实体,具有明确定义的特征和行为。
万物皆对象,对象因我关注而产生。
什么是面向对象?
面向对象是一种认识事物的方式,注重对事物整体的认知,最符合人类自然的思维习惯。
什么是类?
类是具有相同属性和行为的一组对象的集合。
在软件系统中,我们用类来模拟现实生活中的实体。
类和对象的关系?
类是对象的抽象,对象是类的实例。
对象是怎么产生的?
对象的产生是数据封装的结果。
Java的数据类型分为两种:基本数据类型和引用数据类型
其中基本数据类型,在变量中存放的是具体的数据。
引用数据类型,在变量中存放的是对象的地址。分为三种。
引用数据类型是变量中存放的一个地址
类、数组、接口
垃圾回收
回收的是没有被任何变量所指向的对象。
null
表示一个变量没有存放任何对象的地址。对null值做方法或属性的调用。
会抛出 java.lang.NullPointerException(空指针异常)
static
静态变量是每个对象共享的变量,当其中一个对象改变它的值以后,会影响所有的对象。
对静态变量的访问,可以通过对象.(点)的方式访问,也可以通过类名.(点)的方式访问。
所以静态变量也称为类变量。
成员变量(属性)和静态变量的区别:
1, 成员变量是包含在对象之中的,是对象的特征。而静态变量独立在对象之外。每个对象都有成员变量,而且一个对象成员变量的变化,不会影响别的对象。但静态变量是所有对象共享的变量,它的变化会引起所有对象的变化。
2, 成员变量随着对象产生而产生。随对象销毁而销毁。而静态变量加载的时机在对象之前。常驻内存,除非虚拟机关闭,否则不会销毁。
3, 对成员变量的访问,通过对象.(点)的方式。对静态变量的访问,可以通过对象.(点)或类名.(点)的方式访问。
变量按作用域分类
按照声明的位置和作用域划分
局部变量:方法和语句块内部定义的变量(栈空间,当方法或语句块一结束,局部变量空间马上释放)
成员变量(属性):方法外部,类的内部定义的变量(堆空间,随对象产生而产生,随对象销毁而销毁)
类变量(静态变量):加上了关键字“static”(数据段,常驻内存,创建好之后,不会消失。)
使用包来组织
如果当前类所用到的类,不再同一个包中,那么需要使用import导入该类。
有两种类无需导入可以直接使用:1,java.lang.* 2,本包中的类
public 作用
如果一个类申明时,加上public,类名和文件名必须一致。该类可以跨包使用。
如果一个类申明时,采用默认修饰符(不加public),类名和文件名可以不一致,但不能跨包使用。
使用包的好处
1, 可以组织相关类。
2, 可以做到信息隐藏。
成员方法
如果在声明一个方法的时候没有使用static来修饰该方法,则这个方法是属于这个类的实例方法,要使用成员方法时必须通过创建该类的实例来使用这个方法。
实例的方法不仅可以访问类变量和常量,还可以访问实例中的变量。
静态方法
如果一个类中声明的方法被static来修饰符修饰,那么这个方法就是一个属于类的方法,使用静态时可以直接通过类名来使用,而不需要该类的实例。
类方法可以访问所在类中的类变量。
Static总结
凡是修饰了static的东西,加载时机都在对象之前。正因为如此,静态方法不能直接访问成员变量或成员方法的。
示例商品
class Product{
public int id;
public String name;
public int price;
}
public class Demo1 {
public static void main(String [] args){
Product [] Array = new Product[3];
for(int i = 0;i<Array.length;i++){
String idstr =JOptionPane.showInputDialog(null,"请输入第"+(i+1)+"个商品ID");
String namestr =JOptionPane.showInputDialog(null,"请输入第"+(i+1)+"个商品名");
String pricestr =JOptionPane.showInputDialog(null,"请输入第"+(i+1)+"个商品价格");
Array[i] =new Product(); //把对象放进数组里面
Array[i].id =Integer.parseInt(idstr);
Array[i].name =namestr;
Array[i].price =Integer.parseInt(pricestr);
}
/*
* 这里如果要按照价格来降序,引用数组就可以做到整换
*/
for(int i = 0;i<Array.length ;i++){
for(int j = i+1;j<Array.length ;j++){
if(Array[i].price <Array[j].price ){
Product s =Array[j];
Array[j] = Array[i]; //这里就可以做到编号,名字,价格整个进行互换
Array[i] = s;
}
}
}
/*
*
* 遍历数组里面每个编号,名字,价格的内容
*/
String a ="编号 商品名 价格\n";
for(int j =0;j<Array.length ;j++){
a += Array[j].id+" "+Array[j].name+" "+Array[j].price +" \n";
}
JOptionPane.showMessageDialog(null, a);
}
}
浙公网安备 33010602011771号