public class test {
/**
* @param args
*
* final关键字
*
* final修饰的类无法被继承
* final修饰的方法无法被覆盖
* final修饰的变量无法被第二次赋值
* 在构造方法调用结束之前 手动赋值 不能采用系统默认值
* final修饰的成员变量 一般和static一起用 称为常量 大写
* final 可以修饰实例化的变量 也是只能被赋值一次
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
//final修饰的类无法被继承
//final class A {}
//class B extends A {}
//final修饰的方法无法被覆盖
//class A {
// public final void m1(){}
//
//}
//class B extends A {
// public void m1(){}
//}
//final修饰的变量无法被第二次赋值
//class A{
// public void m1(){
// final int i;
// i=1;
// i=2; //不能重新赋值
// }
//}
public abstract class test {
/**
* @param args
*
*
* 抽象类
* 无法被实例化
* 有构造方法
* 抽象类的构造方法给子类用的
* 抽象类可以定义抽象方法
* 抽象方法必须出现在抽象类中 但是抽象类不一定要有抽象方法
* 非抽象的类继承抽象类 必须将抽象类覆盖 因为A不是抽象类但是继承了抽象类方法 而抽象方法必须出现在抽象类中 所以要将查询类中的抽象方法覆盖 重写
*/
test(){System.out.println("test");}
abstract void m1(); //抽象方法
public static void main(String[] args) {
// TODO Auto-generated method stub
test t=new A(); //多态 抽象类中有构造方法 是给子类用的
}
}
class A extends test{
void m1(){}; //重写父类中的抽象方法
A(){System.out.println("A");}
}
public class test {
/**
* @param args
*
*
* object 的equals 是比较内存地址
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
A a1=new A(1,"A");
A a2=new A(1,"A");
System.out.println(a1.equals(a2));
}
}
class A{
int id;
String name;
public A(int id,String name){
this.id=id;
this.name=name;
}
public boolean equals(Object obj){ // 重写了object的equals方法 比较内容
if(this==obj) return true; //如果内存地址一样返回true
if(obj instanceof A){ //如果obj是 A类型的 则强制类型转换
A a=(A)obj;
if(this.id==a.id && this.name.equals(a.name)){
return true;
}
}
return false;
}
}
public class mainclass {
/**
* @param args
* 接口的目的 :项目分层 开发效率提高 耦合度降低
* 如果一个项目分成两组进行
* 第一组 只需要查看接口A中有需要什么功能 写在A1()中 implement A 实现 作用是打印
* 第二组 只需要查看接口A中有什么功能 直接在main调用就可
*/
public static void main(String[] args) {
//
A a=new A1(); //多态
a.m3();
a.m31();
a.m32();
}
}
/**
* @param args
* 接口:
* public interface 接口名()
* 接口只能出现 常量 和抽象方法
* 接口是完全抽象
* 没有构造方法 无法实例化
* 接口和接口之间可以多继承
* 一个类可以实现多个接口
* 一个类实现接口需要将接口中的所有方法重写 、覆盖
*
*/
public interface test{
//常量必须定义 pubilic static final
public static final String I="i";
int j=1; //接口中 可以省略pubilic static final
public abstract void m1(); //抽象方法必须 pubilc abstract 定义
void m2(); //接口中可以省略pubilc abstract
}
interface A{
void m3(); //需要实现打印
void m31();
void m32();
}
interface B{
void m1();
}
interface C extends A,B{
void m2();
} //一个接口可以继承多个接口
//一个类去实现接口 需要加关键字 implements
//extends 单继承
//implements 多继承 所以写
class Myclass implements B,A{
@Override
public void m3() {
// 一个类实现接口需要将接口中的所有方法重写 、覆盖
System.out.println("m3");
}
@Override
public void m1() {
// 一个类实现接口需要将接口中的所有方法重写 、覆盖
System.out.println("m1");
}
@Override
public void m31() {
// TODO Auto-generated method stub
}
@Override
public void m32() {
// TODO Auto-generated method stub
}
}
class Myclass2 implements C{
@Override
public void m3() {
// 因为C接口继承A B 所以需要重新C A B 的抽象方法
System.out.println("m3");
}
@Override
public void m1() {
//
System.out.println("m1");
}
@Override
public void m2() {
//
System.out.println("m2");
}
@Override
public void m31() {
// TODO Auto-generated method stub
}
@Override
public void m32() {
// TODO Auto-generated method stub
}
}
class A1 implements A{
@Override
public void m3() {
// TODO Auto-generated method stub
System.out.println("A1--m3");
}
@Override
public void m31() {
// TODO Auto-generated method stub
System.out.println("A1--m31");
}
@Override
public void m32() {
// TODO Auto-generated method stub
System.out.println("A1--m32");
}
}
修饰符
访问控制权限
一下可以访问:
public 本类中 同包中 子类 任何地方
protected 本类中 同包中 子类
default 本类中 同包中
private 本类中
Person P=new Person()
P=null //使p成为空指针
System.gc()
class Person{
//重写object中的finalize方法
public void finaliz() throws Throwable{
system.out.pringln(“被回收”)
}
}
打印输出 被回收
运行垃圾回收机制(gc)的时候 会调用finalize
java异常都是类
在异常的对象中会携带一些信息给我们
我们可以通过异常对象把信息取出来
编译异常和运行异常都继承 Exception
编译异常程序员必须对其处理
1.捕捉 try…catch
2.抛出 在方法声明的位置写throws
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class test {
/**
* @param args
*
*
* 异常处理
* throws 谁调用就推给谁
* try catch
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
FileInputStream fis=new FileInputStream("d:/ab.txt");
}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class test2 {
/**
* @param args
* 深入throws
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
m1();
}
public static void m1(){
}
public static void m2(){
}
public static void m3() throws FileNotFoundException{
new FileInputStream("d:/ab.txt");
}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class test3 {
/**
* @param args
*
*
* try catch
*/
public static void main(String[] args) {
// try {
// FileInputStream fis=new FileInputStream("d:/ab.txt"); //可能出现异常的代码
//
// } catch (FileNotFoundException e) {
//
// e.printStackTrace(); //异常处理代码
// }
//
try {
FileInputStream fis=new FileInputStream("d:/ab.txt"); //可能出现异常的代码
fis.read();
} catch (IOException e) { //IOException包含FileNotFoundException
e.printStackTrace(); //异常处理代码
}
}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class test5 {
/**
* @param args
*
*
*try catch finally
*finally 是一定会执行的 只要没有退出JVM
*/
public static void main(String[] args) {
try {
FileInputStream fis=new FileInputStream("d:/ab.txt"); //可能出现异常的代码
} catch (FileNotFoundException e) { //IOException包含FileNotFoundException
// e.printStackTrace(); //比getmess age更详细的报错
String msg=e.getMessage();//异常处理代码
System.out.println(msg);
}finally{
System.out.println("执行");
}
System.out.println(m1());
}
public static int m1(){
int i=10;
try{
return i;
}finally{
i++;
System.out.println("finally="+i);
}
}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class test4 {
/**
* @param args
*
*
* getMessage
* printStackTrace
*/
public static void main(String[] args) {
try {
FileInputStream fis=new FileInputStream("d:/ab.txt"); //可能出现异常的代码
} catch (FileNotFoundException e) { //IOException包含FileNotFoundException
// e.printStackTrace(); //比getmess age更详细的报错
String msg=e.getMessage();//异常处理代码
System.out.println(msg);
}
}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class IllegalNameExceptinon extends Exception{
public IllegalNameExceptinon(){}
public IllegalNameExceptinon(String msg){ super(msg);}
}
class m1{
/**
* @param args
* 自定义异常
*
*/
public static void main(String[] args) {
try {
m2 m=new m2("123456");
} catch (IllegalNameExceptinon e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class m2{
m2(String str) throws IllegalNameExceptinon{
if(str.length()<6){
// IllegalNameExceptinon e =new IllegalNameExceptinon("同户名长度少6位"); //创建异常
// throw e; //手动抛出异常
throw new IllegalNameExceptinon("同户名长度少6位");
}
System.out.println("成功");
}
}
extends继承 泛化
类和类 接口和接口 实线空心箭头指向父类
interface implement接口 实现
虚线空心箭头指向父接口
关联 同一等级 同一层次 盆友和我
实线的箭头
在当前类中含有其他类的引用
public class me{
Friend f;
}
public class Friend{
}
依赖 虚线箭头
class A{
void m1{
B b=new B() //依赖关系 局部变量
}
}
class B{
}
聚合 不在同一等级 整体和部分 汽车和轮胎
空心菱形
合成 和聚合相似 整体和部分紧密相连 人和四肢
实心菱形
public class test {
/**
* @param args
*
* 数组
* 数组一旦创建长度无法改变
* System.arraycopy(src, srcPos, dest, destPos, length) 系统提供的数组拷贝
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//
// int[] i={1,2,3}; //静态声明数组
// int i1[]={1,2,3};
// int[] i2= new int[3]; //动态声明数组 默认值0
// System.out.println(i1[0]);
// int i2[]=new int[2];
int[] a={1,11,111,1111};
int[] j={2,22,222,2222};
System.arraycopy(a, 0, j, 2, 1);
for(int i=0;i<j.length;i++){System.out.println(j[i]);}
}
}
import com.sun.org.apache.xpath.internal.operations.Equals;
public class test2 {
/**
* @param args
*
* main方法中的args 是用来接收命令行参数的
java array abc def aaa //以空格隔开
输出三个字符元素
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
if(args.length!=2){
System.out.println("需要输入 java test2 用户名 密码");
}else if("cwz".equals(args[0]) && "123".equals(args[1])){ //"cwz".equals(args[0] 这种方式可以避免空指针异常
System.out.println(args[0]+"欢迎!");
}else{
System.out.println("用户名密码错误");
}
}
}
import java.util.Arrays;
public class test3 {
/**
* @param args
* 数组工具类
* Arrays
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]={2,4,1,5,3};
Arrays.sort(a); //对数组进行排序
System.out.println(Arrays.binarySearch(a, 3)); //对数组进行下标查找
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
}
public class SException extends Exception {
public SException(){}
public SException(String msg){ super(msg);}
}
//栈:先进后出
public class Stack {
Object[] elements; //使用数组存储数据
int index;//栈的元素帧
Stack(){ this(5); } //调用有参构造方法
Stack(int max){ elements = new Object[max];} //初始化栈容量5
public void push(Object element) throws SException{ //压栈方法
if(index==elements.length){
throw new SException("满了");
}
elements[index++] = element;
}
public Object pop() throws SException{
if(index==0){
throw new SException("空了");
}
return elements[--index];
}
}
public class User {
String name;
User(String name){
this.name=name;
}
@Override
public String toString() {
return "User [name=" + name + "]";
}
}
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Stack s =new Stack();
User u1 =new User("1231");
User u2 =new User("1232");
User u3 =new User("1233");
User u4 =new User("1234");
User u5 =new User("1235");
try {
s.push(u1);
s.push(u2);
s.push(u3);
s.push(u4);
s.push(u5);
// s.push(u5);//报错 栈满了
} catch (SException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
System.out.println(s.pop().toString());
System.out.println(s.pop()); //默认会调用tostring方法
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
// System.out.println(s.pop());//报错 栈空了
} catch (SException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}