课程总结
一.认识JAVA
(1)以前对java一点认识都没有,通过书本简单的了解了java的发展过程,还有他的开发工具JDK的发展历程,了解到java的开发放心,java语言的特点,可移植性、面向对象、解释型、多线程处理能力、安全性。
Java程序的运行机制和Java虚拟机,Java中所有程序都是在JVM上运行的,所有的class文件都是在JVM上运行。知道如何搭建Java开发环境,知道JDK的安装与配置,实现了第一个Java程序,了解到了classpath属性的作用,path是操作系统的环境属性,指的是可以执行命令的程序路径。classpath是所有*.class文件执行的路径,Java命令执行时将利用此路径加载所需要的*.class文件
知道Java程序如何注释,在要注释的内容开头用/*标明,结尾用/*标明,认识Java中的标识符,标识符不能以数字开头,也不能是Java中的保留关键词,了解到了Java当中的关键词,变量跟常量的声明
二.面向对象的基本概念
(1)对于面向对象的程序设计有三个主要特征:封装性,继承性,多态性。
封装性
为属性封装:private 属性类型 属性名称;
为方法封装:private 方法返回值 方法名称(参数列表){}
构造方法
1.构造方法的名称必须与类名称一致
2.构造方法的声明处不能有任何返回值类型的声明
3.不能再构造方法中使用return返回一个值
构造方法定义格式
class 类名称
{
访问权限 类名称 (类型1 参数 1,类型2 参数 2, ......)
{
程序语句;
........ //构造方法没有返回值
}
}
(2)类与对象的关系
类:定义出一个基本的模板,代表着一个共性。对象:每一个具体的人,根据不同给予不同的姓名,代表一个个性。定义一个类,要声明成员变量(属性),然后定义方法的内容。当定义了一个类后,要使用这个类,则需要通过对象。一定要记住如果一个对象要被使用,则对象需要被实例化。在开发中,每个类可以产生多个实例化对象,只要在实例化对象时使用了关键字new,那么就表示开辟新的堆内存空间,而每一个实例化对象都将会占据自己的堆,栈内存。
(3)当我们创建一个类后,这一类中就会有多个对象,对象在可以被使用之前必须要被正确地实例化。
实例化作用:
1.检查类是否加载
2.分配父类型空间, 按照属性分配空间, 属性自动初始化为"零"
这两个作用是我所知道的,当然我说的可能不全面,希望以后能补充完整
(4)为什么私有属性要使用set跟get方法设置和访问?
将数据与行为进行分离,体现了对象的封装性,封装就是将属性私有化,提供公有的方法访问私有的属性。我个人理解就是每个人都有特定的名字跟特定的性格,不能随意修改,只有通过特定的方法才能修改,所以我们将成员变量声明为private,再通过 public的方法来对这个变量进行访问
(5)我放过一个经常的错误就是,前面定义类属性的类型的时候一定要保证后面调用这个类的属性,类型一定要保证跟前面保证一致
举个例子:
private double math;
public float getMath()
{
return math;
}
这样是不行的,前面用double,后面用float,这种数据类型的转换是不被认可的。
三.java中String类中常用的方法
(1)字符串与字符数组的转换
用toCharArray()方法将字符串变为字符数组
String str = "abcdef"; char c[] = str.tocharArray();
(2)从字符串中取出指定位置的字符
String str = "abcdef" System.out.println(str.charAt(x)); //x为第几个字符
(3)字符串与byte数组的转换
String str = "abcdef";
byte c[] = str.getBytes();
(4)取得一个字符串的长度
Srting str = "abcdef"; System.out.print(str.length);
(5)查找一个字符串是否存在
String str = "abcdef"; System.out.print(str.indexOf("i")); //i为字符,即查到指定字符位置
String str = "abcdef";
if(str.contains("i"))
{
System.out.print("存在这个字符");
}
(6)去掉左右空格
String str = " abcdef "; System.out.print(str.tirm());
(7)字符串截取
String str = "abcdef"; System.out.print(str.substring(i)); //i表示从那个位置开始截取,为数字 System.out.print(str.substring(0,5)); //表示从0-5截取
(8)按照指定的字符串拆分字符串
String str = "abcdef"; String c[] = str.split("i"); //i表示要拆分的内容 for(int i=0;i<c.length;i++) //输出拆分的内容 { System.out.println(c[i]); }
(9)字符串大小写转换
”要转换的内容“.toUpperCase; 小写转换大写
”要转换的内容“.toLowerCase; 大写转换小写
(10)判断是否以指定的字符串开头或者结尾
if(str.startsWith("i")) //i为指定的内容 { System.out.println("以i结尾") } if(str.endsWith("i")) { System.out.println("以i开头"); }
(11)不区分大小写进行字符串比较
equals //这个比较是区分大小写的 equalslgnoreCase //这个比较是不区分大小写的
(12)将一个指定的字符串,替换成其他的字符串
String str = "abcdef"; String newstr = str.replaceAll("c","d"); //将所有的c换成d System.out.println(newstr);
四.继承
(1)类的继承格式
class 父类{} //定义父类 class 子类 extends 父类{} //使用extends关键字实现继承
通过子类继承父类
只准多层继承不能多重继承,在java中只准单继承,不能使用多重继承,即:一个子类只能继承一个父类。
继承注意事项
子类是不能直接访问父类的私有成员的,但是子类可以调用父类中的非私有方法,但是不能直接调用父类中的私有成员。子类直接访问父类的私有属性受限制,而要通过setter()或者getter()调用,就可以访问了
(2)继承的进一步研究
序号 | 区别点 | 重载 | 覆写 |
1 | 单词 | Overloading | Overriding |
2 | 定义 |
方法名称相同,参数的类型 或个数不同 对权限没有要求 |
方法名称,参数的类型,返回值类型全部相同 被覆写的方法不能拥有更严格的权限 |
3 | 范围 | 发生在一个类中 | 发生在继承类中 |
序号 | 区别点 | this | super |
1 | 属性访问 | 访问本类中的属性,如果本类中没有此属性则中父类中继续查找 | 访问父类中的属性 |
2 | 方法 | 访问本类中的方法,如果本类中没有此方法,则从父类中查找 | 直接访问父类的方法 |
3 | 调用参数 | 调用本类的构造,必须放在构造方法的首行 | 调用父类构造,必须放在子类构造方法的首行 |
4 | 特殊 | 表示当前对象 | 无此概念 |
(3)final关键词
使用final声明的类不能又子类
使用final声明的方法不能被子类调用
使用final声明的变量即成为常量,常量不可以修改
(4)抽象类的基本概念
包含一个抽象方法的类必须是抽象类
抽象类和抽象方法都要使用abstract关键声明:
抽象方法只需要声明而不需要实现
抽象类必须被子类继承,子类(如果不是抽象类)必须覆写抽象类中全部的抽象方法
五.
(一)在Java中可以使用instanceof来判断一个对象到底属于哪个类,对象instanceof类返回boolean类型
(二)接口可以理解为一种特殊的类,里面全部是由全局变量和公共的抽象方法所组成;与抽象类一样,接口要使用也必须通过子类,
(三)一个子类可以同时继承抽象类和实现接口。
(四)对象向上转型: 父类 子类对象 = 子类实例; 对象向下转型: 子类 子类对象 = (子类)父类实例;
(五)允许一个抽象类实现多个接口。一个接口是不允许继承抽象类的。允许一个接口继承多个接口。一个接口不能继承一个抽象类,但是可以通过extends关键字同时继承多个接口,实现接口的多继承。
六.
1.抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
2.抽象类要被子类继承,接口要被类实现。
3.接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
4.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
5.抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
6.抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。
7.抽象类里可以没有抽象方法
8.如果一个类里有抽象方法,那么这个类只能是抽象类
9.抽象方法要被实现,所以不能是静态的,也不能是私有的。
10.接口可继承接口,并可多继承接口,但类只能单根继承。
区别点 | 抽象类 | j接口 |
定义 | 包含一个抽象方法的类 | 抽象方法和全局变量 |
组成 | 构造方法,抽象方法普通方法,常量,变量 | 常量,抽象方法 |
使用 | 子类继承抽象类 | 子类实现接口 |
关系 | 抽象类可以实现多个接口 | 接口不能继承抽象类,但可以继承多个接口 |
常见设计模式 | 模板设计 | 工厂设计,代理设计 |
对象 | 都通过对象的多态性产生实例化 | |
局限 | 抽象类有单继承的局限 | 接口没有单继承的局限 |
实际 | 作为一个模板 | 是作为一个标准或是表达一种能力 |
选择 | 如果抽象类和接口都可以使用,有限使用接口,避免单继承的局限 | |
特殊 | 一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类 |
七
线程操作的主要方法
1.在Thread类中,可以通过 getname() 方法取得线程的名称,通过 setname()方法设置线程的名称
2.判断线程是否启动
因为线程通过Thread类之中的start()方法通知CPU这个线程已经准备好启动,然后就等待分配CPU资源,运行此线程。在Java中可以使用isAlive()方法来测试线程是否已经启动而且还在运行
3.线程的休眠
可以直接使用Thread.sleep()方法即可实现
4.线程的强制运行
可以使用join()方法让一个线程强制运行。在线程强制运行期间 其他线程无法运行,必须等待此线程完成之后才可以继续执行
5.中断线程
当一个线程运行时,另外一个线程可以直接通过interrupt()方法,中断其运行状态
6.线程的优先级
在Java线程操作中,哪个线程优先级高就有可能先被执行 所以可以使用setPriority()方法可以设置一个线程的优先级
7.线程的礼让
使用yield()方法可以将一个线程的操作暂时让给其他线程执行
八
JPanel
方法 | 类型 | 描述 |
public JPanel | 构造 | 创建一个默认的JPanel对象,使用流布局管理器 |
public JPanel(LayoutManager layout) | 构造 | 创建一个指定布局管理器的JPanel对象 |
JSplitPane
JTabbedPane
JScrollpane
JTextComputer
JTextField
JPasswordField
JTextArea
windowListener