标签:
java 学习:
对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
class定义一个类,
class类名称{
数据类型 属性;
............
public 返回的数据类型 方法名称(参数1,参数2......){
程序语句;
return 表达式;
}
}
类的名称首字母必须大写!
class Person{
//人中有姓名和年龄两个属性
Srting name; //姓名
int age; //年龄
public void tell(){
System.out.pringln("姓名:"+name+"年龄:"+age);
}
}
person类图:
第一层表示类的名称,类的名称与之前一样要求开头首字母大写;
第二层表示属性的定义,按照“访问权限 属性名称:属性类型”的格式定义;
第三层表示类中方法的定义,按照“访问权限 方法名称():方法返回值”的格式定义
实例化对象:
new Person(),在堆中开辟空间,所有的内容都是默认值。
类属于引用数据类型,从数组中可以知道,引用数据类型必然存在栈内存-堆内存的引用关系,实际上,在类与对象的使用关系上必然存在这种关系。
使用格式:
调用属性:对象.属性
调用方法:对象.方法()
有两种写法:
Person per = new Person();
per.name = "小明";
或
Person per = null;
per = new Person();
per.name = "小明";
注意:
对象是保存在栈内存之中,属性是保存在堆内存之中;
在程序中所有的方法是保存在全局代码区之中的,此区中的内容是所有对象共享的;
在使用对象的时候,对象必须被实例化之后才可以使用;
实例化对象并不止指的是直接通过new关键字实现的,只要其有堆内存的空间指向,则就表示实例化成功。
如果不实例化—则会出现空指向异常,在引用操作中,如果一个对象没有堆内存的引用,而是调用了类中的属性或方法,就会出现此问题;
所谓的引用数据类型,实际上传递的是堆内存的使用权,可以同时为一个堆内存空间定义多个栈内存的引用操作。
封装就是保护内容:保证某些属性或方法不被外部看见。
被封装的属性如果需要被访问,则需要编写setter和getter方法完成;
eg:
private String name;
public void SetterName(String n){ //设置姓名
name = "skye"
}
public void GetterName(){
return name;
}
注意:
什么是构造方法?
只要一有对象产生实例化,就会调用构造方法。
构造方法的定义格式:
class 类名称{
访问权限 类名称(类型1 参数1,类型2 参数2,......){
程序语句;
....//构造方法没有返回值
}
}
构造方法的申明:
申明对象时,并不去调用构造方法;
每个类中都会有一个构造方法;
java的操作机制中,如果一个类没有明确的声明一个构造方法,则会自动生成一个无参的什么都不做的构造方法,供用户使用。
构造方法的主要目的是为类中的属性进行初始化。
匿名对象的使用
总结:
string有两种比较方式:
- ==用来判断地址空间是否相等,判断的是地址值,比较的地址值;
- 如果判断内容相等与否,则就使用equals()方法来比较;
在String 中可以直接赋值和new 调用构造方法的方式完成,
String name = “skye”;
表示将一个堆内存空间的指向给了栈内存空间;
使用new String()的方式,开辟了两个内存对象,开发中最好使用直接赋值的方式完成。
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数组(字节数组),一般在IO操作中会经常使用到。
字符串变为字节数组:public byte[] getBytes()
将一个字节数组变为字符串:
将全部字节数组变为String:public String(byte[] bytes)
将部分字节数组变为String:public String(byte[] bytes,int offset,int length)
public class StringAPIDemo{
public ststic void main(String args[]){
String str1 = "hello skye";
System.out.pringln("\""+str1+"\"的长度为:”str1.length());
}
}
注意:
从指定位置开始查找:public int indexOf(int ch,int fromIndex)
从一个指定的字符串中取出里面的部分内容,
使用方法:
从指定位置开始一直截取到结束位置: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表示当前对象:
当前对象:当前正在调用方法的对象。
作用:存放对象,有时候是容器。
集合:可变容量的数组,java.util.collection –接口,表示集合
list 接口 有顺序,可以重复
set 接口 没有顺序,不可重复
map 接口 不是collection的子接口,名值对,一次保存2个对象,前面的对象是KEY,后面的对象为value,根据key来获取value。key 不可重复,value可以重复。
类的关系图:
1.向集合中添加对象
collection c1 = new ArryList();
//
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+"");
}
}
}
}
ArryList –使用数组来实现,
特点:
特点:
古老的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); //给猫喂鱼
}
}
标签:
原文地址:http://blog.csdn.net/qq_24141147/article/details/51532012