算法的三六九等使用算法复杂度来描述,其地址存储在栈上的对象引用中(即类的对象变量

(1) 算法是对特定问题求解步骤的一种描述,他确定了缓解问题的演算种类。
算法的好坏使用算法复杂度来描述,即时间复杂度和空中复杂度。
算法可以使用自然语言、伪代码、流程图等多种不相同的法子来开展描述。
算法有多少个性状:
夏朝性:算法必须能在执行又穷个步骤之后终止
了然:算法落成的每一步必必要有相当的意思
输入项:一个算法必必要有0依旧多个输入来描写对象的伊始状态
输出项:一个算法有一个仍旧多个出口
动向:算法中履行的其余计算步骤都是足以表明为主题的可实施操作步、即每一个总结步骤都可以在个别时间类成就。
算法的三六九等评价标准:
1、时间复杂度:执行算法必要的估计工作量
2、空间复杂度:算法执行所急需用度的内存空间
3、正确性:正确性是评论算法优劣最后总要的正儿八经
4、可读性:可供人们阅读的简单程度
5、健壮性:健壮性是指一个算法对不和你多少输入的感应能力和拍卖能力

  经过16年校招,自己在Java基础方面也算有了一个质的长足,从原来知其然,到明日知其所以然,现将学习心得总括于此。

http://baike.baidu.com/link?url=yC0B4-aU65kkMWSL62dgdxcQkfdSqSvKsZSOfHFgiOXArhaMy_zQarVJFzg7InId

  首先要求知道类和对象是怎么着?

(2)结构化程序设计风格
自顶向下,逐步求精和模块化的设计思想。
利用各样、拔取和巡回二种为主控制结构表示程序的控制逻辑
http://baike.baidu.com/link?url=uaOwTneCg1KE52S0NUk4qhcj8s1O0URGoGEneBBXeZ2SJxfAtAy81T8pKvQTt_ys#4_1

  维基百科定义类为: an extensible program-code-template for
creating objects, providing initial values for state (member variables)
and implementations of behavior (member functions
or methods),即能够为创造对象实例提供可增添的模版,提供数据和行事操作。在促成角度,其以字节码的样式储存在内存中的方法区,用来实例化对象。

(3)面向对象的表征
面向对象的特征:
1.抽象:
空泛是指忽略一个主体中,与当前目的非亲非故的一些地方,以便丰硕的注意与眼前目的相关的地方
抽象不是打算询问大旨的全体内容,只是接纳之中的一片段;
抽象分为进度抽象和数据抽象。
数据抽象:针对对象的属性,如鸟的性能有三个膀子、八只脚,有羽毛等等特色,那都是鸟的特性;
进程抽象:针对对象的表现特征,如鸟会跳、会飞,那个作为就能抽象为格局,写成类就是鸟的法子;
class Bird{
private String color;//数据抽象:鸟的习性
public void fly(){ // 进度抽象:鸟的表现(方法)
}

  维基百科定义对象为:a location in memory having a value and possibly
referenced by
an identifier,即在内存上一段包罗数据并由某标识符引用的区域。在贯彻角度,类对象实体存储在堆内存中,其地点存储在栈上的靶子引用中(即类的对象变量,其针对性对象所在的内存空间)。

public static void main(String[] args){
Bird bird = new Brid();
bird.fly();//
}
}

 

2.继承:
接轨是一种描述类的层次模型,他提供了斐然表述类的共性的主意,他同意和鼓励类的拔取;
一个新类可以从现有的类中派生,这一个进程叫类的后续;
新类继承了原类的特点,新的类称为子类(派生类),原类称为父类(基类);
子类能继续父类的措施和特性,并且子类中可以修改或追加方法,以适应更破例的必要;
java不辅助多一连,可是足以兑现五个接口;

  面向对象的特点有哪些方面?(参照Java面试题全集 

3.封装:
打包就是将目的的经过和数码包装起来,对目的的造访只好通过定义的界面举办,即将现实世界
叙述为任何完全自治、封装的对象,那个指标通过受保险的接口来做客其余任何对象。

  • 抽象:抽象是将一类对象的一块儿特征统计出来协会类的进程,包蕴数据抽象行为抽象两方面。抽象只关心对象有怎么着属性和行为,并不关怀这么些表现的底细是如何。 

  • 继承:继承是从已有类获得延续音信创制新类的进程,提供后续音信的类被誉为父类(超类、基类);得到持续音信的类被叫做子类(派生类)。 

  • 封装:日常认为封装是把数量和操作数据的艺术绑定起来,对数据的拜会只好通过已定义的接口。面向对象的本色就是将切实世界描绘成一多重完全自治、封闭的靶子。我们在类中编辑的办法就是对贯彻细节的一种包装;大家编辑一个类就是对数码和多少操作的卷入。可以说,封装就是藏身一切可隐藏的事物,只向外面提供最简易的编程接口。 

  • 多态性多态性是指允许差距子类型的对象对同样信息作出分化的响应。简单来说就是用平等的靶子引用调用同样的点子可是做了不一样的工作。多态性分为编译时的多态性运行时的多态性。借使将对象的点子就是对象向外侧提供的劳动,那么运行时的多态性可以解释为:当A系统访问B系统提供的服务时,B系统有多种提供劳务的措施,但整整对A系统来说都是晶莹的(就好像自动剃须刀是A系统,它的供电系统是B系统,B系统可以行使电池供电或者用互换电,甚至还有可能是太阳能,A系统只会因而B类对象调用供电的法子,但并不知道供电系统的尾部完毕是什么样,究竟通过何种方法获取了引力)。办法重载(overload)达成的是编译时的多态性(也号称前绑定),而艺术重写(override)已毕的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精华的事物,要兑现多态需求做两件事:1). 艺术重写(子类继承父类比量齐观写父类中已有些或抽象的艺术);2). 目标造型(用父类型对象引用子类对象,那样同样的对象调用同样的办法就会按照子类对象的不比而展现出分裂的行事)。

