上一篇文章:Java中的方法与参数、对象的组合、UML图
本篇内容
- Java中的数学函数
- 三角函数方法
- 指数函数方法
- 其他方法
- 随机产生一个四位验证码
- 实例成员与类成员
- 实例成员变量与类成员变量
- 实例方法和类方法
- 下一篇文章
Java中的数学函数
Java中提供了很多的数学函数方法,在做一些运算的时候会非常方便。Java中除了有常用的数学函数外,还有常用的数学常数,例如:π
:Math.PI
自然对数的底e
:Math.E
三角函数方法
public class Example {
public static void main(String args[]){
System.out.println("sin(π/6) = "+Math.sin(Math.PI/6)+" (应该是0.5,这里是近似值)");
System.out.println("cos(π/3) = "+Math.cos(Math.PI/3)+" (应该是0.5,计算机是有误差的)");
System.out.println("tan(π/4) = "+Math.tan(Math.PI/4)+" (应该是1.0,计算机误差)");
System.out.println("60度角的弧度制值为:"+Math.toRadians(60)+" (3.1415926.../3,即π/3)");
System.out.println("弧度制π/4的角度为:"+Math.toDegrees(Math.PI/4)+"度");
System.out.println("arcsin(0.5) = "+Math.asin(0.5)+" (π/6)");
System.out.println("arccos(0.5) = "+Math.acos(0.5)+" (π/3)");
System.out.println("arctan(1.0) = "+Math.atan(1.0)+" (π/4)");
}
}
指数函数方法
public class Example {
public static void main(String args[]){
System.out.println("e的一次方:"+Math.exp(1));
System.out.println("以e为底e的对数:"+Math.log(Math.E));
System.out.println("以10为底10的对数:"+Math.log10(10));
System.out.println("2的10次方:"+Math.pow(2,10));
System.out.println("根号下3:"+Math.sqrt(3));
}
}
其他方法
取整方法:
max()、min()、abs()方法:
-
max(a,b)
返回a和b中较大的数(a、b为int、float、double或long当中的数据类型) -
min(a,b)
返回a和b中较小的数 -
abs()
返回一个数(int、float、double或long)的绝对值
random方法:
产生一个大于等于0.0小于1.0的数
//产生100个random随机数
public class Example {
public static void main(String args[]){
int a = 1;
while(a <= 100){
System.out.println(Math.random());
a++;
}
}
}
//产生0~9之间的随机数
(int)(Math.random()*10)
//返回a~a+b之间的一个随机整数,不包括a+b
a + (int)(Math.random()*b)
//产生50个10~30之间的随机数,不包括30
//输出时每行10个数
public class Example {
public static void main(String args[]){
int a = 1;
int b = 0;
while(a <= 50){
System.out.printf("%d ",10+(int)(Math.random()*20));
a++;
b++;
if(b==10){
System.out.println();
b = 0;
}
}
}
}
随机产生一个四位验证码
随机产生一个四位的验证码,由大小写字母和数字组成。为了避免混淆,不能有数字1
、大写字母I
、大写字母L
、小写字母l
、数字零0
、小写字母o
、大写字母O
、数字二2
、小写字母z
、大写字母Z
、数字9
、小写字母g
//随机产生30个这种验证码
//每行5个
public class Example {
public static void main(String args[]){
int count = 1;
int num = 0;
while(count <= 30){
char a[] =
{
'3','4','5','6','7','8','a','b','c','d',
'e','f','h','i','j','k','m','n','p','q',
'r','s','t','u','v','w','x','y','A','B',
'C','D','E','F','G','H','J','K','M','N',
'P','Q','R','S','T','U','V','W','X','Y'
};
int x = 0;
while(true){
int c = (int)(Math.random()*50);
x++;
System.out.print(a[c]);
if(x==4)
break;
}
System.out.printf(" ");
num++;
if(num==5){
System.out.println();
num = 0;
}
count++;
}
}
}
实例成员与类成员
实例成员变量与类成员变量
实例成员变量:普通的成员变量
类成员变量:普通的成员变量的基础上,前面再加一个 static 关键字,类成员变量将会被所有创建的对象所拥有,即所有该类创建的对象共享类成员变量,都可以对其进行修改或访问
class Poeple {
float height; //普通的成员变量
static int population; //类成员变量
...
}
所有该People类的对象都会共同拥有population这个类成员变量
class People {
String name;
static int population;
People(String na){
name = na;
population++; //每创建一个对象,人口population就加一
}
}
public class Example {
public static void main(String args[]){
People jackey = new People("Jackey"); //每创建一个对象,就初始化一个人名
People amy = new People("Amy");
People tom = new People("Tom");
People alice = new People("Alice");
System.out.println(alice.name);
System.out.println(jackey.name);
System.out.println("目前总人数为:"+jackey.population);
System.out.println("目前总人数为:"+alice.population);
tom.population = 2000;
System.out.println("类成员变量已经由4改为了2000:"+amy.population);
System.out.println("任意对象都可以访问或修改类成员变量:"+alice.population);
System.out.println("population是所有的对象共有的,通过任意一个对象都可以访问population");
}
}
使用命令javac Example.java
编译产生字两个节码文件,分别是People.class
和Example.class
当使用命令java Example
去执行字节码文件时,类的字节码文件会被加载到内存,此时类成员变量population会被分配内存,但是实例成员变量name就不会被分配内存,实例成员变量只有在对象被创建的时候才会被分配内存
实例方法和类方法
实例方法:普通的方法
类方法(静态方法):普通方法前面加 static 关键字
class Numb {
float max(float x, float y){ //实例方法
...
}
static double min(double a, double b){ //类方法
...
}
}
对于实例方法:在类的字节码文件被加载到内存时,实例方法不会立即被分配入口地址。只有在创建第一个该类的对象的时候,才会为实例方法分配入口地址,创建第二个该类的对象的时候,就不会再次为实例方法分配入口地址,实例方法的入口地址被所有的对象所共享。实例成员变量和类成员变量都可以被实例方法所使用。
对于类方法:在类的字节码文件被加载到内存时,就会为类方法分配入口地址。类方法可以被创建的任何对象所调用,也可以使用类名直接调用。类方法不可以使用实例成员变量,因为实例成员变量只有在创建对象的时候才会被分配内存,而类方法在类的字节码文件被加载到内存的时候就已经分配了入口地址。
如果一个方法不需要使用实例成员变量就可以完成某个特定的功能,那么就可以把这个方法定义为static方法,通过类名就可以直接调用
class A {
double a; //声明一个成员变量a,不赋初值的情况下默认值为0
static int b; //声明一个类成员变量b,不赋初值的情况下默认值为0
void outPut_1(){ //定义一个实例方法
System.out.println("通过调用实例方法输出实例成员变量a的值:"+a);
System.out.println("通过调用实例方法输出类成员变量b的值:"+b);
}
static void outPut_2(){ //定义一个类方法
System.out.println("通过调用类方法输出类成员变量b的值:"+b);
System.out.println("类方法只能使用类成员变量,而不能使用实例成员变量");
}
}
class Example {
public static void main(String args[]){
A.outPut_2(); //类方法在创建对象之前就可以使用类名来调用
System.out.println();
System.out.println("使用对象调用实例方法和类方法:");
A a = new A(); //创建一个A类的对象a
a.outPut_1(); //实例方法只能通过对象名来调用
a.outPut_2();
System.out.println("创建的对象既可以调用实例方法,也可以调用类方法");
}
}
下一篇文章
Java方法重载、this关键字用法