java中的类是什么?怎么使用类?
类的基本概念
成都创新互联公司成立于2013年,是专业互联网技术服务公司,拥有项目做网站、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元延平做网站,已为上家服务,为延平各地企业和个人服务,联系电话:028-86922220
- 类是现实世界抽象为数据集合的一种表达工具,在程序中我们把类作为数据、及数据操作的容器,是一种自定义数据类型。
- 类具有类型本身的属性,也具有实例属性。类变量和实例变量都叫成员变量
,类变量也叫静态成员变量(static修饰符标志);类方法和实例方法都叫成员方法,类方法也叫静态方法(static修饰符标志)。实例也是实际的例子,类似“int a”咱们就叫做变量a是类型int的实例化。
静态变量和静态方法可以通过类直接访问,也可以通过对象访问。
关于public class,这个public是为了方便能被外部的包导入引用。
- 静态绑定在程序编译阶段决定,动态绑定在程序执行时绑定。实例变量、静态变量、静态方法、private方法、构造函数都是静态绑定,只有实例方法是动态绑定,因为Java不鼓励成员变量多态行为,实例方法都在运行时绑定,如重载:子类继承父类,相同的实例方法,参数不同,执行时候选择子类父类方法是通过参数匹配来动态选择绑定。
+类加载过程如下:实例变量/实例方法
- 定一个类本身和定义一个函数类类似,类本身不会自动做什么事情,不会分配内存,也不会执行代码。方法要执行,需要被实例方法调用,首页需要初始化一个实例,这里的实例也就是对象。
- 实例化一个对象后,系统会给这个实例化变量开辟两个内存空间:一个存放实际内容,一个存放实际内容的地址。如下声明后赋值,声明时会给变量确定一个存放地址的内存空间,该地址指向存储内容的首地址。因为这种变量本身不存储数据内容,只存储内容位置,我们也称为引用数据类型(上一节我们讲过)。
Point p = new Poiont();
- 如果在方法内部调用同一个类的另一个方法,就不必使用this。同样,在一个方法中如果没有局部变量和成员变量同名,那么在这个方法中使用成员变量也不必使用this。静态成员也无法使用this(因为没有实例化)。
- 实例化后,如果没有给实例变量赋值,系统会自动给系统变量赋于该类型缺省值作为初始默认值(上一节基本类型提到过)。
类的构造方法
- 类型与构造函数名相同,没有返回值,也不能有返回值,构造函数返回值就是实例本身!
构造函数不返回值不能加void ,构造函数必须使用public 类名(...)的形式
- 一个类可以有多个构造方法,构造方法可以重载。一旦定义了构造方法,Java就不会再自动生成默认的构造方法了。构造方法有有参构造方法,还有无参构造方法。
- 构造方法可以私有(private),可以用在无法实例化的类,例如:Math等工具类不需要实例化;还有一种场景是只能通过类静态方法创建类的实例,因为构造方法无法暴露在类外部,所以只能被静态类方法调用,如:单例模式只能创建一个实例。
- 子类会默认继承父类的非私有成员变量和非私有成员方法,也包括构造方法(无参构造函数)。如果子类没有显示调用父类构造器,则自动调用父类的无参构造器;此时如果父类没有默认构造器,则编译器会报错。
- 实例化后,如果没有给实例变量赋值,系统会自动给系统变量赋于该类型缺省值作为初始默认值(上一节基本类型提到过)。
+ 程序执行的以后父类构造方法会优先于子类执行
- 最好能够为每一个类提供一个无参构造方法,以便于对该类进行扩展的时候避免错误。如下:
public class A extends B{
}class B {
public B(String name){
System.out.println("this constructor is invoked");
}
其中A没有构造函数,实例化后编译时A会执行B的带参数构造函数,编译报错。
关于super,super()。
- super()可以用在子类调用父类的构造方法,注意必须在构造方法内第一行代码,super ()访问无参构造函数,super (paras…)访问自定义构造函数**。
- 也可用在子类的普通方法(相互是重载关系,不是重载也没意义,因为父类非私有成员都是可以直接被子类调用的(如果没有被覆盖))调用父类的普通方法与属性(子类与父类对应的是重写关系,没有重写关系的可以直接调用)。
子类与父类
- 当一个类继承于另一个类,子类中没有父类的方法时。用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找。
- 当一个方法只在父类中定义时, 调用该方法时会使用父类中的属性 。
如果该方法中又调用了其他方法,那么还是按照之前的顺序,先在子类中查找,再在父类中查找。
example:package Temp;
class A {
int x = 6;
private int y = 2;public A(int a) { x = a; } int getz() { int z; z = x / y; return z; } void show() { System.out.println("x=" + x); System.out.println("y=" + y); System.out.println("z=" + getz()); }
}
class B extends A {
int x = 3, y = 5, z;public B(int a) { super(a); } int getz() { z = x + y; return z; }
}
public class Temp {
public static void main(String[] args) {
A num1 = new A(10);
B num2 = new B(9);
num1.show();
num2.show();
}
}
重写与重载
重写是指子类重新重新覆盖父类相同参数签名的方法,重写代码的逻辑块。
重载是指方法名相同但参数类型、个数、顺序不同,与返回值无关;调用重载方法,我们通过重载方法参数但匹配来动态绑定方法。
修饰符public/private/protect/static/final
- public外部和内部、子类可以访问,private只能内部访问、子类内部无法直接访问,protect外部无法访问、子类内部可以访问。
- 加入final后就不能被继承访问,加了final的方法无法重写
最后上一个 Java画图的代码
主函数如下:
import javax.swing.JFrame;
import paint.MyCanvas;
public class HelloWorld {
JFrame jFrame;
public static void main(String[] args) {
// TODO 自动生成的方法存根
HelloWorld paintMain=new HelloWorld();
paintMain.initView();
}public void initView() { jFrame =new JFrame(); jFrame.setBounds(100, 100, 500, 500); jFrame.setTitle("画图测试"); jFrame.setLayout(null); MyCanvas myCanvas=new MyCanvas();//画布 myCanvas.setBounds(0,0, 500, 500); jFrame.add(myCanvas); jFrame.setVisible(true); }
}
MyCanvas类如下:
package paint;
import java.awt.Canvas;
import java.awt.Graphics;public class MyCanvas extends Canvas{
@ Override
public void paint(Graphics g) {
// TODO 自动生成的方法存根
super.paint(g);//直接输入paint提示出来函数;
char[] a= {'显','示','文','字'};
g.drawChars(a, 0, 4, 50, 150);// data数组,offset为数据初始偏移量,length为要绘制的字符数,x,y文本基线的xy坐标,
g.drawString("字符测试01", 20, 20);// 注意,字符串型的x,y在字符中,而不是左上顶点;}
}
画图函数参考
画线段:drawLine
public abstract void drawLine(int x1,int y1,int x2,int y2)
在此图形上下文的坐标系中,使用当前颜色在点 (x1, y1) 和 (x2, y2) 之间画一条线
参数:
x1 - 第一个点的 x 坐标。
y1 - 第一个点的 y 坐标。
x2 - 第二个点的 x 坐标。
y2 - 第二个点的 y 坐标。
画矩形:drawRect
public void drawRect(int x,int y, int width, int height)
绘制指定矩形的边框。矩形的左边缘和右边缘分别位于 x 和 x + width。上边缘和下边缘分别位于 y 和 y + height。使用图形上下文的当前颜色绘制该矩形。
参数:
x - 要绘制矩形的 x 坐标。
y - 要绘制矩形的 y 坐标。
width - 要绘制矩形的宽度。
height - 要绘制矩形的高度。
画椭圆形:drawOval
public abstract void drawOval(int x, int y,int width, int height)
绘制椭圆的边框。得到一个圆或椭圆,它刚好能放入由 x、y、width 和 height 参数指定的矩形中。
椭圆覆盖区域的宽度为 width + 1 像素,高度为 height + 1 像素。
参数:
x - 要绘制椭圆的左上角的 x 坐标。
y - 要绘制椭圆的左上角的 y 坐标。
width - 要绘制椭圆的宽度。
height - 要绘制椭圆的高度。
画带颜色的图形:setColor
public abstract void setColor(Color c)
将此图形上下文的当前颜色设置为指定颜色。使用此图形上下文的所有后续图形操作均使用这个指定的颜色。
参数:
c - 新的呈现颜色。
画圆:drawRoundRect
public abstract void drawRoundRect(int x, int y,int width,int height,int arcWidth,int arcHeight)
用此图形上下文的当前颜色绘制圆角矩形的边框。矩形的左边缘和右边缘分别位于 x 和 x + width。矩形的上边缘和下边缘分别位于 y 和 y + height。
参数:
x - 要绘制矩形的 x 坐标。
y - 要绘制矩形的 y 坐标。
width - 要绘制矩形的宽度。
height - 要绘制矩形的高度。
arcWidth - 4 个角弧度的水平直径。
arcHeight - 4 个角弧度的垂直直径。
填充椭圆:fillOval
看看它的参数:
fillOval(int x,int y ,int width ,int height)
前两个X 和 Y是矩形框的左上角的坐标,width和height是宽和高。
画多边形
int px[] = { 210, 220, 270, 250, 240 }; int py[] = { 220, 250, 300, 270, 220 }; g.drawPolygon(px, py, px.length);
显示文字
g.drawString(String str, int x,int y)
本文标题:java中的类是什么?怎么使用类?
文章来源:http://azwzsj.com/article/jiihdp.html