——年金波老师上课笔记

Core Java课程笔记2    1

Java面向对象基础    1

面向对象的思想:    1

Java中类的属性和方法的访问控制    6

高级特性    6

Java集合、反射、内部类、异常    8

集合(collection    8

反射:reflection    11

内部类    13

异常(Exception)    15

GUI 图形编程    18

布局实例    19

菜单实例    20

简易时钟    21

多线程    23

java中如何实现线程:    23

普通线程和精灵Deamon线程    24

线程同步    24

 

Java面向对象基础

面向对象的思想:

封装、继承、多态

1.封装:隐藏对象的属性和方法 private

2.继承:对象重用 减少代码冗余 extends

单继承 将父类的属性和方法 继承到子类中

3.多态:同一个类域(存在继承关系的类)的不同对象在调用相同方法的时候表现不同

 

封装:修饰符 public protected private 修饰属性和方法

public :其他类可以任意访问 自己类可以访问

protected:自己访问 子父类之间 相同包下

无:自己访问 相同的包下

class Person{

String name;

}

private 只有自己能访问

 

 

private Person(){

 

}

public static Person newone(){

return new Person();

}

Person p=Person.newone();

单例模式:在整个虚拟机中只有一个类的实例

专门处理日期

java.util.Date 濒临灭绝

java.util.Calendar 不能new

//指向系统当前时间

Calendar cal=Calendar.getInstance()

//获取年份

cal.get(Calendar.YEAR);

//获取月份

cal.get(Calendar.MONTH);

 

extends 后只能有一个父类:

this 表示当前类的实例

this.属性

this.方法(参数)

this();调用构造函数

this(参数):

方法的重载和重写

重载:在一个类内有多个相同(名字上)的方法

参数类型不同。参数个数不同。参数的顺序不同。

 

返回值:返回值是否相同对重载不构成影响

Person{

public void print(){}

public void print(String message){}

public void print(int level){}

}

构造函数也可以重载:

 

 

重写:发生在子类 。重新定义父类中的方法。

方法签名要跟父类相同

方法签名:返回值+方法名+方法参数(个数,顺序,类型 都相同)

super:访问父类中的属性和方法

super.父类属性

super.父类方法(参数)

super()//父类的构造器

super(参数)//调用父类的重载构造器

ch05/Father.java

package ch05;

public class Father{

protected String name;

protected int age;

 

public Father(){}

public Father(String name, int age){

this.name=name;

this.age=age;

}

public void print(){

System.out.println("Name :"+this.name +"\tAge :"+this.age);

}

}

 

ch05/Son.java

package ch05;

import java.u

public class Son extends Father{

public String[]hobby;

public Son(){}

public Son(String name, int age,String hobby []){

super(name,age);

//this.name=name;

//this.age=age;

this.hobby=hobby;

}

public void print(){

super.print();

System.out.println("Hobby:"+this.hobby);

}

 

public static void main(String args[]){

Son son=new Son("briup",1,new String []{"reading","gaming"});

son.print();

}

}

 

方法的参数传递

1.值传递:对于基本的参数类型 值拷贝(把外围的值拷贝到方法内供方法使用,对方法外的变量不构成影响)

mian(){

int a=10;

change(a);

System.out.println(a);

}

static void change(int a){

a=100;

System.out.println(a);

}

先打印出100

后打印出10

2.引用传递:地址值

Person p=new Person("test",18);

change(p);

System.out.println(p.getName());

}

static void change(Person p){

p.setName("briup")

System.out.println(p.getName());

}

 

都打印出briup

 

类的初始化:

静态初始化代码段: static {}

实例初始化代码段: {}

构造方法:

ch05/InitTest.java

package ch05;

public class InitTest{

static {

//jvm装载类的时候调用,无论创建多少个对象,都只会被调用一个。通常用来初始化静态成员变量

System.out.println("Static block is invoked!");

}

 

{

//创建实例之前进行调用,先与构造器

System.out.println("Instance block is invoked!");

}

 

public InitTest(){

System.out.println("Constructor method is invoked!");

}

public static void main(String args[]){

new InitTest();

System.out.println("--------");

new InitTest();

}

}

 

接口:interface 来声明。只允许定义常量 public static final String str="abc")和 空方法(抽象方法,没有实现)

public interface Test {

public void test(String test);

}

接口的作用:用来描述规范,被其他的接口或者类 实现或者继承