4.多态:
多态是均等的操作成效到不相同类的实例,发生不一致的结果;即不相同类的目的吸收一模一样的数量获得不一样的结果;
多态使基类和派生类可以具有同名、但成效分裂的办法;

  (1)重载与重写

措施的重写(overRide)和重载(overLoad)是多态性在java中的表现,
重写:是父类和子类之间多态性的突显,即子类中的某艺术,和父类的称号和参数相同,大家说该格局被重写(override);
重载:一个类中定义了几个同名的法门,不过富有差其他参数个数、参数类型或分化重返值,我们至今方法被重载(overload);

  重载:

继承、多态、封装、类、对象、消息

    • 办法重载是让类以统一的方法处理不一样门类数据的一种手段,函数同名,但参数个数和档次差距;
    • 调用方法的时候,通过传递分歧的参数决定接纳哪个方法,完毕多态;
    • 重载时,函数同名,参数差异,重回值类型可同等也可以不一样。

(36) 下列工具中属于必要分析常用工具的是______。(D)
A、PAD B、PFD C、N-S D、DFD

  重写:

(42) 希尔(希尔)排序法属于哪一类档次的排序法______。(B)
A、调换类排序法 B、插入类排序法
C、选择类排序法 D、建堆排序法

    • 父类与子类之间的多态,对父类的函数进行重复定义。如果在子类中定义某艺术与其父类有平等的称号和参数,则该方法被重写或掩盖。
    • 若子类中的方法与父类中的某一主意具有相同的不二法门名、重临类型和参数表,则新格局将掩盖原有的情势,可使用super关键字调用父类方法;
    • 子类函数的造访修饰权限不可以简单父类的。

强连通图

  注意1:无法以再次回到值**品类区分重载函数**。

(73)
已知多少表A中各个元素距其最后地方不远,为节省时间,应选择的算法是______。(B)
A、堆排序 B、直接插入排序 C、急速排序 D、直接选取排序

  从封装的角度掌握:一个情势包罗重返值类型、方法名、参数列表和方法体。方法体被艺术封装,方法名和参数是那么些封装体对外提供的接口

79) 分布式数据库系统不抱有的性状是______。(B)
A、分布式 B、数据冗余
C、数据分布性和逻辑全部性 D、地点透明性和复制透明性

  至于再次回到值是与方法体有关,它是方法体执行的结果,它的有无是由方法体决定的。也就是说先有方法体,才有再次回到值,它不是封装体对外提供的接口,当咱们调用方法时就是调用的那一个对外的接口(方法名和参数列表),所以不可以把重回值作为艺术的重载。

(5)
关全面据库管理连串能促成的越发提到运算包涵精选、连接和______。
答:投影

  但也有特例,在编译器可以按照语境判断出语义时,如int
x=f();也得以分别重载函数。直接 f();是力不从心区分重载函数的。

数据库的增删查改、事务的ACID,范式、
多少涉嫌:拔取、投影、连着、连接

  注意2:Java中接口(interface)的留存也呈现了运转时多态。

  总结

  多态可从接口已毕重载重写三地方解释:

    • 接口与贯彻的分手,一个接口可以对应分歧的兑现,达成多态;
    • 重载,一体系中多态性的变现,多种同名、参数不一致的主意已毕多态,属于编译时多态性
    • 重写,继承发生的多态,子类对父类的形式开展双重定义,从而不相同的子类对象对同样新闻做出差异的响应,属于运行时多态性

  (2)对象造型(casting),造型转移或者类型转换

  • 发展转型(upcasting),Java中子类对象足以一贯赋给父类对象,那一个时候父类对象引用的就是子类对象的内存空间。即子类–>父类,父类可以根据子类对象的内存空间,执行差距的行为。父类对象和子类对象引用同一个目的,但编译器将父类对象仍作为父类型

 
             
