学习笔记

 9-2--9-9
主要学习科目: java  jsp  linux  oracle
    java学习:
        接口
 学习目标:
     1.接口的定义和特性
       //接口是一种抽象类,只包含常量和方法,是对类的需求描述,
       /*接口的作用: 通过接口实现不相关类的相同行为
                     通过接口指明多个类要实现的方法
       通过接口了解对象的交互界面
  接口的定义:
              包含接口声明和接口体 [public] interface interfaceName[extends listOfSuperInterface]{....}
      
  */    
import java.util.*;
public class EmployeeSortTest
{
 public static void main(String[] args)
 {
  Employee[] staff = new Employee[3];
  staff[0] = new Employee("Harry Hacker",35000);
  staff[1] = new Employee("Carl Cracker",75000);
  staff[2] = new Employee("Tony Tester",38000);
  Arrays.sort(staff);
  for(Employee e:staff)
   System.out.println("name = "+e.getName()+",salary = "+e.getSalary());
 }
}
class Employee implements Comparable<Employee>
{
 public Employee(String n ,double s)
 {
  name = n;
  salary =s;
 }
 public String getName()
 {
  return name;
 }
 public double getSalary()
 {
  return salary;
 }
 public void raiseSalary(double byPercent)
 {
  double raise = salary*byPercent/100;
  salary+=raise;
 }
 public int compareTo(Employee other)
 {
  if(salary <other.salary) return -1;
  if(salary>other.salary)return 1;
  return 0;
 }
 private String name;
 private double salary;
  
}
     2.接口和抽象类
     3.对象和克隆
     4.接口与回调
     5.内部类问题
     6.如何使用内部类访问对象状态
     7.内部类的特殊语法规则
     8.内部类是否使用必要和安全
     9.局部内部类
     10.匿名内部类
     11.静态内部类
    jsp学习:
    linux学习:
    oracle学习:

public class Dog
{
    private furcolor;
 private weight;
 private height;
 
  public catchmouse(Mouse m)
 {
   ...
   m.scream();
 }
 public static void main(String[] args)
 {
    Dog d = new Dog();
    Mouse m = new Mouse();
    d.catchmouse(m);
 }
}
class Mouse
{
 private int furcolor;
 private int weight;
 private int height;
 public void scream()
 {
  ...
 }
}

面向对象:一组对象互相配合通过沟通来实现特定功能
         对象都有对外服务的接口
   对象隐藏内部服务的实现
   组件_比对象更高的层次上的抽象
类的定义:
public class Person
{
 private int Id;
 private int age = 12;
 public void  setAge(int i)
 {
  age = i;
 }
        public int getAge()
 {
         return age;
 }
 public int getId()
 {
  return Id;
 }
}
成员变量:
    可以是java语言的任何一种数据类型(基本和引用)
    在java中,如果不在定义的时候初始化变量,系统自动采用默认值;
    作用范围为大括号内
引用:
   java中除了基本类型外所有变量类型
   java中是用引用来对对象进行操作的
   如何在内存中区别类和对象
       类是静态的概念,代码区
       对象是new出来的,位于堆内存,类的每个成员变量在不同的对象里有不同的值,方法只有一份执行时才占内存,
    //new 出来的东西都放在内存的堆中
   String s;//定义了一个引用,内存中开辟一个Sting类型空间
   s = new String("hellow world!");//堆栈中开辟String类型空间,一个引用s将调用它,
   要点:  必须使用new关键字来创建对象
          使用对象(引用):成员变量或来引用对象的成员变量
   使用对象(方法):方法来调用对象的方法
   同一个类的对象有不同的存储空间
   同一个类的所有对象共享该类的方法
抽象类:
      用abstract关键字来修饰一个类时,这个类叫抽象类,
      用abstract关键字来修饰一个方法时,这个类叫抽象方法
      含有抽象方法的类必须被声明为抽象类,抽象方法必须被重写
      抽象类不能实例化
      抽象方法只声明,不能实现
