Java_面试问题(21——35)

21.java反射机制

Java反射机制就是在程序运行过程中,对于任意一个类,都能够知道这个类的所有属性和方法;

对于任意一个对象,都能够调用它的任意一个方法和属性;

这种动态的获取信息以及动态的调用方法的功能成为Java语言的反射机制。


22.instanceof 关键字

用来判断关键字左边的对象是否为右边类的实例,返回一个Boolean值:

system.out.println(a instanceof b);


23.Java 接口代码示例

interface USB{
	public void install();
	public void work();
}

class Computer{
	public void plugin(USB usb){
		usb.install();
		usb.work();
	}
	
}

class Phone implements USB{
	public void install(){
		System.out.println("手机驱动安装中。");
	}
	public void work(){
		System.out.println("手机开始工作咯。");
	}
}

class Printer implements USB{
	public void install(){
		System.out.println("打印机驱动安装中。");
	}
	public void work(){
		System.out.print("打印问紧啊啦。");
	}
}

class MP3 implements USB{
	public void install(){System.out.println("MP3驱动");};
	public void work(){System.out.println("mp3工作了。");};
	
}

public class MultiThread{
	public static void main(String[] args){
		Computer c = new Computer();
		c.plugin(new Phone());
		c.plugin(new Printer());
		c.plugin(new MP3());
	}

}

happysneaker.com


24.Java static的四种用法:

https://www.cnblogs.com/dotgua/p/6354151.html?utm_source=itdadao&utm_medium=referral



25.Java 的system.out.println();直接输入一个对象是几个意思:

Java中直接输出一个类的对象的时候,会调用这个类的toString()方法,自己写的类没有覆盖这个方法的话就是继承Object类的这个方法,Object中toString()方法的实现是这样的:

       getClass().getName() + "@" + Integer.toHexString(hashCode())。

  后面跟的是这个类的哈希码值,如果希望这个类打印出你希望的格式,你就要覆盖toString方法。

比如下面的代码:

public class Person {
    private static int count = 0;
    int id;
    String name;
    int age;
    
    public Person() {
        id = ++count;
    }
    
    public String toString() {    //就是这个方法
        return "Id:" + id + ", Name:" + name + ", Age:" + age;
    }
    
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "zhangsan";
        p1.age = 10;
        Person p2 = new Person();
        p2.name = "lisi";
        p2.age = 12;
        System.out.println(p1);
        System.out.println(p2);
    }

    /**Output
     * Id:1, Name:zhangsan, Age:10
     * Id:2, Name:lisi, Age:12
     *///~
}



PS.要知道Java抽象类是不能被实例化的,下面的写法叫做匿名内部类,不会报错,但不是实例化了父类,而是实例化了一个无名子类:

抽象类:

public abstract class TestAbs{
    public void printMessage(String msg){
        printMessage2(msg);
    };
    public abstract void printMessage2(String msg);
}


main方法中使用:

TestAbs a = new TestAbs(){
    @Override
    public void printMessage2(String msg){
        System.out.println(msg);
    }
};

a.printMessage("aaa");


可以正常输出。


25.eclipse中获取程序执行所需要的空间:

  1. package test;

  2. public class Main {

  3. public static void main(String[] args) {

  4. long start = System.currentTimeMillis();

  5. //要测试的程序或方法

  6. long end = System.currentTimeMillis();

  7. System.out.println("程序运行时间:"+(end-start)+"ms");

  8. }

  9. }


26.如何把一段逗号分隔的字符串转换成一个数组?

正则表达式:

Java中的 split  函数是用于按指定字符(串)或正则去分割某个字符串,结果以字符串数组形式返回;

例如:

  1. String str="1234@abc";

  2. String[] a = str.split("@");

  3. System.out.println("处理结果: "+a[0]+","+a[1]);   //输出的是: 处理结果: 1234,abc


27.注意输出时候length()函数的使用方式,数组无括号,String有括号:

String x = "sdfasdfasdfdas";