具体的类 实现(implements 接口(一个或者多个,多个之间用""分割),必须实现接口内的所有方法

接口 继承(extends) 接口

接口不能被实例化。接口在一定程度上弥补类java的单继承

抽象类:如果一个类没有完全的实现接口中的所有的方法,必须把没有实现的方法声明为抽象方法。。(abstract

如果一个类中有一个抽象方法,那么该类必须被声明为抽象类(public abstract class

功能更普通类是一样,抽象类可以分担子类的一本分功能

 

方法 实例化 创建引用

实体类: 全部实现 可以

抽象类: 部分实现 不可以

接口: 全部不实现      不可以

 

Son son=new Son();

Father son=new Son();

Son s=(Son)son;如果没有就报错:ClassCastingException

因为 Son 继承 Father

Father -> Son

抽象类 -> 继承了抽象类的具体类

接口-> 实现接口的具体类

casting 类型转换,引用或者类类型

向上转换:不需要显示的类型转换

向下转换:要显示的强制类型转换

上:father

下:son

ch05/log.java

ch05/Baselog.java

ch05/SystemLogImoI.java

ch05/FilelogImo.java

ch05/LogTest.java

 

员工管理:

对于员工:crretravelud

DML insert

DDL drop

存放员工的数据结构-queue

 

EmppoyeeDate{ Employee [] emArray;

create();//增加员工

findint id);

update 更新

delete

}

 

Java中类的属性和方法的访问控制

  1. 类没有protectedprivate修饰符
  2. public 修饰的类,可以被其它包中的类访问
  3. 没有被public 修饰的类,不能被其它包中的类访问

可以看到,类中的默认的属性和方法为protected修饰的

 

高级特性

static

1.修饰属性:所有的类的实习共享同一个属性

2.修饰方法:类名.方法名(调用方法)

3.{};用来初始化类的static属性

规则:

static修饰的方法不能访问非static变量(成员变量)

static修饰的方法不能访问非static方法(成员方法)

例:监控程序

监控程序:监控类实例的个数

ch06/InstanceCounter.java

package ch06;

public class InstanceCounter{

public static int count;

//初始化

static{

count=0;

}

 

{

count++;

}

 

public InstanceCounter(){

System.out.println("A new instance is created!");

}

public static void main(String args[]){

Object o1=new InstanceCounter();

Object o2=new InstanceCounter();

o1=null;o2=null;

System.gc();

System.out.println("Instance count:"+count);

}

//重写父类方法。范围不能变小. finalize 回收对象/实例占用的资源

public void finalize(){

count--;

System.out.println("Instance will be revoled by GC!");

}

}

Final修饰符

final:提高程序的健壮性

1.修饰类 该类不能被继承 java.long.String 不能有子类)

2.修饰属性,改属性为常量 (程序运行期间值不能被改变的叫常量) 常量的赋值:在第一次被赋值之后,永远不能改变。常量的命名:全部大写 用下划线分隔 MAX_SIZE

3.修饰方法 该方法不能被重写

StringBuffer

StringBuffer 提高效率

缓存:提高效率

String : 做频繁的字符串连接操作,非常浪费系统空间

String str="abc";

str+="xyz";

str="abcxyz";

 

StringBuffer str=new StringBuffer("abc");

str.append("xyz");

str.toString()->StringBuffer->String;

StringBuilderStringBuffer

StringBuilderStringBuffer 使用方式完全相同

StringBuffer 线程安全

对象的比较

对象的比较:== 对于引用来说比较的地址值 。对于基本类型比较的数值

比较对象的内容:equals方法

Person p1 = new Person("briup",13);

Person p2 = new Person("briup",13);

p1.equals(p2) -> true :内容相同 false ->内容不同

equals的来源:java.long.object ,默认实现相当与== 重写该方法完成自定义的内容比较

public boolean equals(Object obj){

if(obj=null)

return false;

if(this=obj)

return true;

if(this.getClass()!=obj.getClass())

return false;

Person p1=(Person)obj;

return this.getName().equals(p1)&&this.getAge()==p1.getAge();

}

代码覆盖率:测试用例是否可以覆盖(执行)所有代码

Java集合、反射、内部类、异常

集合(collection

管理若干个对象

List:管理重复对象

1.Aarraylist:基于数组的实现

2.LinkedList:基于链表的实现

Set:管理不可重复的对象

1.HashSet:检索快

2.TreeSet:排序(自定义规则)

Map:做检索功能。键值对。key->value

 

例:HashMap:

ch06/ListTest.java

package ch06;

import java.util.*;

public class ListTest{

public static void main(String args[]){

//创建ArrayList

List aList=new ArrayList();

//add 添加

aList.add(new Integer(100));

aList.add(new Boolean(false));

aList.add(new Person("briup",false,1));

aList.add(new Person("briup-999",true,2));

out(aList);

outByIndex(aList);

}

/*

遍历list

*/

public static void out(List list){

Iterator it = list.iterator();

while(it.hasNext()){

Object obj=it.next();

System.out.println(obj);

}

}

public static void outByIndex(List list){

System.out.println("---------------------------------------");

int length=list.size();

for(int i=0;i<length;i++){

Object obj=list.get(i);

System.out.println(obj);

}

}

 

}

 

对集合进行遍历

迭代器:

java.util.Iterator{

boolean hasNext();//判断是否存在下一个元素

Object nest();//取下一个元素

 

}

 

fot(int i=0;i<3;i++){

it.next();

}

Object obj=it.next();

println(obj);

 

List:放置可重复的对象

Set :放置不可重复的对象 有对象的equals方法(返回true)和hashCode方法(返回的int值相等)决定。

HashSet:

TreeSet

 

ch06/SetTest.java

package ch06;

import java.util.*;

public class SetTest{

public static void main(String args[]){

Set set=new HashSet

相关文章:

  • 2021-04-09
  • 2021-04-03
  • 2021-12-15
  • 2021-05-25
  • 2021-05-26
  • 2022-01-07
  • 2022-12-23
  • 2022-01-17
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-03-09
  • 2021-09-21
  • 2022-12-23
相关资源
相似解决方案