A
当编译完成之后,运行java 类名命令的时候,报错找不到指定的类
解决方法:
set classpath=.
修改classpath值到当前路径。
3月25日,Java开始第二天了,也是老师说的正题,记得3月24日,李兴华老师讲解的真是太辛苦了,帮助我们大家一起复习到了8点多,不得不佩服老师的敬业精神。
今天开始讲解面向对象部分了,开始学习了。
今天所讲的知识点
A 面向对象的特性
B 类与对象的关系及其定义格式(属性、构造方法、setter方法、getter方法、其他普通方法)
C 匿名对象
D String类及其相关的方法
E 引用传递问题
F this关键字
G 接收本类的引用
我对知识点的理解
A 面向对象中有三大特征:
• 封装性:除了通过特定的方法之外,不可以直接访问其中的属性
• 继承性:将其他的功能继承下来继续发展
• 多态性:对父类不同的继承就是多态
B 一、类与对象的关系
1、类是一个共性的产物,是一个抽象的定义,而对象,是一个个性的产物,是一个具体的个体。
2、类必须通过对象才可以使用,而对象的所有特征和操作都必须在类中定义。
3、类由属性和方法组成:
• 属性:描述的是静态特征
• 方法:描述的是动态特征,是某类对象具有的行为或者功能。例如:说话、吃饭、唱歌、睡觉
二、类的定义格式
class ClassName
{
//在开发中必须对属性进行封装
//采用private关键字,那么属性值就只能通过setter及getter方法设置和取得
private DataType1 PropertiesName1;
......
//一个类中至少要有一个构造方法
//构造方法的名字必须和类名一致,并且不可以有返回值类型,而且必须是public权限
//无参构造方法,如果没有其他的构造方法,此方法可以省略定义,JAVA会自动生成
//如果有其他的构造方法,那么无参构造方法需要自己写,JAVA不会自动生成
//一般类定义中都要有一个无参无操作的构造方法,方便对象的声明
public ClassName(){}
//可以定义其他的构造方法,即重载构造方法,这样方便实现各种实例化对象
public ClassName(参数列表)
{
//可以调用本类中的this.setter方法进行属性设置
//因为在本类中,所以也可以直接对属性进行赋值
设置属性的语句;
}
//通过setter方法对属性进行设置
//在设置属性值的时候,最好考虑是否需要检查属性值的合理性和合法性
public void setPropertiesName1(DataType1 p)
{
PropertiesName1=p;
}
....
//通过getter方法获取属性值
public DataType1 getPropertiesName1()
{
return PropertiesName1;
}
....
//其他方法的定义
//注意,在类的定义中,不要使用System.out.println()语句,如果需要输出,把值返回给调用方再输出
}
三、对象的声明和实例化
提示:类的使用必须依靠实例化的对象;
1、声明的同时实例化
类名称 对象名称 = new 类名称() ;
2、先声明一个对象,之后再实例化对象
|- 类名称 对象名称=null; //声明一个对象,但是此对象无法使用,因为无具体指向的堆空间
|- 对象名称=new 类名称(参数列表); //实例化该对象
3、提示:不管任何情况下,只要是调用了关键字new,则表示开辟新的堆内存空间
4、在类的操作中,所有的对象名称放在了栈空间中,而对象的具体属性内容放在了堆空间中,而所有的方法代码则放在了全局代码区;
C 没有名字的对象;
只使用一次的对象可以通过匿名对象的方式完成,一次使用完之后即成为垃圾,等待被G•C回收
例如:new Person("张三",30)
D 一、String类的特殊之处
String类的对象实例化很特殊,可以不调用其构造方法,而采用直接赋值的方式。
这样做的优点最重要的是方便编写使用,也节省内存空间。
二、两个String对象进行比较
两个String对象进行比较不能使用比较运算符“==”,而必须采用String的equals()方法
public boolean equals(String anObject);
三、一个字符串常量就是一个匿名的对象
四、String的对象的内容不可改变,要改变的也只是其内存的重新指向;
五、String类常用的重要方法
1、关于字符和字符串的方法
No. 方法名称 类型 描述
1 public char charAt(int index) 普通 根据下标找到指定的字符
2 public char[] toCharArray() 普通 以字符数组的形式返回全部的字符串内容
3 public String(char[] value) 构造 将全部的字符数组变为字符串
4 public String(char[] value,int offset,int count) 构造 将指定范围的字符数组变为字符串
2、关于字节与字符串的方法
No. 方法名称 类型 描述
1 public byte[] getBytes() 普通 将字符串变为字节数组
2 public String(byte[] bytes) 构造 将字节数组变为字符串
3 public String(byte[] bytes,int offset,int length) 构造 将指定范围的字节数组变为字符串
3、关于判断是否以指定内容开头或者结果
No. 方法名称 类型 描述
1 public boolean startsWith(String prefix) 普通 从第一个位置开始判断是否以指定的内容开头
2 public boolean startsWith(String prefix,int toffset) 普通 从指定的位置开始判断是否以指定的内容开头
3 public boolean endsWith(String suffix) 普通 判断是否以指定的内容结尾
4、关于字符串替换操作的方法
No. 方法名称 类型 描述
1 public String replace(char oldChar,char newChar) 普通 替换指定字符
2 public String replaceAll(String regex,String replacement) 普通 替换指定的字符串
3 public String replaceFirst(String regex,String replacement) 普通 替换第一个满足条件的字符串
5、关于对字符串进行截取操作的相关方法
No. 方法名称 类型 描述
1 public String substring(int beginIndex) 普通 从指定位置开始一直截取到末尾
2 public String substring(int beginIndex,int endIndex) 普通 截取指定范围的字符串
6、关于讲字符串进行拆分的方法
No. 方法名称 类型 描述
1 public String[] split(String regex) 普通 按照指定的字符串拆分
2 public String[] split(String regex,int limit) 普通 拆分字符串,并指定拆分的个数
7、关于在字符串中实现查找的方法
No. 方法名称 类型 描述
1 public boolean contains(String s) 普通 返回一个字符串是否存在
2 public int indexOf(int ch) 普通 从头向尾查找指定的字符是否存在,char int,如果存在则返回位置,如果不存在则返回“-1”。
3 public int indexOf(int ch,int fromIndex) 普通 从指定位置向后查找指定的字符是否存在,char int,如果存在则返回位置,如果不存在则返回“-1”。
4 public int indexOf(String str) 普通 从头向尾查找指定的字符串是否存在,如果存在则返回位置,如果不存在则返回“-1”。
5 public int indexOf(String str,int fromIndex) 普通 从指定位置向后查找字符串是否存在,如果存在则返回位置,如果不存在则返回“-1”。
6 public int lastIndexOf(int ch) 普通 从字符串的最后向前查找,指定的字符是否存在,如果存在则返回位置,如果不存在则返回“-1”。
7 public int lastIndexOf(int ch,int fromIndex) 普通 从字符串的指定的位置向前查找,指定的字符是否存在,如果存在则返回位置,如果不存在则返回“-1”。
8 public int lastIndexOf(String str) 普通 从字符串的最后向前查找,指定的字符串是否存在,如果存在则返回位置,如果不存在则返回“-1”。
9 public int lastIndexOf(String str,int fromIndex) 普通 从字符串的指定的位置向前查找,指定的字符串是否存在,如果存在则返回位置,如果不存在则返回“-1”。
8、关于字符串的其他操作
No. 方法名称 类型 描述
1 public boolean isEmpty() 普通 判断字符串是否为空,指的是内容为空“""”
2 public int length() 普通 取得字符串的长度
3 public String toLowerCase() 普通 把字符串中的字母转小写
4 public String toUpperCase() 普通 把字符串中的字母转大写
5 public String trim() 普通 去掉字符串中开头和结尾的空格,中间的空格不去
6 public String concat(String str) 普通 实现字符串连接操作
E 1、类对象是按引用传递的,对形参对象属性的修改,会间接影响实参对象的属性值;
2、String对象作为参数传递时,形参的修改不会影响实参,因为对于String对象的字符串内容不可以改变,改变的只是其内存指向,所以形参对象的重新指向不会影响实参对象的指向。
3、但是如果一个引用对象作为参数,而对形参的字符串类型的属性进行修改,那是会影响实参的该字符串类型的属性的。
F 1、调用类中的属性
如果在类中需要明确指出操作的是本类中的属性,那么就需要通过this.属性名的方式,否则会发生使用错误
2、调用本类中的普通方法
加与不加this效果是一样的
3、调用本类中的构造方法
使用this(【参数】)的形式
使用以上的语法有两点注意:
(1)使用this调用构造方法的语句只能出现在构造方法的首行
(2)使用this调用其他构造方法的时候只少保证有一个构造方法没有使用this()调用,作为调用的出口
总之一句话:this表示当前的对象
G 接收本类对象的引用,只用于对本类对象的比较才用。
这样做的目的是直接可以访问本类的私有属性,方便代码的编写。
H
I
J
K
备注:
A 现在要求设计一个表示学生的类,里面有学生的三项成绩:计算机成绩、数学成绩、英语成绩
要求可以求总分、平均分、最高、最低分,并且可以输出一个学生的完整信息。
个人收获:
1.一个java程序必须包含一个主类(即包含主方法的类,这是程序运行的入口点)
2.在非主类的定义中不要包含System.out.println()语句,如果需要输出,把值返回给调用方再输出
3.在编写构造方法的时候注意保留无参无操作语句的构造方法
4.所有的属性必须封装
5.在具体方案的设计之前,最好给出类图
类图的定义结构如下:
类名称
属性名称
方法名称
其中类名称就直接写:如Student
属性名称,要按照一个标准格式编写:修饰符 属性名称 : 属性类型。
|- private的修饰符使用“-”表示:
|- public的修饰符使用“+”表示:
例如:private String name:-name:String
方法名称,也要按照一个标准的格式编写:修饰符方法名称(参数名称:参数类型):返回值类型。
例如:public void setName(String s):+setName(s:String):void
可以使用Sysbase的PowerDesigner工具,根据向导进行类图的手工设计;
如果编写代码比较熟悉,也可以直接编写代码,保存成*.java文件,然后通过PowerDesigner工具文件菜单下的命令选择Java语言,并添加该*.java文件转换成类图;
案例名称:
B 判断一个给定的email地址是否正确,现在只判断是否存在“@”和“.”
个人收获:
1.不要在主方法中直接写代码,具有某个特定功能的代码可以组装成一个方法
2.要考虑一些问题的隐含条件,例如@应该在 . 之前
3.在定义判断某些现象的方法时,把结果返回给调用方处理,不要直接输出
案例名称:
C 给出一个字符串:
• TOM:89|JERRY:79|TONY:99
• 将其转换成如下的形式输出:
|- TOM 89
|- JERRY 79
|- TONY 99
个人收获:
我的答案:
public class Test2{
public static void main(String args[])
{
String str="TOM:89|JERRY:79|TONY:99";
String str1=(str.replaceAll(":","-->")).replace('|','\n');
String str2[]=str1.split("\n");
for(int i=0;i<str2.length;i++)
{
System.out.println("|- "+str2[i]);
}
}
}
老师的答案:
public class ExecDemo02{
public static void main(String args[]){
String str = "TOM:89|JERRY:79|TONY:99" ;
String s1[] = str.split("\\|") ;
for(int i=0;i<s1.length;i++){
String s2[] = s1[i].split(":") ;
System.out.println(s2[0] + " --> " + s2[1]) ;
}
}
}
采用了转义字符,因为“|”是个逻辑运算符
案例名称:
D 设计类实现:一个人有一本书,一本书属于一个人
个人收获:
1、可以从Oracle数据库设计表的思路中获得灵感
2、先设计实体类,再考虑之间的关系表示
3、一对一的关系,只要在两个类中分别加上对方类型的数据成员即可。
class Person{
private String name ;
private int age ;
private Book book ; // 一个人有一本书
public Person(){}
public Person(String n,int a){
this.setName(n) ;
this.setAge(a) ;
}
public void setBook(Book b){
book = b ;
}
public Book getBook(){
return book ;
}
public void setName(String n){
name = n ;
}
public void setAge(int a){
age = a ;
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
};
class Book{
private String title ;
private Person person ; // 一本属于一个人
public Book(){}
public Book(String t){
this.setTitle(t) ;
}
public void setPerson(Person p){
person = p ;
}
public Person getPerson(){
return person ;
}
public void setTitle(String t){
title = t ;
}
public String getTitle(){
return title ;
}
};
案例名称:
E 进一步延伸:一个人有一本书,一本书属于一个人,一个人还会有一个孩子,一个孩子也会有一本书。
个人收获:
还是先找实体类,并且能准确找对实体类,比如此处,实体类只有人和书
注意:孩子首先是属于人这一类,然后人这个类会具有孩子这个属性,所以在原来类中再增加一个Person类的child成员即可。
class Person{
private String name ;
private int age ;
private Book book ; // 一个人有一本书
private Person child ;
};
今天的问题;
A 当编译完成之后,运行java 类名命令的时候,报错找不到指定的类
解决方法:
set classpath=.
修改classpath值到当前路径。
今天下午上课的时候,有一段时间很困,几次差点趴下,不过还好,坚持过来了,从明天开始中午还是需要午休一会儿,来保证下午的上课效率。
今天学的内容很多,很杂,需要记住的东西比较多,这还需要多花时间去巩固。
对于内存分配问题,之前在学习c++的数组动态内存分配的时候接触过,所以理解起来还是比较容易的。不过要做到像李老师说的那样立马在脑中构成一个栈--堆关系图,对于稍微复杂的关系的时候,就有点困难,这个还需要多多练习。
可能受到以前一直熟悉的面向过程的编程思路的影响,很多时候,很难立马转向面向对象的考虑。应该注意培养这方面的习惯。这个问题,仅仅靠学习一些面向对象的概念和知识点是不够的,需要多做练习,来锻炼思路,从思想上转变过来。
当编译完成之后,运行java 类名命令的时候,报错找不到指定的类
解决方法:
set classpath=.
修改classpath值到当前路径。
3月25日,Java开始第二天了,也是老师说的正题,记得3月24日,李兴华老师讲解的真是太辛苦了,帮助我们大家一起复习到了8点多,不得不佩服老师的敬业精神。
今天开始讲解面向对象部分了,开始学习了。
今天所讲的知识点
A 面向对象的特性
B 类与对象的关系及其定义格式(属性、构造方法、setter方法、getter方法、其他普通方法)
C 匿名对象
D String类及其相关的方法
E 引用传递问题
F this关键字
G 接收本类的引用
我对知识点的理解
A 面向对象中有三大特征:
• 封装性:除了通过特定的方法之外,不可以直接访问其中的属性
• 继承性:将其他的功能继承下来继续发展
• 多态性:对父类不同的继承就是多态
B 一、类与对象的关系
1、类是一个共性的产物,是一个抽象的定义,而对象,是一个个性的产物,是一个具体的个体。
2、类必须通过对象才可以使用,而对象的所有特征和操作都必须在类中定义。
3、类由属性和方法组成:
• 属性:描述的是静态特征
• 方法:描述的是动态特征,是某类对象具有的行为或者功能。例如:说话、吃饭、唱歌、睡觉
二、类的定义格式
class ClassName
{
//在开发中必须对属性进行封装
//采用private关键字,那么属性值就只能通过setter及getter方法设置和取得
private DataType1 PropertiesName1;
......
//一个类中至少要有一个构造方法
//构造方法的名字必须和类名一致,并且不可以有返回值类型,而且必须是public权限
//无参构造方法,如果没有其他的构造方法,此方法可以省略定义,JAVA会自动生成
//如果有其他的构造方法,那么无参构造方法需要自己写,JAVA不会自动生成
//一般类定义中都要有一个无参无操作的构造方法,方便对象的声明
public ClassName(){}
//可以定义其他的构造方法,即重载构造方法,这样方便实现各种实例化对象
public ClassName(参数列表)
{
//可以调用本类中的this.setter方法进行属性设置
//因为在本类中,所以也可以直接对属性进行赋值
设置属性的语句;
}
//通过setter方法对属性进行设置
//在设置属性值的时候,最好考虑是否需要检查属性值的合理性和合法性
public void setPropertiesName1(DataType1 p)
{
PropertiesName1=p;
}
....
//通过getter方法获取属性值
public DataType1 getPropertiesName1()
{
return PropertiesName1;
}
....
//其他方法的定义
//注意,在类的定义中,不要使用System.out.println()语句,如果需要输出,把值返回给调用方再输出
}
三、对象的声明和实例化
提示:类的使用必须依靠实例化的对象;
1、声明的同时实例化
类名称 对象名称 = new 类名称() ;
2、先声明一个对象,之后再实例化对象
|- 类名称 对象名称=null; //声明一个对象,但是此对象无法使用,因为无具体指向的堆空间
|- 对象名称=new 类名称(参数列表); //实例化该对象
3、提示:不管任何情况下,只要是调用了关键字new,则表示开辟新的堆内存空间
4、在类的操作中,所有的对象名称放在了栈空间中,而对象的具体属性内容放在了堆空间中,而所有的方法代码则放在了全局代码区;
C 没有名字的对象;
只使用一次的对象可以通过匿名对象的方式完成,一次使用完之后即成为垃圾,等待被G•C回收
例如:new Person("张三",30)
D 一、String类的特殊之处
String类的对象实例化很特殊,可以不调用其构造方法,而采用直接赋值的方式。
这样做的优点最重要的是方便编写使用,也节省内存空间。
二、两个String对象进行比较
两个String对象进行比较不能使用比较运算符“==”,而必须采用String的equals()方法
public boolean equals(String anObject);
三、一个字符串常量就是一个匿名的对象
四、String的对象的内容不可改变,要改变的也只是其内存的重新指向;
五、String类常用的重要方法
1、关于字符和字符串的方法
No. 方法名称 类型 描述
1 public char charAt(int index) 普通 根据下标找到指定的字符
2 public char[] toCharArray() 普通 以字符数组的形式返回全部的字符串内容
3 public String(char[] value) 构造 将全部的字符数组变为字符串
4 public String(char[] value,int offset,int count) 构造 将指定范围的字符数组变为字符串
2、关于字节与字符串的方法
No. 方法名称 类型 描述
1 public byte[] getBytes() 普通 将字符串变为字节数组
2 public String(byte[] bytes) 构造 将字节数组变为字符串
3 public String(byte[] bytes,int offset,int length) 构造 将指定范围的字节数组变为字符串
3、关于判断是否以指定内容开头或者结果
No. 方法名称 类型 描述
1 public boolean startsWith(String prefix) 普通 从第一个位置开始判断是否以指定的内容开头
2 public boolean startsWith(String prefix,int toffset) 普通 从指定的位置开始判断是否以指定的内容开头
3 public boolean endsWith(String suffix) 普通 判断是否以指定的内容结尾
4、关于字符串替换操作的方法
No. 方法名称 类型 描述
1 public String replace(char oldChar,char newChar) 普通 替换指定字符
2 public String replaceAll(String regex,String replacement) 普通 替换指定的字符串
3 public String replaceFirst(String regex,String replacement) 普通 替换第一个满足条件的字符串
5、关于对字符串进行截取操作的相关方法
No. 方法名称 类型 描述
1 public String substring(int beginIndex) 普通 从指定位置开始一直截取到末尾
2 public String substring(int beginIndex,int endIndex) 普通 截取指定范围的字符串
6、关于讲字符串进行拆分的方法
No. 方法名称 类型 描述
1 public String[] split(String regex) 普通 按照指定的字符串拆分
2 public String[] split(String regex,int limit) 普通 拆分字符串,并指定拆分的个数
7、关于在字符串中实现查找的方法
No. 方法名称 类型 描述
1 public boolean contains(String s) 普通 返回一个字符串是否存在
2 public int indexOf(int ch) 普通 从头向尾查找指定的字符是否存在,char int,如果存在则返回位置,如果不存在则返回“-1”。
3 public int indexOf(int ch,int fromIndex) 普通 从指定位置向后查找指定的字符是否存在,char int,如果存在则返回位置,如果不存在则返回“-1”。
4 public int indexOf(String str) 普通 从头向尾查找指定的字符串是否存在,如果存在则返回位置,如果不存在则返回“-1”。
5 public int indexOf(String str,int fromIndex) 普通 从指定位置向后查找字符串是否存在,如果存在则返回位置,如果不存在则返回“-1”。
6 public int lastIndexOf(int ch) 普通 从字符串的最后向前查找,指定的字符是否存在,如果存在则返回位置,如果不存在则返回“-1”。
7 public int lastIndexOf(int ch,int fromIndex) 普通 从字符串的指定的位置向前查找,指定的字符是否存在,如果存在则返回位置,如果不存在则返回“-1”。
8 public int lastIndexOf(String str) 普通 从字符串的最后向前查找,指定的字符串是否存在,如果存在则返回位置,如果不存在则返回“-1”。
9 public int lastIndexOf(String str,int fromIndex) 普通 从字符串的指定的位置向前查找,指定的字符串是否存在,如果存在则返回位置,如果不存在则返回“-1”。
8、关于字符串的其他操作
No. 方法名称 类型 描述
1 public boolean isEmpty() 普通 判断字符串是否为空,指的是内容为空“""”
2 public int length() 普通 取得字符串的长度
3 public String toLowerCase() 普通 把字符串中的字母转小写
4 public String toUpperCase() 普通 把字符串中的字母转大写
5 public String trim() 普通 去掉字符串中开头和结尾的空格,中间的空格不去
6 public String concat(String str) 普通 实现字符串连接操作
E 1、类对象是按引用传递的,对形参对象属性的修改,会间接影响实参对象的属性值;
2、String对象作为参数传递时,形参的修改不会影响实参,因为对于String对象的字符串内容不可以改变,改变的只是其内存指向,所以形参对象的重新指向不会影响实参对象的指向。
3、但是如果一个引用对象作为参数,而对形参的字符串类型的属性进行修改,那是会影响实参的该字符串类型的属性的。
F 1、调用类中的属性
如果在类中需要明确指出操作的是本类中的属性,那么就需要通过this.属性名的方式,否则会发生使用错误
2、调用本类中的普通方法
加与不加this效果是一样的
3、调用本类中的构造方法
使用this(【参数】)的形式
使用以上的语法有两点注意:
(1)使用this调用构造方法的语句只能出现在构造方法的首行
(2)使用this调用其他构造方法的时候只少保证有一个构造方法没有使用this()调用,作为调用的出口
总之一句话:this表示当前的对象
G 接收本类对象的引用,只用于对本类对象的比较才用。
这样做的目的是直接可以访问本类的私有属性,方便代码的编写。
H
I
J
K
备注:
A 现在要求设计一个表示学生的类,里面有学生的三项成绩:计算机成绩、数学成绩、英语成绩
要求可以求总分、平均分、最高、最低分,并且可以输出一个学生的完整信息。
个人收获:
1.一个java程序必须包含一个主类(即包含主方法的类,这是程序运行的入口点)
2.在非主类的定义中不要包含System.out.println()语句,如果需要输出,把值返回给调用方再输出
3.在编写构造方法的时候注意保留无参无操作语句的构造方法
4.所有的属性必须封装
5.在具体方案的设计之前,最好给出类图
类图的定义结构如下:
类名称
属性名称
方法名称
其中类名称就直接写:如Student
属性名称,要按照一个标准格式编写:修饰符 属性名称 : 属性类型。
|- private的修饰符使用“-”表示:
|- public的修饰符使用“+”表示:
例如:private String name:-name:String
方法名称,也要按照一个标准的格式编写:修饰符方法名称(参数名称:参数类型):返回值类型。
例如:public void setName(String s):+setName(s:String):void
可以使用Sysbase的PowerDesigner工具,根据向导进行类图的手工设计;
如果编写代码比较熟悉,也可以直接编写代码,保存成*.java文件,然后通过PowerDesigner工具文件菜单下的命令选择Java语言,并添加该*.java文件转换成类图;
案例名称:
B 判断一个给定的email地址是否正确,现在只判断是否存在“@”和“.”
个人收获:
1.不要在主方法中直接写代码,具有某个特定功能的代码可以组装成一个方法
2.要考虑一些问题的隐含条件,例如@应该在 . 之前
3.在定义判断某些现象的方法时,把结果返回给调用方处理,不要直接输出
案例名称:
C 给出一个字符串:
• TOM:89|JERRY:79|TONY:99
• 将其转换成如下的形式输出:
|- TOM 89
|- JERRY 79
|- TONY 99
个人收获:
我的答案:
public class Test2{
public static void main(String args[])
{
String str="TOM:89|JERRY:79|TONY:99";
String str1=(str.replaceAll(":","-->")).replace('|','\n');
String str2[]=str1.split("\n");
for(int i=0;i<str2.length;i++)
{
System.out.println("|- "+str2[i]);
}
}
}
老师的答案:
public class ExecDemo02{
public static void main(String args[]){
String str = "TOM:89|JERRY:79|TONY:99" ;
String s1[] = str.split("\\|") ;
for(int i=0;i<s1.length;i++){
String s2[] = s1[i].split(":") ;
System.out.println(s2[0] + " --> " + s2[1]) ;
}
}
}
采用了转义字符,因为“|”是个逻辑运算符
案例名称:
D 设计类实现:一个人有一本书,一本书属于一个人
个人收获:
1、可以从Oracle数据库设计表的思路中获得灵感
2、先设计实体类,再考虑之间的关系表示
3、一对一的关系,只要在两个类中分别加上对方类型的数据成员即可。
class Person{
private String name ;
private int age ;
private Book book ; // 一个人有一本书
public Person(){}
public Person(String n,int a){
this.setName(n) ;
this.setAge(a) ;
}
public void setBook(Book b){
book = b ;
}
public Book getBook(){
return book ;
}
public void setName(String n){
name = n ;
}
public void setAge(int a){
age = a ;
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
};
class Book{
private String title ;
private Person person ; // 一本属于一个人
public Book(){}
public Book(String t){
this.setTitle(t) ;
}
public void setPerson(Person p){
person = p ;
}
public Person getPerson(){
return person ;
}
public void setTitle(String t){
title = t ;
}
public String getTitle(){
return title ;
}
};
案例名称:
E 进一步延伸:一个人有一本书,一本书属于一个人,一个人还会有一个孩子,一个孩子也会有一本书。
个人收获:
还是先找实体类,并且能准确找对实体类,比如此处,实体类只有人和书
注意:孩子首先是属于人这一类,然后人这个类会具有孩子这个属性,所以在原来类中再增加一个Person类的child成员即可。
class Person{
private String name ;
private int age ;
private Book book ; // 一个人有一本书
private Person child ;
};
今天的问题;
A 当编译完成之后,运行java 类名命令的时候,报错找不到指定的类
解决方法:
set classpath=.
修改classpath值到当前路径。
今天下午上课的时候,有一段时间很困,几次差点趴下,不过还好,坚持过来了,从明天开始中午还是需要午休一会儿,来保证下午的上课效率。
今天学的内容很多,很杂,需要记住的东西比较多,这还需要多花时间去巩固。
对于内存分配问题,之前在学习c++的数组动态内存分配的时候接触过,所以理解起来还是比较容易的。不过要做到像李老师说的那样立马在脑中构成一个栈--堆关系图,对于稍微复杂的关系的时候,就有点困难,这个还需要多多练习。
可能受到以前一直熟悉的面向过程的编程思路的影响,很多时候,很难立马转向面向对象的考虑。应该注意培养这方面的习惯。这个问题,仅仅靠学习一些面向对象的概念和知识点是不够的,需要多做练习,来锻炼思路,从思想上转变过来。
本文介绍了Java面向对象的基本概念,包括类与对象的关系、封装、继承和多态等特性。同时详细解析了String类的特性和相关方法,以及类对象的引用传递问题。
3432

被折叠的 条评论
为什么被折叠?