abstract class Animal
{
 private string name;
 Animal(string name)//在创建对象初始化完毕后,释放空间
 {
  this.name = name;
 }
 public abstract void enjoy();
}
class Cat extends Animal
{
 private string eyeColor;
 Cat(string n,string c)//在创建对象初始化完毕后,释放空间
 {
  super(n);
  eyesColor = c;    
 }
 public void enjoy()
 {
  System.out.println("猫叫声.....")
 }
}
构造方法
     使用new时构造方法创造一个新的对象
  构造方法定义在java类中的一个用来初始化对象的方法
  构造函数与类名同且无返回值
  例如 Person类的构造函数
     public class Person
  {
    int Id;
    int Age;
    person(int a,int i)//在创建对象初始化完毕后,释放空间
    {
      Id=i;
   Age = a;
    }
    public static void main(String[] args)
    {
      Person tom = new Person(1,25);
      person john = new Person(2,27);
    }
  }
     如果没有初始化,则系统将自动指定
   class point
   {
    int x;
    int y;
   }//如无构造函数,则自动添加空构造函数,如果已定义构造方法,则不能调用faction()空方法   
     构造方法常见问题
    构造方法前不能加void(void定义的为普通方法)
    命名规则
    类名的首字母大写
    变量名方法名首字母小写
    驼峰表示(后面单词首字母大写)getId()
 实例1
         class BirthDate //定义一个BirthDate类,数据域有day,month,year,方法有构造函数BirthDate() ,setDay() ,setMonth() ,setYear() ,getDay() ,getMonth() .getYear() ,display()
         {
     private int day;
     private int month;
     private int year;
     public BirthDate(int d,int m,int y)
     {
       day = d;
    month = m;
    year = y
     }
     public void setDay(int d)
     {
       day =d;
     }
     public void setMonth(int m)
     {
       month = m;
     }
     public setYear(int y)
     {
      yera = y;
     }
     public int getDay()
     {
       return day;
     }
     public int getMonth()
     {
      return month;
     }
     public int getYear()
     {
       return year;
     }
     public void display()
     {
       System.out.println("day"+day",month"+month",yera"+year);
     }
   }  
   
   public class Test//包含main()方法的类,
  {
    public static void main(String[] args)
    {
      Test test = new Test();
     int date=9;  //在栈内存开辟date,堆内存中存储数据9;
     BirthDate d1 = new BirthDate(1,1,1988);//在栈空间中开辟d1,堆空间中存储date,month,year数据
     BirthDate d2 = new BirthDate(2,2,1987);//在栈空间中开辟d1,堆空间中存储date,month,year数据
     test.change1(date);//栈中开辟date,将date的值传到test的方法change1中的i去,被赋值1234,方法结束时,栈中date清空,date仍为9;
     test.change2(d1);//将d1地址传递给change2中的参数b,此时d1和b同地址,在方法开始执行后,b在堆中开辟date,month,year,并赋值,方法结束后,释放栈空间b,堆空间由java的垃圾回收机制处理;
     test.change3(d2);//将d2地址传递给change3中的参数b,此时d2和b同地址,并将date改为22,
     System.out.println("date=="+date);
     d1.display();
     d2.display()
   }
   public change1(int i)
   {
    i = 1234;
    }
   public change2(BirthDate b)
   {
    b = new BirthDate(2,2,2004);
    } 
    public change3(BirthDate b)
    {
     b.setDay(22);
     }
  }//要改变对象的值,必须通过传递参数到能改变数据域的对象内部的方法参数进行;
 
  public class Point
  {
   private double x;
   private double y;
   private double z;
   public Point(double i,double j,double k)
   {
    x = i;
    y = j;    
    z = k;
   }
   public double getDistance(Point i)
   {
    return sqrt((x-i.x)*(x-i.x)+(y-i.y)*(y-i.y)+(z-i.z)*(z-i.z));
   }
  }
 
   public class TestPoint
   {
    public static void main(String args[])
    {
     Point i = new Point(1,2,3);
     Point j = new Point(0,0,0);
     System.out.println("the distance of the point i(1,2,3) and j(0,0,0) is "+i.getDistance(j)); 
     /*此持有一个无名对象变量在堆中,并将计算的结果返回给堆中的临时变量i,方法结束后,都被释放*/
     System.out.println("the distance of the point i(1,2,3) and point (2,3,4) is "+i.getDistance(new Point(2,3,4)));
    }
  要点: 一个java文件只有一个public在类前声明;
        方法要返回类型;
  方法的重载
      方法的重载时指一个类中可以定义相同名字但参数不同的多个方法,调用时会根据不同的参数(个数和类型)来选择对应的方法
      例子:
 class Person
  {
    int Id;
    int Age;
    person(int a,int i)//在创建对象初始化完毕后,释放空间
    {
      Id=i;
   Age = a;
    }
    void info()
    {
     System.out.println("my id is "+Id);
     }
    void info(String s)
    {
     System.out.println(s+""+Id+Age);
     } 
  }
  public class TestOverLoad
  {
   public static void main(String[] args)
    {
      Person tome = new Person(1,25);
      Person john = new Person(2,27);
      System.out.println("tome.id="tome.id+" tome.Age="+tome.Age);
      System.out.println("john.id ="+john.id+" john.Age="+john.Age);
      tom.info();
      john.info("hellow");
    }
  }
对象的创建和使用
    例子:
class Point
        {
         private double x,y,z;
         public Point(double i,double j,double k)
         {
          x=i;
          y=j;
          z=k;
          }
         public void setX(double _x)
         {
          x=_x;
         }
          public void setY(double _y)
          {
         y=_y;
         } 
         public void setZ(double _z)
         {
          z=_z;
         }
         public double getX()
         {
          return x;
          }
         public double getY()
         {
          return y;
          } 
         public double getZ()
         {
          return z;
          }
         public double getDistance(Point i)
         {
          return (x-i.x)*(x-i.x)+(y-i.y)*(y-i.y)+(z-i.z)*(z-i.z);
          } 
        }
       
        class Circle
        {
         private Point o;
         private double raidus;
         public Circle(Point p,double r)
         {
             o = p;
             raidus = r;
          }
         public Circle(double r)
         {
          o = new Point(0,0,0);
          raidus = r;
          }
         public Boolean contain(Point p)
         {
          if(p.getDistance(o)>raidus*raidus) return false;
          else return true;
          }
         public void setO(double x,double y,double z)
         {
          o.setX(x);
           o.setY(y);
           o.setZ(z);
         }  
         public void setRaidus(double r)
         {
          raidus = r;
         }
         public Point getO()
         {
            return o; 
         }
         public double getRaidus()
         {
          return raidus;
         }
         public double getArea()
         {
          return 3.14*raidus*raidus;
         }                        
        } 
       
        public class TestCircle
        {
         public static void main(String[] args)
         {
          Circle circle1 = new Circle(new Point(1,2,3),3);
          Circle circle2 = new Circle(5);
          System.out.println("c1("+circle1.getO().getX()+","+circle1.getO().getY()+","+circle1.getO().getZ()+")");
          System.out.println("c2("+circle2.getO().getX()+","+circle2.getO().getY()+","+circle2.getO().getZ()+")");
          System.out.println("circle1 area is "+circle1.getArea());
          System.out.println("circle2 area is "+circle2.getArea());
          
         }
        }
   
    this关键字
      在类的方法定义中,this代表该使用方法的对象引用;
      当必须指出当前使用放大的对象时谁时必须要使用this
      this可以看作一个变量,它的值时当前对象的引用;
      例子
         public class Leaf
         {
          private int i = 0;
          public  Leaf(int i)
          {
           this.i=i;
           }
          Leaf intcreament()
          {
           i++;
           return this;
           } 
          public static void main(String[] args)
          {
           Leaf leaf  = new Leaf();
           leaf.intcreament().intcreament().i;
           }  
          }
      static 关键字
          类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,第一次使用时给初始化,该变量只有一份;
          用static声明的方法为静态方法,在调用时,不会将对象的引用传奇给它,所以在static方法中不可访问非static的成员
          可以通过对象引用或类名(不需实例化)访问静态成员;
          例子
            public class Cat
            {
             private static int sid=0;
             private String name;
             private id;
             public Cat(String m)
             {
              name = m;
              id = sid;
              }
             public void info()
             {
              System.out.println("Cat's id = "+id+",name ="+name);
               public static void main(Sting[] args)
               {
              sid  = 100;
              Cat mimi = new Cat("mimi");
              Cat pipi = new Cat("pipi");
              mimi.info();
              pipi.info();
               } 
             } 
           }
          
     package 和import语句
         解决类名的命名冲突,作为java的第一条语句,指明该文件定义的类存放的包
             格式: package pkg1[][.pkg2[pkg3...]];
         包对应于文件系统的目录管理,package语句中,用.来知名目录的层次
             例子 package com.sxt; //该文件定义的所有类放在/com/sxt目录下面
         如果将一个类打包,则使用该类时,要使用类德全名;
         也可以import 在文件开头来引入要使用的类;import com.lord.Cat.class
         package 语句 同目录层次同;
         import 语句   最后面跟类名即可;    
           import java.util.*;//引入java.util中所有的类;此后在本文件中可以不注明具体的包名;
            如果想将一个类放入包中,在这个类的源文件的第一句话 package
            必须保证类的class文件位于正确的目录下
            另外的类想访问的话: 写全名或引入;写具体的类名;同一个包不需要引入
            必须class文件的最上层包的父目录位于classpath下(系统的环境变量中设定,不同的项目使用不同的classpath),执行的时候也要写全包名;
            执行环境必须要在classpath中;
           
     j2sdk的一些重要包的介绍
        java.lang java的核心类,如 String,Math,Integer,System,Thread,提供常用功能;(唯一一个不需要引入就能使用的包)
        java.awt  抽象窗口工具集,abstract Window Toolkit  的多个类,用来组建和管理应用程序的图形界面GUI
        java.Applet 包含applet所需要的一些类
        java.net  执行与网络相关的操作的类
        java.io 提供多种输入输出功能的类
        java.util  一些使用工具集 如定义系统特性,使用与如期日历相关的函数
        jar -cvf *.jar *.*,要使用jar包的文件可以将jar当作classpath设置;
        如果在类文件中使用了package,就必须对应正确的实际目录
   访问控制;
        public private protected default
        对class的权限修饰只可以用public default
           public 可以在任意地方被访问
           default 只可以被同一个包内部的类访问;
      类的继承和控制权限
          通过继承,子类可以自动拥有基类的所有成员
          java是单继承  
           例子 class Parent
                  {
                   private int n_private = 1;
                    private int n_friendly = 2;
                    protected int n_protected = 3;
                    public int n_public = 4;
                   }
                 class son extends Parent
                 {
                   public info()
                   {
                    private int n_private = 10;
                    private int n_friendly = 20;
                    protected int n_protected = 30;
                    public int n_public = 40;
                    }
                  }
   class Person
       {
         private String  name;
         private int age;
         private int id;
         public void setAge(int i)
          {
           age = i;
           }
           public void setName(String n)
           {
            name = n;
            }
           public void setId(int j)
           {
            id = j;
            } 
           public String getName(){return name;}
           public int getAge(){return age;}
           public int getId(){return id;}      
        }   
        class Student extends Person
        {
         private String school;
         public void setSchool(String s) 
         {
          school = s;
          }
         public String getSchool()
         {
          return school;
          } 
         }
         public class Test
         {
          public static void main(String[] args)
          {
            Student s = new Student();
            s.setName("john");
            s.setAge(18);
            s.setId(100);
            s.setSchool("beida");
            System.out.println("name is "+s.getName());
            System.out.println("age is "+ s.getAge());
            System.out.println("id is "+s.getId());          
            System.out.println("school is "+s.getSchool());          
          }
         } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值