//个人觉得重点的部分会用彩色标出
-
面向对象思想
1.面向对象思想概述
面向过程思想: 遇到一个问题,一步一步的去解决他,强调的是过程(典型代表语言是C语言)
面向对象思想: 遇到一个问题,找一个可以解决问题的对象(可以是人,也可以是别的),强调是对象(典型代表语言Java)
案例1:
菜鸟买电脑
面向过程思想: a.查资料 b.坐公交去中关村 c.货比三家 d.确定了服务员腿最长的那家
e.交钱交货 f.回家
面向对象思想: 找一个电脑高手,给他钱
案例2:
洗衣服
面向过程思想: a.收集衣服 b.加水洗衣液 c.泡一会 d.自己搓 e.漂洗 f.拧干 d.先抖抖再晾起来
面向对象思想: 1.找个全自动洗衣机,把衣服丢进去
2.找一个人,把衣服给他
2.面向对象的三大特征
a.封装(安全) b.继承(复用) c.多态(扩展)
3.类和对象
Java中必须先有类,才能有对象
类是什么???
一群具有相同属性和行为事物的集合,比如人类,狗类,猫类
对象又是什么???
就是类中的一个具体存在,也称为实例
举例:
车(类) 宝马车(类) 我家那辆三轮车(对象)
动物(类) 狗(类) 大黄狗(类) 食堂门口那只狗(对象)
4.类和对象到底是什么关系
对象 是以 类 作为 模板 创建出来的
所以类中有什么,那么对象就应该有什么
5.类的定义***************
类的定义:类名,类的属性,类的行为
格式:
public class 类名{ //类名大驼峰
//类的属性(成员变量)
数据类型 成员变量名1;
数据类型 成员变量名2;
...
//类的行为(成员方法) 没有static关键字
public 返回值类型 方法名(参数列表){
方法体
return 返回值;
}
}
6.对象的创建和使用***************
对象的创建格式:
类名 对象名 = new 类名();
通过对象访问成员变量:
System.out.println(对象名.成员变量名)
对象名.成员变量名 = 值;
通过对象调用成员方法:
对象名.成员方法名(参数);
默认值问题:
成员变量是有默认值的!!!!
整数 0
浮点数 0.0
字符 '空格'
布尔 false
引用类型 null
7.对象的内存图:
a.对象名/对象引用 保存的是对象的地址
b.真正的对象保存到堆中
c.真正的对象中,有自己独有一份成员变量,没有真正的方法,只有方法的标记
d.栈有一个特点,先进后出, 堆中真正对象,由JVM的小弟GC负责回收
8.成员变量 和 局部变量
成员变量:直接定义在类中的变量
局部变量:定义类中的方法中的变量
成员变量和局部变量的五点区别:
a.定义位置不同
b.初始值不同/默认值不同
局部变量 没有默认值 ,不赋值不能使用
成员变量 有默认值,不同的数据类型不同的默认值
c.作用域不同(有效范围)
局部变量 只能在局部使用,在哪个方法中定义的只能在该方法中使用
成员变量 在该类中都可以使用
d.内存位置
局部变量 跟随方法的调用,进入栈中
成员变量 跟随对象的创建,进入堆中
e.生命周期
局部变量 跟随方法的调用而出现,跟随方法的结束而销毁
成员变量 跟随对象的创建而出现,跟随对象的销毁而销毁
-
封装
1.封装的概述
封装就是对我们写的对象的一种保护,防止数据被随意访问和修改
2.封装的原则
a.把需要隐藏的属性 隐藏起来
b.对外提供一种公共访问方式
3.封装的步骤
a.java提供关键字,private 用来修饰成员变量
b.提供一对get/set方法,通过该方法可以访问成员变量
private关键字的作用
a.private是一种最小的权限修饰符
b.能修饰成员变量和成员方法
c.被private修饰的成员,只能在类的内部访问
private的使用格式
格式: private 数据类型 成员变量名;
例如:
public class Dog{
private int age; //成员变量私有化了
//get方法,获取值,没有参数,有返回值
public int getAge(){
return age;
}
//set方法,修改值,没有返回值,有参数
public void setAge(int a){
age = a;
}
}
生成get和set方法快捷键: alt+INS 点击 Getter/Setter
4.封装的优化一:
使用this关键字:
this关键字的作用:
解决局部变量和成员变量同名的情况
如果同名优先使用局部变量,如果使用 this.变量名,就可以访问成员变量
比如:
public class Dog{
private int age; //成员变量私有化了
//get方法,获取值,没有参数,有返回值
public int getAge(){
return age;
}
//set方法,修改值,没有返回值,有参数
public void setAge(int age){
age = age; //如果这么写 局部变量 再赋值给本身
this.age = age;//把局部变量age,赋值给成员变量this.age
}
}
扩展: this底层的含义是什么???
this就是一个对象,代表当前对象,方法是那个对象调用的,那么方法中this就代表那个对象
5.封装的优化二_构造方法
a.什么是构造方法
给对象的成员变量默认值的方法
b.构造方法的格式:
public 类名(){
作用: 给成员变量赋默认值的
}
注意:构造方法没有返回值,不写返回值类型(不是void!!!!)
注意:其实我们以前说的固定格式
类名 对象名 = new 类名();//这里的类名() 其实就是调用了构造方法
c.构造方法的重载
重载的构造方法:
public class Dog{
private int age; //成员变量私有化了
private String name;//
//无参构造
public Dog(){
}
//重载构造
public Dog(int age){
this.age = age;
}
public Dog(String name){
this.name = name;
}
public Dog(int age,String name){
this.age = age;
this.name = name;
}
}
d.构造方法的注意事项
i.如果一个类中没有写任何构造,那么默认有一个无参构造
ii.如果我们写了构造,那么系统就不会生成无参构造
iii.构造方法也可以重载
e.JavaBean类的定义******************************
JavaBean是Java中定义类的标准
i.所有成员变量必须私有化(private)
ii.为私有化的成员变量提供Getter/Setter
iii.标准的JavaBean中必须有无参构造
iv. 标准的JavaBena中一般还会提供全参构造
总结 JavaBean = private+get/set+无参构造+全参构造
-
String类
1.String类是什么
就是字符串
2.String类特点:
a.String name = "abc";
打印name时,会出来内容而不是地址(JVM优化)
b.字符串的内容具有不可变性
String name = "abc";
name+="java";
System.out.println(name)
c.字符串常量具有共享性
String s1 = "abc";
String s2 = "abc";
那么s1和s2保存的地址一样,共享一个"abc"字符串
d."abc" 等效于 char[] data={ 'a' , 'b' , 'c' }。
3.String对象的几种创建方式
a.最常用
String name = "java";
b.最没用
String name = new String();//空内容字符串对象
c.最啰嗦
String name = new String("java");
d.字符数组
char[] chs = {'j','a','v','a'};
String name = new String(chs);
e.字节数组
byte[] bs = {97,98,97,98};
String name = new String(bs);
4.字符串对象中各种方式
a.判断功能的方法
boolean equals(String anotherString); 比较两个字符串的内容是否相同
boolean equalsIgnoreCase(String anotherString); 忽略大小写比较两个字符串内容是否相同
b.获取功能的方法
int length(); 获取字符串的长度(字符的个数)
char charAt(int index); 获取字符串某个字符
public String concat(String str);//拼接字符串,相当于"+"号,返回拼接之后的字符串
public int indexOf(String str);//查找子串,第一次出现的索引
String substring(int beginIndex);//从开始下标截取字符串,直到结束,返回值截取到的字符串
String substring (int beginIndex, int endIndex);
//从开始下标,到结束下标截取字符串(含头不含尾),返回值截取到的字符串
c.转换功能的方法
char[] toCharArray();//将字符串的内容,转成字符数组
byte[] getBytes(); // 将字符串的内容,转成字节数组
String replace(String target, String replacement);//替换
String toUpperCase(); //转成大写字符串
String toLowerCase(); //转成小写字符串
d.切割功能
String[] split(String 切割符);切割字符串