String[] y = x;

System.out.println(x.length());

System.out.println(y.length);


28.

happysneaker.com


29.打印个杨辉三角:

(1)笛卡尔组合数:

// 编写程序,输入n,分别以直角三角形方式和等腰三角形模式输出n阶杨辉三角。(用二维数组实现)  

#include<stdio.h>
//我的版本 
int c(int m,int n);
main()
{
    int i,j,n;
    scanf("%d",&n);
    for(i=0;i<=n;i++)
    {
        for(j=0;j<=i;j++)
            printf("%5d",c(i,j));
        printf("\n");
    }
        system("pause");7
}
int c(int m,int n)
{
    int i,j,p=1,s=1;
    for(i=m,j=0;j<n;j++,i--)
        p*=i;
    for(i=n,j=0;j<n;j++,i--)
        s*=i;
    return p/s;

}


(2)二维数组方法(学习此类输出的格式语法)

// 直角三角形

#define M 20
#define N 20
#include<stdio.h>
main()
{
    int i,j,n;
    int a[M][N];
    scanf("%d",&n);
    // 初始化数组
    for(i=0;i<n;i++){
        for(j=0;j<=i;j++)
        {
            if(i==j||j==0)
            {
                a[i][j]=1;
            }
            else
            {
                a[i][j]=a[i-1][j]+a[i-1][j-1];
            }
        }
    }
    
    
    // 输出数组
    for(i=0;i<n;i++)
    {
        for(j=0;j<=i;j++)
        {
            printf("%5d",a[i][j]);
        }
        printf("\n");
    }
    
    system("pause");    
}


//等腰三角形/////////////////////////////////////////////////////////////////////////////

#define M 20
#define N 20
#include<stdio.h>
main()
{
    int i,j,n;
    int a[M][N];
    scanf("%d",&n);
    for(i=0;i<n;i++){
        for(j=0;j<=i;j++)
        {
            if(i==j||j==0) // 第一列的第一个元素永远是1,或者坐标i==j时的元素也是1
            {
                a[i][j]=1;
            }
            else
            {
                a[i][j]=a[i-1][j]+a[i-1][j-1]; // 其他元素就是上一层相邻俩元素之和,比如a[4][1]就是上一级的a[3][0]和a[3][1]的和
            }
        }
    }

    for(i=0;i<n;i++)
    {
		for(j=0;j<n-i;j++)
        {printf(" ");}
        for(j=0;j<=i;j++)
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
system("pause");    
    
}


30.


31.C语言fgetc、fputc来复制文件:

// while(!feof(in)) fputc(fgetc(in),out) 如果in文件可以继续读取数据. 
// 那么 fputc(fgetc(in),out)  
// 读取in文件的一个字符然后文件指针in后移一个char长度, 
// 然后输出到out文件中out文件指针后移一个char长度.
    
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    FILE *in,*out;	
    char str[50]; // 存放字符串数组
  
	// 用户输入字符串内容
    printf("enter strings:\n");
    gets(str);
 
    if((out=fopen("d:\\被复制的文件的位置","w"))==NULL)
    {
        printf("cannot open file!\n");
        exit(0);
    }
 
	/*将字符串存到文件中*/
    fputs(str,out);
    fclose(out);
 
    printf("contents have been saved in file! \n\n");
 
	// 直接在下面的fopen中写路径
    if((out=fopen("d:\\被复制的文件的位置","r"))==NULL)
    {
        printf("cannot open the outputfile!\n");
        exit(0);
    }
    if((in=fopen("d:\\复制后的文件的位置","w"))==NULL)
    {
        printf("cannot open the inputfile!\n");
        exit(0);
    }
 
    while(!feof(out))/*一个字符一个字符的从第一个文件中读到第二个文件中*/
        fputc(fgetc(out),in);
 
    fclose(out);
    fclose(in);
    return 0;
}


32.


Unity那些事儿
请先登录后发表评论
  • 最新评论
  • 总共0条评论