class Person{ //类
public Person(){ // 构造器
}
}
this关键字
1.在java中,this关键字比较难理解,它的作用和其词义很接近
a:他在方法内部使用,即这个方法所属对象的引用
b:他在构造器内部使用,表示该构造器正在初始化对象
2.this表示当前对象,可以调用类的属性,方法和构造器
3.当在方法内需要用到调用该方法的对象时,就用this
4.当形参与成员变量重名时,如果在方法内部需要使用成员变量,必须添加this来表明该变量时类成员
5.在任意方法内,如果使用当前类的成员变量或成员方法可以在其前面添加this,增强程序的阅读性
6.this可以作为一个类中,构造器相互调用的特殊格式
7.使用this()必须放在构造器的首行
8.使用this调用本类中其他构造器,保证至少有一个构造器是不用this的
this的使用
package com.huake.java;
/*this:
* 1.可以用来修饰属性,方法,构造器
* 2.this理解为当前对象或当前正在创建的对象 ,比如:this.name,this.show();
* 3.可以在构造器中通过this(形参)的方式显示的调用本类中其他重载的指定的构造器
* 要求:1.在构造器内部必须声明在首行
* 2.若一个类中有n个构造器,最多有n-1个构造器中使用了this(形参)*/
public class TestPerson {
public static void main(String[] args) {
Person p =new Person();
p.setAge(13);
p.setName("李磊");
p.info();
System.out.println();
Person p1=new Person("韩梅梅",23);
p1.info();
}
}
class Person{
private String name;
private int age;
public Person(){
}
public Person(String name){
System.out.println("这是Person类中形参为name的构造器");
this.name=name;
}
public Person(int age){
this.age=age;
}
//this表示当前正在创建的对象 name表示形参
public Person(String name,int age){
//可以用来显示的调用当前类的重载的指定的构造器
this(name);
System.out.println("这是Person类中形参为name和age的构造器");
this.age=age;
}
//this.name表示当前对象的属性,name是形参
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
public void eat(){
System.out.println("eat");
}
public void sleep(){
System.out.println("sleep");
}
public void info(){
System.out.println("name:"+this.name+"age:"+this.age);
this.show();
}
public void show(){
System.out.println("我是一个人,我的名字是:"+this.name);
}
}
this的案例一
package com.huake.java;
/*
* 编写两个类,TriAngle和TestTriAngle,其中TriAngle中声明私有的底边长base和高 height,
* 同时声明公共方法访问私有变量,另一个类中使用这些公共方法,计算三角形面积*/
public class TestTriAngle { //三角形
public static void main(String[] args) {
TriAngle t=new TriAngle();
t.setBase(3);
t.setHeight(4);
System.out.println("面积为:"+t.findArea());
}
}
class TriAngle{
private double base;
private double height;
public TriAngle(){
base=1.0;
height=2.0;
}
public TriAngle(double base,double height){
this.base=base;
this.height=height;
}
public double getBase(){
return base;
}
public double getHeight(){
return height;
}
public void setBase(double base){
this.base=base;
}
public void setHeight(double height){
this.height=height;
}
public double findArea(){
return this.base*this.height/2;
}
}
this案例二
package com.huake.exer;
public class Boy {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void marry(Girl girl){
System.out.println("我要娶"+girl.getName());
}
public void marry(Boy boy){
System.out.println("我要娶"+boy.getName());
}
public void shout(){
if(age>22){
System.out.println("我到了结婚的年龄");
}else{
System.out.println("还是先谈谈恋爱吧");
}
}
}
package com.huake.exer;
public class Girl {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void marry(Boy boy){
System.out.println("我要嫁给:"+boy.getName());
boy.marry(this);
}
}
package com.huake.exer;
public class TestBoyGirl {
public static void main(String[] args) {
Boy boy=new Boy();
boy.setName("徐");
boy.setAge(23);
Girl girl=new Girl();
girl.setName("张");
boy.marry(girl);
boy.shout();
System.out.println();
girl.marry(boy);
}
}
1.JavaBean是一种java语言写成的可重用组件。
2.所谓javaBean,是指符合如下标准的java类:
a:类是公共的
b:有一个午参的公共的构造器
c:有属性,且有对应的get,set方法
3.用户可以使用javaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他javaBean、applet程序或者应用来使用这些对象。用户可以认为javaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。
介绍package和import
package com.huake.java;
/*
*package :声明源文件所在的包,写在程序的第一行
*每“.”一次,表示一层文件目录。
*包名都要小写。
*
*
*import:
*1.显示的导入指定包下的类或接口
*2.写在包的声明和源文件之间
*3.如果需要引入多个类或接口,那么就并列写出
*4.如果导入的类是java.lang包下的,如:System String Math等,就不需要显示的声明
*5.理解.*的概念,比如java.util.*;
*6.如何处理重名类导入,如:在util包下和sql包下同时存在Date类
*7.import static表示导入指定类的static的属性或方法
*8.导入java.lang.* 只能导入lang包下的所有类或接口,不能导入lang的子包下的类或接口*/
//import java.util.Scanner;
//import java.util.Date;
//import java.util.List;
//import java.util.ArrayList;
import java.util.*;
import java.lang.System.*;
import java.lang.reflect.Field;
public class TestPackageImport {
public static void main(String[] args) {
System.out.println();
Scanner s=new Scanner(System.in);
s.next();
Date d=new Date();
List list=new ArrayList();
java.sql.Date d1=new java.sql.Date(53346478568674563L);
Field f=null;
}
}
JDK中主要包的介绍
JDK中主要的包介绍
1. java.lang---- 包含一些Java语言的核心类,如String、 Math、 Integer、
System和Thread,提供常用功能。
2. java.net-- 包含执行与网络相关的操作的类和接口。
3. java.io ---包含能提供多种输入/输出功能的类。
4. java.util---包含一些实用工具类,如定义系统特性、接口的集合框架类、
使用与日期日历相关的函数。
95. java.text---包含了一些java格式化相关的类
6. java.sql-- 包含了java进行JDBC数据库编程的相关类/接口
7. java.awt---包含 了构成抽象窗口工具集(abstract window toolkits)的
多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)、
8. java.applet--包含applet运行所需的一 些类。
继承性案例
package com.huake.java1;
public class Graduate extends Student {
public void show(){
System.out.println("我是一个研究生");
}
}
package com.huake.java1;
public class Student extends Person{
// private String name;
// private int age;
//
public Student(){
}
public Student(String name,int age){
// this.name=name;
// this.age=age;
this.setName(name);
this.setAge(age);
}
// public String getName() {
// return name;
// }
// public void setName(String name) {
// this.name = name;
// }
// public int getAge() {
// return age;
// }
// public void setAge(int age) {
// this.age = age;
// }
//
// public void eat(){
// System.out.println("吃饭");
// }
// public void walk(){
// System.out.println("走路");
// }
public void info(){
eat();
System.out.println("我是一个学生");
}
}
package com.huake.java1;
public class Worker extends Person {
}
package com.huake.java1;
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void eat(){
System.out.println("吃饭");
}
public void walk(){
System.out.println("走路");
}
}
package com.huake.java1;
/*
* 面向对象的特征二:继承性
* 1.通过class A extends B来实现类的继承。
* 子类:A 父类(或基类SuperClass):B
* 2.子类继承父类以后,父类中 声明的属性、方法,子类就可以获取到。
* 3.当父类中有私有的属性或方法时,子类同样可以用获取得到,知识由于封装性的设计,使得子类不可以直接调用罢了
* 子类除了通过继承、获取父类的结构之外,还可以定义自己的特有的成分
*
* extends:子类是对父类功能的拓展,明确子类不是父类的子集。
* 4.java中类的继承只能单继承,一个类只能继承一个父类。一个父类可以有多个子类
* 5.子类父类是相对的概念。*/
public class TestExtends {
public static void main(String[] args) {
Student s=new Student();
s.eat();
Worker w=new Worker();
w.eat();
Person p =new Person();
p.eat();
s.setAge(12);
s.setName("张三");
System.out.println(s.getName()+":"+s.getAge());
Graduate g=new Graduate();
g.eat();
g.show();
}
}
案例: 定义一个ManKind类,包括成员变量int sex和int salary
方法void manOrWorman() 根据sex的值显示“man”(sex==1)或 v 者“woman(sex==0)”
方法 void employeed() 根据salary的值显示“no job”(salary==0)或 者“job”(salary!=0)
package com.huake.java2;
/*
定义一个ManKind类,包括成员变量int sex和int salary
方法void manOrWorman() 根据sex的值显示“man”(sex==1)或者“woman(sex==0)”
方法 void employeed() 根据salary的值显示“no job”(salary==0)或者“job”(salary!=0)
*/
public class ManKind {
private int sex;
private int salary;
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public void manOrWorman(){
if(sex==0){
System.out.println("women");
}else if(sex==1){
System.out.println("man");
}else
System.out.println("输入有误");
}
public void employeed(){
if(salary==0){
System.out.println("no job");
}else
System.out.println("job");
}
}
package com.huake.java2;
public class Kids extends ManKind{
private int yearsOld;
public int getYearsOld() {
return yearsOld;
}
public void setYearsOld(int yearsOld) {
this.yearsOld = yearsOld;
}
public void printAge(){
System.out.println(this.yearsOld);
}
}
package com.huake.java2;
public class TestKids {
public static void main(String[] args) {
Kids k=new Kids();
k.setSalary(0);
k.setSex(1);
k.setYearsOld(12);
k.employeed();
k.manOrWorman();
k.printAge();
}
}
求圆柱的体积
package com.huake.java3;
public class Circle {
private double radius;
public Circle(){
this.radius=1;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public double findArea(){
return 3.14*radius*radius;
}
}
package com.huake.java3;
public class Cylinder extends Circle{
private double length;
public Cylinder(){
this.length=1;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double findVolume(){
return length*findArea();
}
}
package com.huake.java3;
public class TestCylinder {
public static void main(String[] args) {
Cylinder c=new Cylinder();
System.out.println(c.findVolume());
c.setRadius(2);
c.setLength(2);
System.out.println(c.findVolume());
}
}
方法的重写:
1.前提:有子类继承父类
2.子类继承父类以后,若父类的方法对子类不适用,那么子类可以对父类的方法重写(override overwrite)
3.重写的规则:1)要求子类方法的返回值类型,方法名,参数列表必须与父类的方法一样
2)子类的方法的修饰符不能小于父类的方法的修饰符
3)若父类方法抛异常,那么子类方法抛的异常类型不能大于父类的
4)子父类的方法必须同为static或者同为非static的。