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

分享到:
评论

相关推荐

    java jdk 学习笔记

    接下来,回到正题,关于“Java JDK 学习笔记”的知识点,可以从以下几个方面进行梳理: 1. Java JDK简介 JDK是Java Development Kit的缩写,是Java程序设计语言的核心工具包,包含了编译器、运行环境、文档生成器、...

    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内存分配原理的...

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

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

    Java的类—多态(二)实验

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

    新视野大学英语第二册unit TimeconsciousAmericansPPT学习教案.pptx

    【新视野大学英语第二册Unit TimeconsciousAmericans】这篇学习教案主要探讨了美国人的时间观念以及如何在日常生活和工作中高效利用时间。课文分析了美国人对于时间和劳动力的重视,以及这些观念对他们的行为模式...

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

    【代码分享】手把手教你:岩石样本智能识别系统

    本文主要介绍如何使用python的TensorFlow2.0深度学习框架搭建一个:岩石样本的智能识别系统,如果有毕业设计或者课程设计需求的同学可以参考本文。本项目来自于第九届“泰迪杯”数据挖掘...不多废话,直接进入正题!

    Fortran95学习教程

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

Global site tag (gtag.js) - Google Analytics