1 面向对象编程的思想来源生活,一切皆对象
要描述这个世界上任何一个对象都可以通过静态属性(成员变量)和动态属性(方法/函数)描述。
2 定义一个类等于定义一种新的数据类型。
3 一个类就是一个具体对象实例模板。
4 面向对象的三大特性
1) 封装 对对象的成员进行访问限制
封装的三个级别:
公开:public
受保护的:protected
私有的:private
2) 继承
一个类可以获得另外一个类中的成员属性和成员方法(秉承 is-A 关系)
继承与被继承的概念:
- 被继承的类叫父类,也叫基类,也叫超类
- 用于继承的类,叫子类,也叫派生类
- 在Java中,任何类都有一个共同的父类叫object
3) 多态
同一个对象在不同情况下有不同的状态出现
多态不是语法,是一种设计思想
多态:同一事物的多种形态,动物氛围人类,狗类,猪类
多态性:一种调用方式,不同的执行效果
构造函数:
在对象进行实例化的时候,系统自动调用的一个函数叫构造函数,通常用来对实例对象进行初始化
构造函数名与 类 同名,且没有返回值
当没有自定义构造函数时,系统会自动创建一个无参数的构造函数
一旦 自定义 有参数的构造函数,系统将 不再 自动创建 无参数 构造函数
开发中建议只要写 有参数 的构造函数都必须写 无参数 的构造函数
get 方法 取出成员变量值 set 方法 给程成员变量赋值
一旦成员变量拥有了 get和set就变成了属性
练习实例:
class object{
public static void main(String[] args)
{
Person p1 = new Person();
p1.setName("李XX");
p1.setGender("女");
Person p2 = new Person();
p1.eat();
//p1.name = "dddd"不能这样给name赋值,因为name是私有的
p2.sleep();
Person p3 = new Person("张三","男",18);
p3.out();
Person p4 = new Person("李四","女",18);
p4.out();
System.out.println(p1.getName()+","+p1.getGender());
}
}
class Person{
private String name; //一旦成员变量拥有了Set和get就变成了属性
private String gender;
private int age;
public Person(){
System.out.println("构造函数!");
}
public Person(String name,String gender,int age){
//this指的是当前实例对象
this.name = name;
this.gender = gender;
this.age = age;
}
//get(取出成员变量的值) 和set方法(给成员变量赋值)
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setGender(String gender){
this.gender = gender;
}
public String getGender(){
return this.gender;
}
public void playGame(){
System.out.println("打游戏!");
}
public void eat(){
System.out.println("吃饭!");
}
public void sleep(){
System.out.println("睡觉!");
}
public void out(){
System.out.println(this.name+","+this.gender+","+this.age);
}
Stirng类:
1.java.lang包中的类不用引入包,直接使用
class bao{
public static void main(String[] args){
String info1 = "我是好人";
String info2 = "我是坏人";
//判断相等,要注意是地址相等还是内容相等
//java对直接使用字符串类型做了优化,当两个类型相同时候,第二变量就不在开辟空间
if(info1 == info2){ //是判断地址相等
System.out.println("地址相等");
}
String data1 = new String("你是好人");
String data2 = new String("你是坏人");
if(data1 == data2){
System.out.println("地址相等");
}else{
System.out.println("地址不相等");
}
}
比较字符串内容相等
if(data1.equals(data2)){
System.out.println("内容相等");
}else{
System.out.println("内容不相等");
}
正则表达式的练习(回顾知识)
String data = "我爱我的祖国,她美丽又可爱";
//取"国" charAt(下标);
System.out.println(data.charAt(5));
String eamil = "haoren@sina.com";
if(email.matches("\\w+@\\w+.\\w+")){
System.out.println("邮箱合法!");
}else{
System.out.println("邮箱不合法!");
}
//用户名规则:6 - 18 只能是数字/大小写字母/下划线_
String username = "haoren123";
if(username. ("\\w{6,18}")){
System.out.println("用户名合法!");
}else{
System.out.println("用户名不合法");
}
//电话号码:18582575786 第一位以1开头 11位
String tel = "18582575786";
if(tel.matches("^1\\d{10}")){
System.out.println("电话合法!");
}else{
System.out.println("电话不合法!");
}
字符的分割
String address = "www.baidu.com";
String[] a = address.split{"[.]"};
//"."在正则表达式中有其它意思,需用[]引起来,代表 字符
System.out.println(a.length);
for(String x:a){
System.out.prinln(x);
}
路径统一
String path = "C:\ProgramData\Adobe\cmd.exe";
//方法一:效率低
String path1 = "C:"+File.separator+"ProgramData"+File.separator+"Adobe"+File.separator+"cmd";
String[] p = path.split("\\\\");
System.out.println(p.length);
for(String c:p){
System.out.println(c);
}
//方法二
int path2 = lastIndexOf("\\");
//System.out.println(path2);
String temp = path2.substing(index+1);
System.out.println(temp);
基础方法:
//判断字符串的开头/结尾
String a = "雷女士";
System.out.println(a.startsWith("雷"));
System.out.println(a.endsWith("女"));
//String的效率问题
String data1 = "雷";
String data = data1 + "女士";
//当开发中遇到反复拼串时,不使用String
System.out.println(data);
//反复拼串,应当使用StringBuffer
StringBuffer lover = new StringBuffer("雷");
System.out.println(lover);
lover.append("女士");
System.out.println(lover);
//去掉空格 trim
String username = " 佩奇";
System.out.println(username);
System.out.println(username.trim());
//替换
String lover2 = "雷女士你好";
lover2.replace("雷女士","杨先生");
System.out.println(lover2.replace("雷女士","杨先生");
}