Java手记---String类
1 | String a = " dfsd";///////////这时输出dfsd。 |
1 | String a = " dfsd";///////////这时输出dfsd。 |
1 | Graphics a; |
Checkbox(String s)用来建复选框与单选框。
Choice()用来建下拉式单选。
Frame(String s)用来建窗口。
Button(String s)用来建按钮。
Label(String s)用来建标签。
1 | setLayout(new FlowLayout()); |
如果main中加上这个函数
1 |
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});//////////就可以实现窗口关闭功能。
public class MouseMoveHandler implements MouseListener {
private Color source = null;
public void mouseEntered(MouseEvent e) {
source = e.getComponent().getBackground();
e.getComponent().setBackground(Color.PINK);
}
public void mouseExited(MouseEvent e) {
e.getComponent().setBackground(source);
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
}
awt提供的控件:
1 | textTabbedPane = new JTabbedPane(JTabbedPane.BOTTOM);/////将标签放在下部。 |
在编写菜单的时候不需写setLayout(new FlowLayout());
如果在编写按钮的时候不写上面的代码,那么按钮就会变的很大。上一行代码是布局管理器。
应该始终有一个File菜单,它应该始终在菜单栏的最左边。菜单项New,Open…和Close(如
果有的话)
应该按上面的次序出现。New应该是第一项,Exit应该是最后一项。
如果有Edit项的话,应该为第二项,它应该有copy,paste,cut等功能。
如果有help项的话,应该是最后一项。
如果不把菜单加到菜单栏上,那么菜单栏就不会出现。
1 | TextArea ta = new |
有两种布局管理器:流程布局管理器和边框布局管理器。
1.流程布局管理器
setLayout(new FlowLayout(FlowLayout.LEFT));
2.边框管理器
边框管理器使用add();使用边框管理器的容器只能有五个构件。
1 | add(sb,"North");//////这就是边框管理器。之前不再用setLayout(new FlowLayout()); |
调用了边框管理器后,构件的大小就不再受传入参数的制约。如果不指明就将占据剩余的整个空间。
1 | Panel p = new Panel();//////////创建新面板。 |
流程管理器可以兑现构件的优先大小。而边框管理器不行。此外还有3个管理器:
////////////////////////MenuBar mb = new MenuBar();
////////////////////////setMenuBar(mb);///////////此句用于设置菜单栏。
当一个构件和一个paint()方法都负责屏幕的同一部分时,总是构件获胜。
1)创建构件。
2)创建实现Listener接口的收听者。
3)构造该收听者的一个实例。
调用该构件addListener()方法,同时传入刚建成的收听者类的实例。
1 |
|
使用repaint()方法可以刷屏并调用paint()。
当画的图形位置不对时,有可能在屏幕上显示不出来。
1 | tf.setText("Font Color is " |
当程序启动时paint()调用。当图文框被完全覆盖时,paint()被调用,当图文框放大时,paint()被调用。被最小化再还原时调用。
其余时间都不会调用paint()。
1 | btn[i].addActionListener(this); |
想让一个任意的类成为一个动作收听者,光实现一个actionperformed()的方法是不够的。因为单凭这一点不能
认为它实现了ActionListener接口。
当类中函数要用到其它函数中的变量时,特别是构件要声明成类的变量而不是函数中的变量。
publicTextPane是放在publicScrollPane上的,而publicScrollPane是放在textTabbedPane上的。
这样使用:
1 | publicTextPane.setEditable(false);///这个面板是否可以操作。 |
Exception:
throws出现在方法声明,而throw出现在可执行代码中。
如:
1 | public float getrain(float a) throws Exception |
使用IOException,SQLException,AWTEception时要导入:
1 | import java.io.IOException; |
程序包就是命名的类组。很像目录。是名称空间。类名在其中必须唯一
sgsware程序包-raytracing子程序包-Mailbox.java中的Mailbox.class
其全名为sgsware.raytracing.Mailbox
程序包名为小写。
1 | c:> javac -d /路径 文件名.java |
1 | package mypackage; |
一个类自动导入其程序包中的其他类。
在程序包中的类其default类型(包访问类型)为非public型
在同一程序包中的类在其他类中的实例可以调用自己类中的任何类型。
一个受保护的方法可以由属主类的任何子类中被超越。即使子类在其他的程序包中。
可以被子类的当前实例访问
1 | package cc; |
一个受保护的数据可以被属主类的任何子类中调用。但不能被超类中的实例访问。
但可以被子类的实例访问。
1 | package dd; |
但如果超类中的show()是非private得则调用的是子类中的show().
接口如果是公用的则在任何地方的任何代码中都可以使用。
接口如果不是公用的则在它的程序包中使用。它不能是private/protected
接口中可以不声明public,但实现的时候必须有public声明.
接口的引用只能用接口中声明的方法。
1 | package Interface; |
一个接口可以继承多个接口使用extends关键字
1 | interface AandB extends A,B |
一个接口不能继承一个虚拟类
1 | public abstract class AbClass |
虚拟类可以实现接口.
java文件中的public 类
publicTest.java
1 |
|
这里编译会通过,不过运行时会给出缺省main函数的提示
在MainClass.java中
1 | class sub |
当一个类有构造器并且有子类时两种方法:
一是它有无变元构造器.
二是它的子类有这样的结构:
1 | 类名(参数) |
当超类为虚拟类时,特别它含有非构造函数的虚拟方法.
如果调用子类并将其实例化.其内部构造的顺序是:
1 |
|
顺序是:
构造函数不能声明为静态。
关于静态与非静态的方法 MainClass.java
1 | class sub |
下面寫法有錯誤:
1 |
|
如果这样写那么必须使s成为static变量
如果使用static方法则其中使用的变量要么是static的自身类成员,要么是自身类。如果是自身类的话,
通过自身类调用的类成员可以不是static
纯过程函数一定要加static。(不使用对象的)
1 | class Test |
原来的函数可以不使用static关键词
非静态函数必须使用"引用. * "。
静态函数不需加。
只有类的成员和类的函数前可加static,本地变量不可以加static关键词
函数参数列表中即使没有参数也不能加void如show(void). This is wrong.
类中静态变量可以用"类名.静态变量名"代替"引用.静态变量名".//这样更易懂。
一切都从静态代码开始。
一个*.java文件先执行public类中的内容:但同样遵循先执行静态类成员缺省赋值,再执行其他的静态代码.
一个类被导入的时候,其静态成员只能被载入一次.
静态块和静态类成员变量效果相同(装载时间相同)都是初始化用的.
一个块和一个静态块效果并不相同.一个块可以使用静态或非静态的变量.但是static块就必须使用static变量.
否则有可以会出现Compile Error.原因是可能一个类装载的时候先装载静态成员然后才是成员变量.
这就有可能出现变量未定义的错误.
一个块和static块都可以初始化成员.
一个static是属于类的而不应该是属于对象的.
final的方法不能被override.即不能被任何子类改变.TestAAndB.java , TestB.java
private的方法不能被子类使用.其余的方法均可以被子类所调用.
1 | TestB b = new TestB(); |
即使把子类当成用超类的引用也不能使用这个private方法.
如果此时b中有b()方法的重写也不能编译通过.
如果把子类当成超类的引用.那么只能使用超类中的非private方法.当然这些方法可能会被子类超越.
那么这个引用会自动调用子类的超越后的方法.
#一个类的实现:
(1)当装载这个类的时候,实际上是调用的类的 static 方法或者访问类的 static 字段的时候,java 解释器会搜寻 classpath 来找到这个类
(2)装载类后,会对 static 数据进行初始化。
(3)当用 new 创建一个新对象时,会在堆中为对象分配足够的内存
(4)内存先被清零 ,自动把对象的数据成员赋上缺省值。变量为 0 或对应的 true 或’/u0000’,引用赋为 null
(5)执行定义成员数据的初始化
(6)执行构造函数
#方法一
1 | ////////////////////////////对象就是数据+方法。 |
#方法二
1 | ///////////////////这样也可以 |
在构造函数中如果要调用其他构造函数,就要把其他的构造函数放在最前面.
如果调用自身的构造函数可以这样写:
1 |
|
但继承的时候
1 | class SupClass |
如果改为这样
1 | public class ObjOrPri { |
根基类的static先被初始化。然后到子类的构造函数,在到基类的构造函数。
每一个类都有自己的方法。超类的和子类的方法名必须相同。但是超类可以不实现那个方法。
最后在某一个类中用一个函数来用超类的引用当作参数。调用和子类同名的函数叫做多态。
这样做的好处是如果超类和子类都存放在同一个数组里,这样就可以节省代码。
抽象类中不需要每一个方法都是抽象的。但至少有一个。
static和abstract关键字好像不能同时使用。
清除类的时候先从派生类开始,然后才是超类。
如果在构造函数中调用多态,那么将会调用被覆盖的函数。
ClassCastException运行时类型检查异常。
不是后绑定就不是多态。
##array
1 | boolean [] a; |
##array 2:
1 | ArrayList c; |
##Scope:
1 | for(int i = 0;i < 10;i++) |
##reference:
1 | ///////在声明数组或对象时,创建的是一个引用。无论声明什么样的数组,引用都是32位宽。 |
这里说明一下指针和引用的两个概念:
指针是指向地址的,而引用不是.
指针指向地址带来的麻烦就是指针可以乱指,而且有时程序中根本无法判断它是否已经越界.更可能指向系统区并修改里面的数据…后果可想而知.
而引用是一个对象的另一个名字,
1 | Object a = new Object(); |
这样b成了a的引用.b其实是a的另一种叫法.所以改变了b就相当于改变了a…
因为java中没有指针这个东西,所以比c/c++使用起来安全的多.错误也很容易被编译器发现.
1 |
|
第一个程序:
1 | public class Hello |
算术符号:
<<左移 低位填充零
右移 这是符号右移,如果为正则高位填充零,如果为负高位填充一
右移 不管是否为负,高位均填零
char byte short进行移位时先转化为int
他们进行运算时也是先转换为int型了
浮点数系统能表示的精度
2∗(M−m+1)∗bp−1+1
IEEE使用:M=1023,m=-1022,p = 53,b=2;
小数可以有的位数为:264−254
^异或运算符
~非运算符
boolean型不允许转换为其他类型。
float f4 = 1e-45f; // 10 to the power
1*pow(10,45);后面必须加f表示是float型,否则编译器报错。认为是double型的
Math.random()可以直接使用。。。。。