Java面向对象
2016-05-29 14:34
253 查看
java 学习:
java是面向对象的程序语言,c是面向过程的程序语言,各有特长。
对外部不可见,可以保护程序中的某些内容。
继承性:扩展功能。
多态:方法的重载,对象的多态性。
类是对某一事物的描述,是抽象的,概念上的定义;
对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
-
类的名称首字母必须大写!
person类图:
第一层表示类的名称,类的名称与之前一样要求开头首字母大写;
第二层表示属性的定义,按照“访问权限 属性名称:属性类型”的格式定义;
第三层表示类中方法的定义,按照“访问权限 方法名称():方法返回值”的格式定义
声明对象:Person per,栈内存中声明的,与数组一样,数组名称就保存在栈内存之中, 只开辟了栈内存的对象是无法使用的,必须有其堆内存的引用才可以使用。
实例化对象:
new Person(),在堆中开辟空间,所有的内容都是默认值。
类属于引用数据类型,从数组中可以知道,引用数据类型必然存在栈内存-堆内存的引用关系,实际上,在类与对象的使用关系上必然存在这种关系。
使用格式:
有两种写法:
或
注意:
对象是保存在栈内存之中,属性是保存在堆内存之中;
在程序中所有的方法是保存在全局代码区之中的,此区中的内容是所有对象共享的;
在使用对象的时候,对象必须被实例化之后才可以使用;
实例化对象并不止指的是直接通过new关键字实现的,只要其有堆内存的空间指向,则就表示实例化成功。
如果不实例化—则会出现空指向异常,在引用操作中,如果一个对象没有堆内存的引用,而是调用了类中的属性或方法,就会出现此问题;
所谓的引用数据类型,实际上传递的是堆内存的使用权,可以同时为一个堆内存空间定义多个栈内存的引用操作。
对象保存在栈内存之中,而具体的内容保存在堆内存之中
对象间的引用传递,实际上传递的就是堆内存空间的使用权
垃圾的产生;
为方法封装:private 方法返回值 方法名称(参数列表){}
eg:
注意:
如果年龄设置有问题,则不应该为属性赋值;
应在setter方法中加入检验;在getter方法中只是把内容简单的取回;
封装性在java中有很多种形式,private只是最基本的一种形式,也是一种比较常见的形式;
类中的每一个属性都必须封装;
什么是构造方法?
只要一有对象产生实例化,就会调用构造方法。
构造方法的定义格式:
构造方法的申明:
构造方法的名称必须与类名称一致;
构造方法的申明处不能有任何返回值类型的申明;
不能在构造方法中使用return返回一个值;
申明对象时,并不去调用构造方法;
每个类中都会有一个构造方法;
java的操作机制中,如果一个类没有明确的声明一个构造方法,则会自动生成一个无参的什么都不做的构造方法,供用户使用。
构造方法的主要目的是为类中的属性进行初始化。
匿名对象的使用
匿名:没有名字,在java中如果一个对象只使用一次,则称为匿名对象;
所谓的匿名对象就是比之前的对象少了一个栈内存的引用关系。
匿名对象只在堆内存中开辟空间,而不存在栈内存的引用。
总结:
构造方法的定义及使用原则:
对象实例化时必须调用构造方法
每个类中都至少有一个构造方法
匿名对象:只开辟了堆内存的实例对象
所有的属性都必须进行封装(private);
封装之后的属性都必须通过setter和getter设置和取得;
如果需要可以加入若干构造方法;
再根据其他要求添加相应的方法;
类中所有的方法都不会直接输出,而是交给北调用处输出。
- ==用来判断地址空间是否相等,判断的是地址值,比较的地址值;
- 如果判断内容相等与否,则就使用equals()方法来比较;
String name = “skye”;
表示将一个堆内存空间的指向给了栈内存空间;
使用new String()的方式,开辟了两个内存对象,开发中最好使用直接赋值的方式完成。
String的特点:
字符串的内容不可改变;改变的是堆内存地址的指向(内存地址的引用关系);
StringBuffer();
-
在String类中提供了以下方法:
1. 将字符串变为字符数组:public char[] toCharArray()
2. 字符数组变为字符串:public String(char[] value) 和
3. public String(char[] value,int offset,int count)
字符串变为字节数组:public byte[] getBytes()
将一个字节数组变为字符串:
将全部字节数组变为String:public String(byte[] bytes)
将部分字节数组变为String:public String(byte[] bytes,int offset,int length)
注意:
在数组中可以使用数组名称.length,而在字符串的操作中一定要记得用():字符串.length();
从指定位置开始查找:public int indexOf(int ch,int fromIndex)
查找的时候方法的返回值是一个字符串的位置,如果查到的话返回字符串的位置,如果没有查到的话,他将返回-1;
使用方法:
从指定位置开始一直截取到结束位置:public String substring(int beginIndex)
截取指定范围的字符串:public String substring(int beginIndex, int endIndex)
转化为小写:public String toLowerCase()
public boolean endsWith(String suffix)测试此字符串是否以指定的后缀结束。
public boolean equalsIgnoreCase(String anotherString)将此 String 与另一个 String 比较,不考虑大小写。如果两个字符串的长度相同,并且其中的相应字符都相等(忽略大小写),则认为这两个字符串是相等。的。
使用this调用构造方法:
使用this表示当前对象:
当前对象:当前正在调用方法的对象。
数组:缺陷—类型单一,固定长度,无法更改不能知道数组中对象的真实数量。
集合:可变容量的数组,java.util.collection –接口,表示集合
list 接口 有顺序,可以重复
set 接口 没有顺序,不可重复
map 接口 不是collection的子接口,名值对,一次保存2个对象,前面的对象是KEY,后面的对象为value,根据key来获取value。key 不可重复,value可以重复。
类的关系图:
1.向集合中添加对象
boolean add(E e)–向列表的尾部添加指定的元素(可选操作)。
boolean 表示是否成功加入。
c1.add(“hello”);
c1.add(new Integer(1));
2.将一个集合中所有的对象加入到另一个集合
3.清除集合中所有的对象
void clear()
4.比较集合中是否包含指定的对象
boolean contains(Object o)
5.比较集合中是否包含另一个集合的所有内容
boolean containsAll(Collection
特点:
访问元素 快速,改变集合效率低(增加,删除,插入较多)
按照序列进行访问的操作多,改变集合内容的操作少的情况下,选择使用该类
最常使用LIst集合
修改集合内容效率高,(增加,删除,插入),资源利用率高
根据序列访问效率比较低;
修改操作频繁,根据序列查询操作少,选择使用该类
public class CollectionDemo{
public ststic void main(String args[]){
//List 集合 (有序可重复)
List list = new LinkedList();
collections类–一个工具类
集合的工具类—工具类:其中的方法都是static静态的方法
使用:
reverse(List list):反转 List 中元素的顺序
sort(List list):根据元素的自然顺序对指定 List 集合元素按升序排序
//按照对象的自然顺序来排列,(也可以自定义顺序)
Collections.sort(list);
it.list.iterator();
while(it)
Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
void copy(List dest,List src):将src中的内容复制到dest中
练习:
面向对象:
面向对象的基本概念:java是面向对象的程序语言,c是面向过程的程序语言,各有特长。
- 面向对象的三个主要特征:
封装性:对外部不可见,可以保护程序中的某些内容。
继承性:扩展功能。
多态:方法的重载,对象的多态性。
- 类与对象的关系:
面向对象的核心组成部分,就是类与对象。类是对某一事物的描述,是抽象的,概念上的定义;
对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
-
- 类的定义:
class定义一个类,class类名称{ 数据类型 属性; ............ public 返回的数据类型 方法名称(参数1,参数2......){ 程序语句; return 表达式; } }
类的名称首字母必须大写!
class Person{ //人中有姓名和年龄两个属性 Srting name; //姓名 int age; //年龄 public void tell(){ System.out.pringln("姓名:"+name+"年龄:"+age); } }
person类图:
第一层表示类的名称,类的名称与之前一样要求开头首字母大写;
第二层表示属性的定义,按照“访问权限 属性名称:属性类型”的格式定义;
第三层表示类中方法的定义,按照“访问权限 方法名称():方法返回值”的格式定义
- 对象的声明及使用:
Person per = new Person();声明对象:Person per,栈内存中声明的,与数组一样,数组名称就保存在栈内存之中, 只开辟了栈内存的对象是无法使用的,必须有其堆内存的引用才可以使用。
实例化对象:
new Person(),在堆中开辟空间,所有的内容都是默认值。
类属于引用数据类型,从数组中可以知道,引用数据类型必然存在栈内存-堆内存的引用关系,实际上,在类与对象的使用关系上必然存在这种关系。
使用格式:
调用属性:对象.属性 调用方法:对象.方法()
有两种写法:
Person per = new Person(); per.name = "小明";
或
Person per = null; per = new Person(); per.name = "小明";
注意:
对象是保存在栈内存之中,属性是保存在堆内存之中;
在程序中所有的方法是保存在全局代码区之中的,此区中的内容是所有对象共享的;
在使用对象的时候,对象必须被实例化之后才可以使用;
实例化对象并不止指的是直接通过new关键字实现的,只要其有堆内存的空间指向,则就表示实例化成功。
如果不实例化—则会出现空指向异常,在引用操作中,如果一个对象没有堆内存的引用,而是调用了类中的属性或方法,就会出现此问题;
所谓的引用数据类型,实际上传递的是堆内存的使用权,可以同时为一个堆内存空间定义多个栈内存的引用操作。
总结
掌握栈与堆内存的关系;对象保存在栈内存之中,而具体的内容保存在堆内存之中
对象间的引用传递,实际上传递的就是堆内存空间的使用权
垃圾的产生;
- 面向对象的封装性
封装就是保护内容:保证某些属性或方法不被外部看见。- 封装的实现:
为属性封装:private 属性类型 属性名称为方法封装:private 方法返回值 方法名称(参数列表){}
- 访问封装的内容:
被封装的属性如果需要被访问,则需要编写setter和getter方法完成;eg:
private String name; public void SetterName(String n){ //设置姓名 name = "skye" } public void GetterName(){ return name; }
注意:
如果年龄设置有问题,则不应该为属性赋值;
应在setter方法中加入检验;在getter方法中只是把内容简单的取回;
封装性在java中有很多种形式,private只是最基本的一种形式,也是一种比较常见的形式;
类中的每一个属性都必须封装;
- 构造方法与匿名对象
构造方法的概念及调用时机什么是构造方法?
只要一有对象产生实例化,就会调用构造方法。
构造方法的定义格式:
class 类名称{ 访问权限 类名称(类型1 参数1,类型2 参数2,......){ 程序语句; ....//构造方法没有返回值 } }
构造方法的申明:
构造方法的名称必须与类名称一致;
构造方法的申明处不能有任何返回值类型的申明;
不能在构造方法中使用return返回一个值;
申明对象时,并不去调用构造方法;
每个类中都会有一个构造方法;
java的操作机制中,如果一个类没有明确的声明一个构造方法,则会自动生成一个无参的什么都不做的构造方法,供用户使用。
构造方法的主要目的是为类中的属性进行初始化。
- 构造方法的重载
构造方法与普通方法一样,都是支持重载操作的,只要参数的类型或个数不同,则就可以完成重载操作。匿名对象的使用
匿名:没有名字,在java中如果一个对象只使用一次,则称为匿名对象;
所谓的匿名对象就是比之前的对象少了一个栈内存的引用关系。
匿名对象只在堆内存中开辟空间,而不存在栈内存的引用。
总结:
构造方法的定义及使用原则:
对象实例化时必须调用构造方法
每个类中都至少有一个构造方法
匿名对象:只开辟了堆内存的实例对象
- 类设计分析:
根据需求写出类所包含的属性;所有的属性都必须进行封装(private);
封装之后的属性都必须通过setter和getter设置和取得;
如果需要可以加入若干构造方法;
再根据其他要求添加相应的方法;
类中所有的方法都不会直接输出,而是交给北调用处输出。
- String 类:(比较重要)
string有两种比较方式:- ==用来判断地址空间是否相等,判断的是地址值,比较的地址值;
- 如果判断内容相等与否,则就使用equals()方法来比较;
- String类的两种实例化方式
在String 中可以直接赋值和new 调用构造方法的方式完成,String name = “skye”;
表示将一个堆内存空间的指向给了栈内存空间;
- String类的两种比较操作
使用直接赋值的方式,只需要一个实例化对象即可,可以有效的节省内存空间,使用new String()的方式,开辟了两个内存对象,开发中最好使用直接赋值的方式完成。
String的特点:
字符串的内容不可改变;改变的是堆内存地址的指向(内存地址的引用关系);
StringBuffer();
-
- String 的常用方法:
语言的使用文档,,为用户列出了全部的类以及相关的操作及使用方法;- 字符串与字符数组
一个字符串可以变为一个字符数组,同样,也可以把一个字符数组变为一个字符串。在String类中提供了以下方法:
1. 将字符串变为字符数组:public char[] toCharArray()
2. 字符数组变为字符串:public String(char[] value) 和
3. public String(char[] value,int offset,int count)
- 从字符串取出指定位置的字符
此方法的返回值一定是一个char类型,public char charAt(int index)public class StringAPIDemo{ public ststic void main(String args[]){ String str1 = "hello"; System.out.pringln(str1.charAt(3)); } }
- 字符串与byte数组的转换:
byte数组(字节数组),一般在IO操作中会经常使用到。字符串变为字节数组:public byte[] getBytes()
将一个字节数组变为字符串:
将全部字节数组变为String:public String(byte[] bytes)
将部分字节数组变为String:public String(byte[] bytes,int offset,int length)
- 取得一个字符串的长度:public int length()
public class StringAPIDemo{ public ststic void main(String args[]){ String str1 = "hello skye"; System.out.pringln("\""+str1+"\"的长度为:”str1.length()); } }
注意:
在数组中可以使用数组名称.length,而在字符串的操作中一定要记得用():字符串.length();
- 查找指定的字符串是否存在:
从头开始查找:public int indexOf(String str)从指定位置开始查找:public int indexOf(int ch,int fromIndex)
查找的时候方法的返回值是一个字符串的位置,如果查到的话返回字符串的位置,如果没有查到的话,他将返回-1;
- 去掉空格:
如果信息由用户输入,可能有空格,需要去掉左右两边的空格,但是在字符串之间的空格是不能去掉的- 字符截取:
从一个指定的字符串中取出里面的部分内容,使用方法:
从指定位置开始一直截取到结束位置:public String substring(int beginIndex)
截取指定范围的字符串:public String substring(int beginIndex, int endIndex)
- 拆分字符串:
需要按照指定的字符串去拆分一个字符串:public String[] split(String regex)- 大小写转换:
转化为大写:public String toUpperCase()转化为小写:public String toLowerCase()
- 判断是否以指定的字符串开头或结尾:
public boolean startsWith(String prefix)测试此字符串是否以指定的后缀开始。public boolean endsWith(String suffix)测试此字符串是否以指定的后缀结束。
- 不区分大小写的比较:
equals只能对大小写一致的字符串进行比较,public boolean equalsIgnoreCase(String anotherString)将此 String 与另一个 String 比较,不考虑大小写。如果两个字符串的长度相同,并且其中的相应字符都相等(忽略大小写),则认为这两个字符串是相等。的。
- 引用传递
- this 关键字
表示类中的属性:使用this调用构造方法:
使用this表示当前对象:
当前对象:当前正在调用方法的对象。
- java集合
作用:存放对象,有时候是容器。数组:缺陷—类型单一,固定长度,无法更改不能知道数组中对象的真实数量。
集合:可变容量的数组,java.util.collection –接口,表示集合
list 接口 有顺序,可以重复
set 接口 没有顺序,不可重复
map 接口 不是collection的子接口,名值对,一次保存2个对象,前面的对象是KEY,后面的对象为value,根据key来获取value。key 不可重复,value可以重复。
类的关系图:
1.向集合中添加对象
collection c1 = new ArryList(); //
boolean add(E e)–向列表的尾部添加指定的元素(可选操作)。
boolean 表示是否成功加入。
c1.add(“hello”);
c1.add(new Integer(1));
2.将一个集合中所有的对象加入到另一个集合
collection c2 = new ArryList();
3.清除集合中所有的对象
void clear()
4.比较集合中是否包含指定的对象
boolean contains(Object o)
5.比较集合中是否包含另一个集合的所有内容
boolean containsAll(Collection
package com.skye; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /* * 用一个集合保存十份学生成绩,输出其中不及格的成绩。*/ public class StudentScore { public static void main(String[] args) { Collection score = new ArrayList(); score.add(11); score.add(79); score.add(80); score.add(92); score.add(87); score.add(79); score.add(90); score.add(59); score.add(60); score.add(77); //迭代器来遍历集合 Iterator it = score.iterator(); while(it.hasNext()){ Integer i = (Integer)it.next(); if(i<60){ System.out.println(i+""); } } } }
- List
ArryList –使用数组来实现,特点:
访问元素 快速,改变集合效率低(增加,删除,插入较多)
按照序列进行访问的操作多,改变集合内容的操作少的情况下,选择使用该类
最常使用LIst集合
- LinkedList
特点:修改集合内容效率高,(增加,删除,插入),资源利用率高
根据序列访问效率比较低;
修改操作频繁,根据序列查询操作少,选择使用该类
- Vector
古老的list,线程安全,效率低,速度慢public class CollectionDemo{
public ststic void main(String args[]){
//List 集合 (有序可重复)
List list = new LinkedList();
//向List 集合中添加对象,对象的顺序按照添加的顺序 //序列从0开始 list.add("hello"); list.add("world"); list.add("hello"); //2.可以为新添加的对象指定添加的位置 list.add(1,"hehe"); //3.根据对象的序列获取对象 System.out.println(list.get(1)); //4.返回此列表中第一次出现的指定元素的索引 System.out.println(list.IndexOf("hello")); //5.替换list集合的对象 list.set()1,"haha"; System.out.println(list.get(1)); System.out.println(list.get(2)); //6.返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图 List newList = list.subList(0,3); System.out.println(newList.size()); Iterator it = list.iterator(); while(it.hasNext()){ Systom.out.println(it.next()); } } }
collections类–一个工具类
集合的工具类—工具类:其中的方法都是static静态的方法
使用:
reverse(List list):反转 List 中元素的顺序
sort(List list):根据元素的自然顺序对指定 List 集合元素按升序排序
//按照对象的自然顺序来排列,(也可以自定义顺序)
Collections.sort(list);
it.list.iterator();
while(it)
Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
void copy(List dest,List src):将src中的内容复制到dest中
练习:
package com.skye1; /* * 1.一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处 */ //1.动物接口 -- interface interface Animal{ public void eat(Food food); } // 第一种动物 -- 狗 class Dog implements Animal{ @Override public void eat(Food food) { System.out.println("狗啃"+food.getName()); } } // 第二种动物 -- 猫 class Cat implements Animal{ @Override public void eat(Food food) { System.out.println("猫吃"+food.getName()); } } //2. 食物抽象类 -- abstract abstract class Food { protected String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } //第一种食物 -- 鱼 class Fish extends Food{ public Fish(String name) { super(); this.name = name; } } // 第二种食物 -- 骨头 class Bone extends Food{ public Bone(String name) { super(); this.name = name; } } //4. 饲养员类 -- class Feeder{ //有一个喂养的方法 public static void feed(Animal animal,Food food){ animal.eat(food); } } //5. 测试类 -- 饲养员给动物喂食物 public class TestFeeder { public static void main(String[] args) { Feeder feeder = new Feeder(); Animal animal = new Dog(); Food food = new Bone("骨头"); //给狗喂肉骨头 Feeder.feed(animal,food); animal = new Cat(); food = new Fish("鱼"); Feeder.feed(animal, food); //给猫喂鱼 } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树