类与对象

来源:互联网 发布:手机淘宝开店一件代发 编辑:程序博客网 时间:2024/06/06 16:28

一、ciass Person{

private int a=0;

private String b=null;

public static void main(String args){

Person per=null;

per=new Person();

}

}

Person per=null;开辟了一个Per的栈空间,a和b开辟了堆空间

per=new Peson()实例化per对象,指堆空间。

二、面对对象

封装性、继承性、多态性。多态为方法的重载

三 递归调用

从100+99:98+。。。1

import java.util.Scanner;public class Operation{public static void main(String args[]){System.out.println(addNum(100));}public static  int addNum(int num){if(num==1){return 1;}else{return num+addNum(num-1);}}}
四、为什么会有get,set方法

因为将类内的属性变为私有,进行封装。其他要要访问该属性就得在私有属性下面写get,set方法,其他类调用这些方法来访问该属性。

五、引用传递

import java.util.Scanner;class Ref{String temp="hello";}public class Operation{public static void main(String args[]){Ref r=new Ref();// r.temp="jike";tell(r);System.out.println(r.temp);}public static void tell(Ref r){r.temp="jike";}}

要想改变Ref里面的temp字符串,就必须为TEMP开辟一个堆空间r.temp;

import java.util.Scanner;class Ref{String temp="hello";}public class Operation{public static void main(String args[]){Ref r=new Ref(); tell(r.temp);System.out.println(r.temp);}public static void tell(String temp){temp="jike";}}

像上面这样写temp始终是hello;

六 继承

1.子类对象实例化,必须先调用父类的构造方法,之后调用子类的。

import java.util.Scanner;class Father{public Father(){System.out.println("父类构造方法");}}class Sun extends Father{public Sun(){System.out.println("子类构造方法");}}public class Operation{public static void main(String args[]){Sun fa=new Sun();}}


2.要调用父类的方法必须super();

import java.util.Scanner;class Father{public void tell(){System.out.println("父类方法");}}class Sun extends Father{public void tell(){System.out.println("重写父类方法");}}public class Operation{public static void main(String args[]){Sun fa=new Sun();fa.tell();}}

以上子类无法调用父类方法。

import java.util.Scanner;class Father{public void tell(){System.out.println("父类方法");}}class Sun extends Father{public void tell(){super.tell();System.out.println("重写父类方法");}}public class Operation{public static void main(String args[]){Sun fa=new Sun();fa.tell();}}

以上可以


3.子类重写的父类的方法不能有比父类更加严格的作用域,重写是方法名相同,参数也相同,返回值也相同,只是函数体不相同。重载是参数不同,函数体不同,只发生在;类里。重写发生在继承里面。

void print(){}是default。访问权限private<defaulr<public 

七 关键字

1.final关键字

1)使用final声明的类不能被继承,

2)声明的方法不能被重写,

3)声明的变量变为常量,

2 instanceof:判断一个对象到底是不是一个类的实例

import java.util.Scanner;class Father{public void tell1(){System.out.println("父类方法1");}public void tell2(){System.out.println("父类方法2");}}class Sun extends Father{public void tell1(){System.out.println("重写父类方法1");}public void tell3(){System.out.println("子类方法2");}}public class Operation{public static void main(String args[]){Father fa=new Father();System.out.println(fa instanceof Father);System.out.println(fa instanceof Sun);Father da=new Sun();System.out.println(da instanceof Father);System.out.println(da instanceof Sun);}}


八、接口

interface interfaceName{

全局变量

抽象方法

}

九、多态

1方法的重载和重写

2 对象的多态性,先向上在向下

  向上转型:程序自动完成

父类 父类对象=子类实例

向下转型:强制类型转换,子类和父类方法都可以调用

子类 子类对象=(子类) 父类实例

