标签:poi ati pack 目的 形参 如何 高内聚 向下转型 情况下
两者都是软件开发思想,先有面向过程,后有面向对象。在大型项目中,针对面向过程的不足推出了面向对象开发思想。
比喻
面向过程是蛋炒饭,面向对象是盖浇饭。盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。
区别
编程思路不同: 面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能。
封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能。
面向对象具有继承性和多态性,而面向过程没有继承性和多态性,所以面向对象优势是明显。
类是抽象的
对象是具体的,是类抽象概念的实物表达
栈的特点:先进后出
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。
堆内存的特点:
堆内存有内存地址,都是将内存的地址赋值给引用变量
堆内存变量无用后由垃圾回收机制不定时回收
堆内存会自动初始化
堆内存存放引用数据类,及new出来的都在堆内存里面
//测试类和对象
public class TestObject{
public static void main(String[] args){
Car c1 = new Car();
c1.changeColor("红色");
c1.showColor();
System.out.println(Car.tyreNum);
System.out.println(c1.tyreNum);
Car c2 = new Car();
Engine e = new Engine();
e.speed = 1000;
e.weight = 10;
c2.engine = e;
c2.color="黑色";
c2.tyreNum = 10;
System.out.println(c1.tyreNum);
}
}
class Car {
static int tyreNum=4;
Engine engine;
String color; //char sequence :字符序列
void changeColor(String c){
color = c;
}
void showColor(){
System.out.println("我的颜色是:"+color);
}
}
class Engine{
int speed;
int weight;
}
局部变量:在方法或代码块中声明的变量称为局部变量
成员变量:在类中声明的变量称为成员变量
静态变量:使用static修饰的成员变量称为静态变量
局部变量在使用之前,必须要手动初始化
整型初始化为0
浮点型初始化为 0.0
引用数据类型初始化为null
boolean类型初始化为false
char类型的初始化为\u0000
成员变量从属于对象
静态变量又叫类变量从属于类
局部变量从属于方法或代码块
对
必须与类名一致
构造方法没有返顺值,也不可以写void
构造方法在创建对象时被调用,使用关键字new
构造方法中不能使用return语句
如果手动编写了构造方法之后,系统就不会添加无参构造方法了
class Computer {
int price;
int type;
String brand;
public void start(){
System.out.println("启动中....");
}
computer(int _price, int type, String _brand){
//this.price = price;
price = _price;
type = type;
brand = _brand;
}
}
当局部变量名称与成员变量名称相同时,使用this代表成员变量,代码应改为
computer(int price, int type, String brand){
this.price=price;
this.type=type;
this.brand=brand;
}
public class Point{
private int x;
private int y;
public void setX(int x){
this.x=x;
}
public int getX(){
return x;
}
public void setY(int y){
this.y=y;
}
public int getY(){
return y;
}
public Point(){
}
public Point(int x,int y){
this.x=x;
this.y=y;
}
}
public class Cricle{
private int r;
private Point point;
public void setR(int r){
this.r=r;
}
public int getR(){
return r;
}
public void setPoint(Point point){
this.point=point;
}
pubic Point getPoint(){
return point;
}
public Cricle(){
}
public Cricle(int r,Point point){
this.r=r;
this.point=point;
}
public double area(){
return Math.PI*Math.pow(r,2);
}
}
//在Cricle类中加入方法
public class Cricle{
…..
public boolean isFlag(Point p){
if(Math.pow(x-p.getX())+Math.pow(y-getY())<=Math.pow(r,2)){
return true;
}
}
return false;
}
public class Test{
public static void main(String [] args){
Point p=new Point(3,3);//圆心
Cricle c=new Cricle(5,p);
System.out.println(c.isFlag(new Point(5,5))?”在圆内”:”不在圆内”);
}
}
构造方法可以重载
this在普通方法中总是指向调用该方法的对象
this在构造方法中总是指向正要初始化的对象
static变量存在数据区
static变量和方法归类所有,使用类名去调用
可以被该类的所有对象所共享
静态初始化块先执行
this()调用本类的无参构造方法
this(实参列表)调用本类的带参构造方法
super()调用直接父类的无参构造方法
super(实参列表)调用直接父类的带参构造方法
this()调用必须位于构造方法的第一句
解决类之间的重名问题
为了便于管理类:合适的类位于合适的包
javac -d . Test.java
import是用于导入其它包中的类
不会降低程序的运行速度
因为是导入该包下的所有的类,会降低编译速度
导入类的静态属性和静态方法
只能用包名+类名来显示调用相关类
java.util.Date date=new java.util.Date();
package cn.sxt.pro
import java.util.Scanner;
public class Test{
public static int age;
private String name;
public void setName(String name){
this.name=name;
}
public static void show(){
}
public static void main(String [] args){
System.out.println(Test.age);
System.out.println(Test.show());
}
}
/**开头
*/结束
javadoc 源文件名.java;
内聚:程序内的各个模块之间的关系紧密程度
耦合:外部程序(子程序)之间的关系紧密程度
代表的是访问权限
private:私有的,只能本类访问
default:默认的,本类,子类,本包中的其它类都可以访问
protected:受保护的,本类,本包及其它包中的子类可以访问
public:公共的,本类,子类,本包及其它中的类都可以访问
是, 属性就不能被赋值上任何非法的值了
编写公有的取值的get方法
菜单栏SourceGenerate getters and setters
isXXX;
不对
Javabean既可以封装数据同时也可以封装业务逻辑
好处一:继承的本质在于抽象。类是对对象的抽象,继承是对某一批类的抽象
好处二:为了提高代码的复用性
java中只有单继承
C++中有多继承
使用单继承有利于系统的维护,使得类与类之间的关系简单
class Person{
}
class Teacher extends Person{
}
extends
如果没有使用extends,那么继承了Object类
java中没有多继承
使用单继承有利于系统的维护,使得类与类之间的关系简单
指的是子类对父类中方法的重写
不能
Object是所有类的根类
不是所有类的直接父类
jdk安装目录中的src压缩包中可以查看源码
能
super指的是直接父类
也可以是this()
继承条件下构造方法的调用规则如下:
如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,写不写“super();”语句,效果是一样的。
如果子类的构造方法中通过super显式调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法。
如果子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。
特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。
可以
子类的返回值可以与父类相同,也可以是父类方法返回值的子类
判断两个对象的内容是否相同,需要重写Object类的equals方法
我第一次去见丈母娘。还没见的时候,我女朋友已经把我的情况介绍给丈母娘了,说我“长得像港台明星”。见面以后丈母娘一看,哇,原来是像曾志伟。当场晕倒。
继承
方法重写
父类引用指向子类对象
向上转型:父类引用指向子类对象
向下转型:将父类引用转成真实的子类对象
使用父类做方法的形参,实参可以是该父类的任意子类类型
使用父类做方法的返回值类型,返回值可以改父类的任意子类对象
静态方法,构造器,private方法,用关键字super调用的方法是静态绑定
通过对象调用的方法,采用动态绑定
final修饰的变量不可改变,一旦赋了初值,就不能被重新赋值,称为常量
final 修饰的方法不能被子类重写
final修饰的类不能有子类
final修饰的方法可以重载
final修饰的方法不能重写
String类不能被继承
因为String类是使用final修饰的类
包含抽象方法的类是抽象类
抽象类中不一定含有抽象方法
抽象类中可以有普通方法
抽象类中可以定义构造方法
抽象类不能被new出来
抽象类的构造方法被子类调用
JDK1.7之前,接口中只能定义静态常量和公共的抽象方法
JDK1.8中,接口中可以定义静态方法
接口描述了现实世界是“如果你是…则必须能..”的思想
如果你是天使,则必须能飞;如果你是汽车,则必须能跑
是的
接口中不能定义普通变量,也不能定义普通方法
因为接口就是一种规范,定义一种规则
接口不能被new
接口中有多继承
一个类能够实现多个接口
public interface TakePhoto {
}
abstract class Phone{
}
class MoblePhone extends Phone implements TakePhoto{
}
class Test{
public static void main(String[] args) {
MobilePhone mp=new MobilePhone();
}
}
public interface Electronic {
}
class MobilePhone implements Electronic{
}
class Mp3 implements Electronic{
}
class Watch implements Electronic{
}
对象实现Comparable接口
或者定义比较规则的类实现Comparator接口
实现Comparable接口
public class Student implements Comparable<Student>{
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Student o) {
return this.age-o.getAge();
}
}
实现Comparator接口
class AgeComparator implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
return o1.getAge()-o2.getAge();
}
}
GC:是指垃圾回收
英文:garbage collection
程序员无权调用垃圾回收器
运行垃圾回收器
在垃圾收集器将对象从内存中清除出去前,做必要的清理工作
很久很久以前,每家每户“自扫门前雪”,自己收垃圾。
现在,环保局的垃圾车自动收垃圾。
通过,这些例子类比Java和C++不同的回收机制及特点。
C++需要程序员手动编写垃圾回收的代码,如果程序员忘了那么就容易造成内存 溢出等问题
java无需手动编写,jvm的垃圾回收机制会自动进行垃圾回收,减轻了程序员的 工作,也避免由于程序员忘记而造成的各种内存溢出等问题
标签:poi ati pack 目的 形参 如何 高内聚 向下转型 情况下
原文地址:https://www.cnblogs.com/ren549047861/p/11293917.html