上一个礼拜太忙了,今天开始恢复java的学习~
目录
1、面向过程——面向对象的区别
传统的面向过程式编程是动作驱动的,数据和动作是分离的。面向对象编程的范式重点在于对象,动作和数据一起定义在对象中。
面向过程的范式重点在于设计方法。面向对象的范式将数据和方法耦合在一起构成对象。使用面向对象范式的软件设计重点在对象以及对对象的操作上
一个简单的计算BMI类,
/* BMI:name,gender(male-1,female-0),age,weight,height */
public class BMI {
private String name;
private int age;
private String gender; // male=1 ; female = 0;
private double weight; //KG
private double height; //m
public BMI(String name,int gender,int age,double weight,double height) {
this.name = name;
this.age = age;
this.gender = (gender==1) ? "male" : "female";
this.weight =weight;
this.height = height;
}
public BMI(String name,double weight,double height) {
this(name,1,20,weight,height);
}
public double getBMI() {
double bmi = this.weight / this.height / this.height ;
return bmi;
}
public String getStatus() {
double bmi = getBMI();
if (bmi < 18.5)
return "Underweight";
else if (bmi < 25)
return "Normal";
else if (bmi < 30)
return "Overweight";
else
return "Obese";
}
public String getName() {
return this.name;
}
public String getGender() {
return this.gender;
}
public int getAge() {
return this.age;
}
public double getWeight() {
return this.weight;
}
public double getHeight() {
return this.height;
}
}
2 、类的关联 聚合 组合
关联:关联表示两个类之间的活动。下图,学生选课,老师教课。
聚集/组合:聚集是关联的一种特殊形式,代表了两个对象之间的归属关系
1 to 1 :组合
N to 1 :聚集
3、string
3.1 创建
首先,明确一点:字符串是对象。它有charAt(int),length()等方法。
String message = new String("welcome");
String message = "welcome";
上面两句同效,#2 java将字符串直接量看作String对象。
String 变量存储的是对String 对象的引用,String 对象里存储的才是字符串的值。
3.2不可变与限定字符串
String s = "java";
s = "HTML";
对上面的程序,#2不能改变s的值。第一条语句创建了一个内容为"]ava的String 对象,并将其引用賦值给S,第二条语句创建了一个内容为"HTML"的新String 对象,并将其引用賦值给s。陚值后第一个String 对象仍然存在,但是不能再访问它,因为变量s现在指向了新的对象。String 对象是不可变的,它的内容是不能改变的。
因为字符串在程序设计中是不可变的,但同时又会频繁地使用,所以java虚拟机为了提高效率并节约内存,对具有相同字符序列的字符串直接量使用同一个实例。这样的实例称为限定的字符串。
repalce和split是修改和替换方法,它们也不能修改字符串的内容,而是返回一个源自原始字符串的新字符串(并未改变原始字符串!)
3.3正则表达式
正则表达式(regular expression)(缩写regex) 是一个字符串,用于描述匹配一个字符串集的模式。可以通过指定某个模式来匹配、替换或分隔一个字符串。这是一种非常有用且功能强大的特性。
String中的match方法
"Java is fun".matches("Java.*"); // 子串.* 与0 个或多个字符相匹配。
"440-02-4S34".matches(\d{3}-\d{2}-\d{4}"); //\d 表示单个数字位,\d{3}表示三个数字位。
String s = "a+b$#c".replaceAll("[$+#]","NNN"); //用NNN代替s中的所有$或者+或者#
String[] sa = "java,C++.C#?C;pyton".split("[,.;?]"); //主要出现,.;?,就把字符串划分成一段一段的
3.4常用方法
字符串转换成数组
char[] chars = "Java".toCharArray();
数值转换成字符串
String.value0f(S .44); //char,char[],int,long,float,double,boolean
格式化字符串。format 方法返回一个格式化的字符串,而printf 方法显示一个格式化的字符串
String s = String.format("%7.2f%6d%-4s",45.556,14,"AB");