注意:父类对象引用(引用子类)不可以访问子类对象新增加的分子(属性和艺术);

 
                    可以使用 引用变量 instanceof 类名 来判断该引用型变量所“指向”的对象是还是不是属于此类或该类的子类

  • 向下转型(downcasting),Java少校父类对象赋给子类对象时,要进行形象转移(即强制类型转换)。即父类–>子类,程序可以由此编译,但必要周转时展开检查,此时根据父类是不是引用子类对象的内存空间,会现出不相同的结果。

 
              若是父类变量引用的是不利的子类类型(即父类对象引用的是子类型的内存空间,然后赋给子类对象),则赋值将进行;若是父类变量引用的不是有关的子类型,将爆发ClassCastException分外。例如:A是B的父类,A
a=new B(); B b=(B) a; 执行时不会报至极。 假诺A a=new A(); B b=(B) a;
执行时就会报相当。

 
           
  补充:向下转型严刻按照上面的正规,数组符合条件也可以开展强制转换。

   

转型举例表达:

 1         Object[] o={"qw","we","rt"};  //o为Object类型的对象数组  getClass()返回class [Ljava.lang.Object;
 2         Object[] oo=new String[]{"qw","we","rt"};//oo为Object类型数组,但其引用子类String的数组  getClass()返回class [Ljava.lang.String;
 3         Object ooo="qw"; //ooo为Object变量 ,默认为String类型    getClass()返回class java.lang.String;
 4 
 5         //String[] s=(String[]) o;  //运行时会报异常:java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
 6         String[]ss=(String[]) oo; //运行正常
 7         String sss=(String) ooo; //运行正常,可将Object转换为String
 8 
 9         System.out.println(oo);
10         System.out.println(ss);
11         System.out.println(ooo);
12         System.out.println(sss);
13         System.out.println(ooo.getClass());    

输出结果:

[Ljava.lang.String;@28d93b30
[Ljava.lang.String;@28d93b30
qw
qw
class java.lang.String

 再举一例:

 1 public class TestCasting{
 2     public static void main(String args[]){
 3         Animal a = new Animal("a");
 4         Cat c = new Cat("c","catColor");
 5         Dog d = new Dog("d","dogColor");
 6 
 7         System.out.println(a instanceof Animal);    //true
 8         System.out.println(c instanceof Animal);    //true
 9         System.out.println(d instanceof Animal);    //true
10         System.out.println(a instanceof Dog);        //false
11 
12         a = new Dog("d2","dog2Color");        //父类引用指向子类对象,向上转型
13         System.out.println(a.name);                //可以访问
14         //System.out.println(a.folorColor);   //!error   不可以访问超出Animal自身的任何属性
15         System.out.println(a instanceof Animal);    //是一只动物
16         System.out.println(a instanceof Dog);        //是一只狗,但是不能访问狗里面的属性
17 
18         Dog d2 = (Dog)a;    //强制转换
19         System.out.println(d2.folorColor);    //将a强制转换之后,就可以访问狗里面的属性了
20 
21         Dog[] dogs = new Dog[2];
22         dogs[0] = new Dog("dog1","black");
23         dogs[1] = new Dog("dog2","yellow");
24         Animal[] animals = dogs;
25         Dog[] dogs1 = (Dog[]) animals;
26         System.out.println(dogs);
27         System.out.println(dogs1);
28     }
29 }
30 class Animal{
31     public String name;
32     public Animal(String name){
33         this.name = name;
34     }
35 }
36 class Dog extends Animal{
37     public String folorColor;
38     public Dog(String name,String folorColor){
39         super(name);
40         this.folorColor = folorColor;
41     }
42 }
43 class Cat extends Animal{
44     public String eyesColor;
45     public Cat(String name,String eyesColor){
46         super(name);
47         this.eyesColor = eyesColor;
48     }
49 }

出口结果:

true
true
true
false
d2
true
true
dog2Color
[LDog;@28d93b30
[LDog;@28d93b30

 

  总结

    • 提升转型,即将子类对象赋给父类对象,父类对象指向子类对象内存空间,可以访问父类中定义的性能和办法,不可能调用子类新拉长的性质和措施;
    • 向下转型,即将父类对象赋给子类对象,此时依据父类对象引用的空间绝对运行时是否会爆发万分;
    • 数组也坚守上述规则。

全文总计:

  • 知情类与目的的基本概念;
  • 面向对象的基本特征:抽象、继承、封装和多态;
  • 多态包含编译时多态和运转时多态,另有接口与达成的分别;
  • 重载与重写的分别;
  • 类型转换:向上转型与向下转型

相关文章