import java.util.Scanner;class Father{public void tell1(){System.out.println("父类方法1");}public void tell2(){System.out.println("父类方法2");}}class Sun extends Father{public void tell1(){System.out.println("重写父类方法1");}public void tell3(){System.out.println("子类方法2");}}public class Operation{public static void main(String args[]){// 向上转型Father fa=new Sun();fa.tell1();fa.tell2();// 向下转型/* Father fa=new Sun();Sun su=(Sun)fa;su.tell1();su.tell2();su.tell3(); */}}
多态性的应用

向上转型

import java.util.Scanner;class A{public void tell(){System.out.println("a----tell1");}}class B extends A{public void tell(){System.out.println("b---tell2");}}class C extends A{public void tell(){System.out.println("c---tell3");}}public class Operation{public static void main(String args[]){say(new B());}public static  void say(A a){a.tell();}}

接口的应用

import java.util.Scanner;interface USB{void start();void stop();}class C{public static void work(USB u){u.start();System.out.println("工作中");u.stop();}}class USBDisk implements USB{public void start(){System.out.println("U盘开始工作");}public void stop(){System.out.println("U盘停止工作");}} class Pointer implements USB{public void start(){System.out.println("打印机开始工作");}public void stop(){System.out.println("打印机停止工作");}}public class Operation{public static void main(String args[]){C.work(new USBDisk());C.work(new Pointer());}}


十、泛型

1、 以下是创建了两个泛型参数的类,大家可以运行了看看实例化泛型类的对象后,是否可以成功显示

class Gen<K,T>{private T take;private K key;public T getTake(){return take;}public void setTake(T take){this.take=take;}public K getKey(){return key;}public void setKey(K key){this.key=key;}}public class Operation{public static void main(String args[]){Gen<String,Integer> g=new Gen<String,Integer>();g.setKey("key");g.setTake(10);System.out.println(g.getKey()+""+g.getTake());}}

2、 如果我创建的是一个String的泛型,调用的函数参数又是Object类型,将String类型的对象赋值给OBJECT的对象就不出现转换异常。此时需要用通配符?

class Gen<T>{private T take;public T getTake(){return take;}public void setTake(T take){this.take=take;}public String toString(){return this.getTake().toString();}}public class Operation{public static void main(String args[]){Gen<String> g=new Gen<String>();g.setTake("jikexyueyuan");tell(g);}public static void tell(Gen<Object> i){System.out.println(i);}}

一下是修改后的

class Gen<T>{private T take;public T getTake(){return take;}public void setTake(T take){this.take=take;}public String toString(){return this.getTake().toString();}}public class Operation{public static void main(String args[]){Gen<String> g=new Gen<String>();g.setTake("jikexyueyuan");tell(g);}public static void tell(Gen<?> i){System.out.println(i);}}

泛型接口类

interface Mou<T>{public void say();}class Mons implements Mou<String>{private  String info;public Mons(String info){this.info=info;}public void setInfo(String s){info=s;}public String getInfo(){return info;}public void say(){}}public class Operation{public static void main(String args[]){Mons g=new Mons("jikexyueyuan");System.out.println(g.getInfo());}}

繁星函数

class Fun{public <T>T test(T t){return t;} }public class Operation{public static void main(String args[]){Fun f=new Fun();String s=f.test("zhanglu");System.out.println(s);}}


泛型数组

public class Operation{public static void main(String args[]){String arr[]={"www","jikexueyuan","com"};tell(arr);}public static <T>void tell(T arr[]){for(int i=0;i<arr.length;i++){System.out.println(arr[i]);}}}

十一、集合类(查看开发文档)

集合是一个动态数组,不同的是集合里面的对象内容可以恩义扩充,collection的常用子类有List set Queue,下面是list集合的使用,可以添加重复元素,排序方式是放入的顺序.

1 list集合

import java.util.ArrayList;import java.util.List;public class Operation{public static void main(String args[]){List<String> lists=null;// lists=new ArrayList<String>();//通过list的实现类实例化list接口类对象。Klists=new Vector<String>();lists.add("a");lists.add("b");lists.add("c");lists.remove(0);for(int i=0;i<lists.size();i++){System.out.println(lists.get(i));}System.out.println(lists);System.out.println("集合是否为空:"+lists.isEmpty());System.out.println("b是否存在:"+lists.indexOf("b"));//返回具体数值的索引,返回整数}}

我们发现ArrayList与Vector实现结果是一样的,下面我们看看它们的使用区别


当要考虑线程安全的时候使用Vector,反之使用ArrayList

2 SET接口

ALT+CTRIL+上下箭头 表示窗口转动,ctrl+D表示复制当前行在他的右边

Set接口中不可以加入重复元素,但是可以排序,常用的接口子类

1)散列存放:HashSet

 2)有序存放:TreeSet

 import java.util.HashSet; import java.util.TreeSet;import java.util.Set;public class Operation{public static void main(String args[]){Set<String> Sets=null;// Sets=new HashSet<String>();Sets=new TreeSet<String>();Sets.add("a");Sets.add("b");Sets.add("c"); Sets.add("d");Sets.add("e");Sets.add("f"); System.out.println(Sets);System.out.println("集合是否为空:"+Sets.isEmpty());}} 

3 Iterator接口

只要是集合我们就要使用Iterator来进行输出。输入了多个对象,一个一个轮流判断,如果是对象就取走,判断下一个对象,不是退出。


4 ,Map 接口

MAP接口与集合有区别,map的保存时以键值对的形式保存,常用的子类有HashMap无序存放,Key不允许重复,Hashtable无序存放,KEY不允许重复.HASHMAP不是线程安全,hashTable是线程安全。HASHMAP允许value为空值,hashtable不允许为空值

原创粉丝点击