`
zisefeiniao
  • 浏览: 167497 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

魔乐科技,第二天,java学习,进入正题

阅读更多


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++的数组动态内存分配的时候接触过,所以理解起来还是比较容易的。不过要做到像李老师说的那样立马在脑中构成一个栈--堆关系图,对于稍微复杂的关系的时候,就有点困难,这个还需要多多练习。
可能受到以前一直熟悉的面向过程的编程思路的影响,很多时候,很难立马转向面向对象的考虑。应该注意培养这方面的习惯。这个问题,仅仅靠学习一些面向对象的概念和知识点是不够的,需要多做练习,来锻炼思路,从思想上转变过来。

分享到:
评论

相关推荐

    ACM java 基础

    言 文前声明:本文只谈java用于acm,且不推荐大家把java作为自己的第一语言玩acm;...说了点无关的话,进入正题,在这里你将看到以下内容:1,输入输入,2.,大数/高精度,3,排序,4“STL”,5,其他

    kotlin与java实现混编基础看这篇就够了

    前几年一直关注安卓,想换个方向,奔着移动端大步向前,由于比较懒就一直停留在想法,这不今天勤快点,动手搞了一个基础的java和kotlin混编,和大家总结分享一下。...经过短暂了解学习,我们进入到正题

    hadoop+hive+mapreduce的java例子

    本文主要介绍的就是第二种用户接口,直接进入正题。 1、Hive 安装: 1)hive的安装请参考网上的相关文章,测试时只在hadoop一个节点上安装hive即可。 2)测试数据data文件'\t'分隔: 1 zhangsan 2 lisi 3 ...

    java读取xml文件demo

    java实现的一个读取本地xml文件的例子,进入正题: 需要的包jdom2-2.0.6.jar:下载地址,http://mvnrepository.com/artifact/org.jdom/jdom2 此例子比较简单

    JAVA面试题 对JAVA面试有帮助!

     第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?  第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被...

    java学习之软件开发过程中的各种术语总结

    进入正题我们说一下这几个术语都是什么意思! SRS:软件需求说明书,是指在研究用户要求的基础上,完成可行性分析和投资效益分析以后,由软件工程师或分析员编写的说明书。 HLD:概要设计说明书,编制的目的是说明...

    整合flex和java.pdf

    为一个 Java程序员学习 Flex,关心的就是怎样将 Flex和 Java进行结合交互。带着Java程序 员的思维,一开始学习 Flex 并没有按部就班的学习 Flex 的基础知识,而是想搞清楚 Flex 到 底怎样和 Java 交互的。经过了一个...

    Java内存分配全面浅析

    进入正题前首先要知道的是Java程序运行在JVM(JavaVirtualMachine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的重要性。所以在学习Java内存分配原理的...

    2020秋季计算机组成原理试卷B(正题)答案

    2020秋季计算机组成原理试卷B(正题)答案

    HTTP5 CSS正题解答

    HTTP5 CSS正题解答HTTP5 CSS正题解答HTTP5 CSS正题解答

    JUnit4学习笔记

    JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写。 先简单解释一下什么是Annotation,这个单词一般是翻译成元数据。...废话不多说了,直接进入正题。

    Java的类—多态(二)实验

    随后,我们开始进入今天的正题,那就是三道题的解答!! 其实在此之前我对这三道题题意的理解具有一定的奇异(第二题除外) 第一题: 理解目的:首先我们需要定义一个静态变量,计算人数,那么小朋友具有哪些特点?...

    java8源码-JavaCompile:Javacompile是一个自动增量/全量编译java的api接口应用。包含以下特性:全量编译增量编译

    当然也少不了javac,我想大部分学习java的同学都是从javac来编译开始。 废话不多说,开始说正题。 自动化运维体系就是将一切可以自动化的东西自动化,减少人工干预。 早期我们会经历这样的一个阶段 st=&gt;start: 1....

    EasyExcel是一个快速、简洁、解决大文件内存溢出的java处理Excel工具 .rar

    进入正题如何使用esayexcel写入和解析excel表格,这里就演示一个写入和读取最简单的方式,需要更多方法可以进入官方文档进行查看。 官方文档地址 首先搭建编码环境 1.创建一个maven项目。 2.创建成功之后,点开pom...

    matlab代码转java-gradle-study:学习gradle!

    matlab代码转java :fish:gradle-study DSL介绍(domain specific language) matlab、html、xml等都是dsl语言,领域特定为了解决某一领域的问题。dsl语言的初衷就是为了解决某一特定领域的问题。 groovy介绍 是一种...

    90坦克大战源码java-mxq:万象城

    90坦克大战源码java 前言 作为一个程序员,在工作...好了,这是前期的一些介绍,接下来进入正题,我因为和马老师的关系,也拿到了他们一手的公开课视频资料,并且已经进行相应的上传,这在我的公众号中也有一些展示,但

    Fortran95学习教程

    Fortran95学习教程 第1章 目的是计算 我们这本书描述了一门语言。不幸的是语言很难成为我们的爱好,更何况FORTRAN 语言也无法仿效英语,能够...所以我们不得不在进入正题之前,扯点闲话,看看学习 FORTRAN 的理由何在。

Global site tag (gtag.js) - Google Analytics