精华内容
下载资源
问答
  • 在程序设计时,经常需要使用选择结构在程序中完成逻辑判断选择功能,这就需要使用到选择语句。 附:Java基础知识框架思维导图 选择结构分支练习 某项查询执行之后,n条结果,单页显示m条记录,第i页显示第几条...

    在程序设计时,经常需要使用选择结构在程序中完成逻辑判断和选择功能,这就需要使用到选择语句。
    附:Java基础知识框架思维导图

    选择结构分支练习题

    1. 某项查询执行之后,n条结果,单页显示m条记录,第i页显示第几条到第几条?
    2. 读入一个整数,表示一个人的年龄。
      如果小于6岁,则输出“儿童”,6岁到13岁,输出“少儿”;
      14岁到17岁,输出“青少年”;
      18岁到35岁,输出“青年”;
      36岁到50岁,输出“中年”;
      50岁以上输出“中老年”。
    3. 输入一个整数,如果是1~5之间,则分别输出5个福娃的名字,否则输出“北京欢迎你”。
    4. 读入一个表示年份的整数,判断这一年是否是闰年。如何判断一个年份是否是闰年。
    5. 中国的个税计算
    1.某项查询执行之后,n条结果,单页显示m条记录,第i页显示第几条到第几条?
    //1.某项查询执行之后,n条结果,单页显示m条记录,第i页显示第几条到第几条?
    import java.util.Scanner;//1引用jdk提供的一个“扫描仪”的工具
    public class Text3{
    	public static void main(String[] args){
    		Scanner input = new Scanner(System.in);//2.引用数据类型的声明方式
    		System.out.println("请输入一共几条结果:");
    		double n = input.nextDouble(); //3.在控制台接收一个double数值
    		
    		System.out.println("单页显示多少:");
    		double m = input.nextDouble();
    		
    		double y = n/m;//double类型的页数
    		int b = (int)(n/m);//将doule类型的页数转为int,用以判定多余的是否自成一页
    		//如果大于一页
    		if(n>m){
    		if(y>b || y<b){
    			for(int j = 1;j <= b+1;j++){
    				if(j==1){
    					System.out.println("当i="+(j)+"时,显示第"+1+"到第"+m);
    				}else if(j>1 && j<b+1){
    					System.out.println("当i="+(j)+"时,显示第"+(m*(j-1)+1)+"到第"+m*j);
    				}else{
    					System.out.println("当i="+(j)+"时,显示第"+(m*(j-1)+1)+"到第"+n);
    				}
    			}
    		}else{
    			for(int j=1;j <= b;j++){
    				System.out.println("当i="+(j)+"时,显示第"+(m*(j-1)+1)+"到第"+m*j);
    			}
    		}
    		}else{
    			System.out.println("当i="+1+"时,显示第"+1+"到第"+n);
    		}
    	}
    }
    
    2.读入一个整数,表示一个人的年龄。 如果小于6岁,则输出“儿童”,6岁到13岁,输出“少儿”; 14岁到17岁,输出“青少年”; 18岁到35岁,输出“青年”; 36岁到50岁,输出“中年”; 50岁以上输出“中老年”。
    /*2.读入一个整数,表示一个人的年龄。
    如果小于6岁,则输出“儿童”,6岁到13岁,输出“少儿”;
    14岁到17岁,输出“青少年”;
    18岁到35岁,输出“青年”;
    36岁到50岁,输出“中年”;
    50岁以上输出“中老年”。
    */
    
    import java.util.Scanner;
    public class Text4{
    	public static void main(String[] args){
    		Scanner input = new Scanner(System.in);
    		System.out.println("请输入一个整数,表示一个人的年龄:");
    		int age = input.nextInt();
    		if(age<1&&age>150){
    			System.out.println("输入的年龄超过范围1~150");
    		}else if(age<6){
    			System.out.println("儿童");
    		}else if(age<=13){
    			System.out.println("少儿");
    		}else if(age<=17){
    			System.out.println("青少年");
    		}else if(age<=35){
    			System.out.println("青年");
    		}else if(age<=50){
    			System.out.println("中年");
    		}else{
    			System.out.println("中老年");
    		}
    	}
    }
    
    3.输入一个整数,如果是1~5之间,则分别输出5个福娃的名字,否则输出“北京欢迎你”。
    //3.输入一个整数,如果是1~5之间,则分别输出5个福娃的名字,否则输出“北京欢迎你”。
    import java.util.Scanner;
    public class Text5{
    	public static void main(String[] args){
    	Scanner input = new Scanner(System.in);
    	System.out.println("输入一个整数");
    	int name =input.nextInt(); //int name =new Scanner(System.in).nextInt();
    	switch(name){
    	case 1:{
    		System.out.println("贝贝");
    		break;
    	}
    	case 2:{
    		System.out.println("晶晶");
    		break;
    	}
    	case 3:{
    		System.out.println("欢欢");
    		break;
    	}
    	case 4:{
    		System.out.println("迎迎");
    		break;
    	}
    	case 5:{
    		System.out.println("妮妮");
    		break;
    	}
    	default:{
    		System.out.println("北京欢迎你");
    	}
    	}
    	}
    }
    
    4.读入一个表示年份的整数,判断这一年是否是闰年。如何判断一个年份是否是闰年。
    //4.读入一个表示年份的整数,判断这一年是否是闰年。如何判断一个年份是否是闰年
    import java.util.Scanner;
    public class Text6{
    	public static void main(String[] args){
    		System.out.println("输入一个表示年份的整数:");
    		int year = new Scanner(System.in).nextInt();
    		//不管能否被400整除,满足被4整除不被100整除则可,但若想是闰年则必须被100整除且能与400整除
    		if(year%400==0 || (year%100!=0&&year%4==0)){
    			System.out.println(year+"是闰年");
    		}else{
    			System.out.println(year+"是平年");
    		}
    	}
    }
    
    5.中国的个税计算
    //中国的个税计算
    import java.util.Scanner;
    public class Text7{
    	public static void main(String[] args){
    		System.out.println("请输入一个整数,表示税前收入:");
    		double salary = new Scanner(System.in).nextDouble();
    		double x =salary - 3500; //应纳税所得额;
    		double tax = 0.0;//应缴税款;
    		double div =salary-262-3500;//税前工资-各类保险-3500
    		if(div>0)
    		{
    			if(x<=1500){
    				tax=div*0.03;
    			}else if(x<=4500){
    				tax=div*0.1-105;
    			}else if(x<=9000){
    				tax=div*0.2-555;
    			}else if(x<=35000){
    				tax=div*0.25-1005;
    			}else if(x<=55000){
    				tax=div*0.3-2755;
    			}else if(x<=80000){
    				tax=div*0.35-5505;
    			}else{
    				tax=div*0.45-13505;
    			}
    		}
    		System.out.println("应缴纳税款"+tax+"元\n实发工资:"+(salary-tax-262)+"元");
    	}
    }
    
    展开全文
  • 1.读入一个表示年份的整数,判断这一年是否是闰年:a.如果这个年份能被4整除,且不能被100整除,则这一年是闰年。例如:1996年是闰年,而相应的,1993年就不是闰年。b.如果这个年份能够被100整除,则这个数必须要能...

    1.读入一个表示年份的整数,判断这一年是否是闰年:

    a.如果这个年份能被4整除,且不能被100整除,则这一年是闰年。例如:1996年是闰年,而相应的,1993年就不是闰年。

    b.如果这个年份能够被100整除,则这个数必须要能被400整除,才是闰年。例如,2000年是闰年,1900年不是闰年。

    //思路:求余得出整除的数,逻辑&&得出满足两个条件的情况

    import java.util.Scanner;

    public class Year{

    public static void main(String [] args){

    Scanner input = new Scanner(System.in);

    System.out.print("请输入年份");

    int year = input.nextInt();

    if(year % 4 == 0 && year % 100 != 0){

    System.out.println(year + "年是闰年");

    }else if(year % 100 == 0 && year %400 == 0){

    System.out.println(year + "年是闰年");

    }else{

    System.out.println(year + "年不是闰年");

    }

    }

    }

    2.中国的个税计算方法:

    应税所得为税前收入扣除–3500 元(起征点),然后超出部分,按照以下税率收税:

    2c14f3129b32c3381fd85a60495e5a89.png

    规则:应缴税款 = (税前工资 - 各类保险 - 3500) * 税率 - 速算扣除数。

    注意:此处各类保险默认为262元。

    实发工资 = 税前工资 - 应缴税款 - 各类保险。

    例如:若税前工资为15000,各类保险262元。

    应缴税款(1804.5) = (15000 - 262 - 3500) * 0.25 - 1005

    实发工资(12933.5) = 15000 - 1804.5 - 262

    要求:读入一个整数,表示税前收入,输出应当缴纳的个人所得税和税后实际收入。

    //思路:不要被题目吓到,理解提议后思路会清晰很多,根据公式及数据,多几个判断条件就能做出来

    import java.util.Scanner;

    public class Money{

    public static void main(String [] args){

    Scanner input = new Scanner(System.in);

    System.out.print("输入税前收入");

    //税前工资bMoney

    double bMoney = input.nextDouble();

    //税tax

    double tax;

    //实发工资fMoney

    double fMoney;

    if(bMoney -3500 <1500){

    tax = (bMoney - 262 -3500)*0.03;

    fMoney = bMoney -tax -262;

    System.out.println("税是" + tax + "实发工资是" + fMoney);

    }else if(bMoney - 3500 > 1500 && bMoney - 3500 <= 4500){

    tax = (bMoney - 262 -3500)*0.1 - 105;

    fMoney = bMoney -tax -262;

    System.out.println("税是" + tax + "实发工资是" + fMoney);

    }else if(bMoney - 3500 >4500 && bMoney - 3500 <= 9000){

    tax = (bMoney -262 -3500)*0.2 -555;

    fMoney = bMoney -tax -262;

    }else if(bMoney - 3500 >9000 && bMoney - 3500 <= 35000){

    tax = (bMoney -262 -3500)*0.25 -1005;

    fMoney = bMoney -tax -262;

    System.out.println("税是" + tax + "实发工资是" + fMoney);

    }else if(bMoney - 3500 >35000 && bMoney - 3500 <= 55000){

    tax = (bMoney -262 -3500)*0.3 -2755;

    fMoney = bMoney -tax -262;

    System.out.println("税是" + tax + "实发工资是" + fMoney);

    }else if(bMoney - 3500 >55000 && bMoney - 3500 <= 80000){

    tax = (bMoney -262 -3500)*0.35 -5505;

    fMoney = bMoney -tax -262;

    System.out.println("税是" + tax + "实发工资是" + fMoney);

    }else if(bMoney - 3500 > 80000){

    tax = (bMoney -262 -3500)*0.45 -13505;

    fMoney = bMoney -tax -262;

    System.out.println("税是" + tax + "实发工资是" + fMoney);

    }

    }

    }

    3.使用 switch 把小写类型的 char型转为大写。只转换 a, b, c, d, e. 其它的输出 “other”

    //思路:此题逻辑简单,用switch来做,注意不要忘记break

    import java.util.Scanner;

    public class Test3{

    public static void main(String [] args){

    Scanner input = new Scanner(System.in);

    System.out.println("请输入一个小写英文字母");

    char c = input.next().charAt(0);

    switch(c){

    case 'a':

    System.out.println("A");

    break;

    case 'b':

    System.out.println("B");

    break;

    case 'c':

    System.out.println("C");

    break;

    case 'd':

    System.out.println("D");

    break;

    case 'e':

    System.out.println("E");

    break;

    default:

    System.out.println("other");

    }

    }

    }

    b581ae9c44e6fc346da97c2a72a699bf.png

    展开全文
  • 1.有1234这四个数字,他们可以组成多少互补相同的三位数分析过程:遍历加逻辑判断示例代码图片发自简书App运行结果图片发自简书App反思拓展:还有更复杂的排序,怎么用选择,直接面对过程做出来的?还是寻求像在数学做...

    1.有1234这四个数字,他们可以组成多少互补相同的三位数

    分析过程:遍历加逻辑判断

    示例代码

    6c487cbb852b

    图片发自简书App

    运行结果

    6c487cbb852b

    图片发自简书App

    反思拓展:还有更复杂的排序,怎么用选择,直接面对过程做出来的?还是寻求像在数学做题时的思维,然后抽象为代码,得出结果12.企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数?

    分析过程:这题我不想写。

    示例代码

    6c487cbb852b

    图片发自简书App

    运行结果

    6c487cbb852b

    图片发自简书App

    反思拓展:前几天,手机坏了,电脑坏了,啥事也没干,烦。13.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

    分析过程:遍历,起点-100,终点表面上看上去是无穷大,实际上却有限制。简单的计算到就能得到结果156

    示例代码

    6c487cbb852b

    图片发自简书App

    运行结果

    6c487cbb852b

    图片发自简书App

    反思拓展:我想到了另一种数学计算。

    14.输入某年某月某日,判断这一天是这一年的第几天?

    分析过程:这里面,年份判断是否闰年,一月一号是第一天,一月二号第二天,就是如此累加分析。switch选择流程先学习一波。

    示例代码

    6c487cbb852b

    图片发自简书App

    运行结果

    6c487cbb852b

    图片发自简书App

    反思拓展:这以后代码越写越长怎么办?我怎么贴代码?还是贴图片吗?要不要转到pc端写?15.输入三个整数x,y,z,请把这三个数由小到大输出。

    分析过程:第一个数与第二个数比较,得出较大数,较大数与第三个数比较,得出最大数,然后再将剩下两个数比较,然后考虑次大数与第一个数情况,挺乱的,相比较冒泡排序,这种排很多数的情况,简单,但说起来复杂。

    示例代码

    6c487cbb852b

    图片发自简书App

    运行结果

    6c487cbb852b

    图片发自简书App

    反思拓展:没有写成冒泡排序,代码冗余,这不是优秀代码。16.输出9*9口诀。

    分析过程:循环嵌套,这可比爬虫是循环递归嵌套简单多了。

    示例代码

    6c487cbb852b

    图片发自简书App

    运行结果

    6c487cbb852b

    图片发自简书App

    反思拓展:睡前随便写写,简单小时间段做简单的事,充裕的时间想想复杂问题。17.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

    分析过程:按照数学计算,很容易找到每天剩余桃子的变化规律。但是抽象为编程语言,我的功底不能马上想到。这个应该算递归。反向递归应该可以办到。代码实现用循环做。

    示例代码

    6c487cbb852b

    图片发自简书App

    运行结果:1534

    反思拓展:这样的题目,算简单不得了的了。18.两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

    分析过程:这个算排序吧。a不与x比用代码怎么表示?笔头计算一下就出来了。

    示例代码

    6c487cbb852b

    运行结果

    6c487cbb852b

    反思拓展:遍历,一共九次,排除不符合条件的情况。现在开始在电脑上写。19. 打印出如下图案(菱形)

    *

    ***

    *****

    *******

    *****

    ***

    *

    分析过程:直接一个一个打印输出。

    示例代码:

    6c487cbb852b

    运行结果

    6c487cbb852b

    反思拓展:在for循环里面嵌套用三个并列的for,之间用println换行隔开即可。20.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

    分析过程:用斐波那契数列做分子分母求和。

    示例代码

    6c487cbb852b

    运行结果

    6c487cbb852b

    反思拓展:java的除法和py的除法有点不同。int之间需要完全除尽的时候还需要将其中一个转化为double类型。斐波那契数列之间数字关系就像交换两个数而不能开辟另一个空间一样。

    展开全文
  • java面试java 面试 经典

    热门讨论 2010-06-18 13:42:36
    7. Java 的通信编程,编程(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示? 47 8. 用JAVA实现一种排序,JAVA类实现序列化的方法(二种)? 如在COLLECTION框架中,实现比较要实现什么样的接口? 49...
  • java面试

    2018-01-01 15:35:15
    26. 简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。 14 27. XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 14 28. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 15 29. ...
  • 我知道笔试B是英文水平测试,包括三部分,...题目大概都是在10多个框中放10多个数字然后根据框中的数字来完成图表中流程控制图的逻辑判断和逻辑走向以此来给出它所要求的空的答案 选择题 1:鉴于Java的特点它最适合的计算
  • Java笔试

    2020-07-19 22:11:26
    一、选择题 1.运算 (1)逻辑运算 && 两者都要判断 || 前者为true则后者无需判断 2.JVM (1)equals public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject ...

    一、基础

    1.简介
    • Java和C++都是静态类型的面向对象编程语言
    • Java一律采用Unicode编码方式(字符集),每个字符无论中文还是英文字符都占用2个字节
    • Java的class文件编码为UTF-8(编码规则),而虚拟机JVM编码为UTF-16
    • Java中的char默认采用Unicode编码,所以Java中char占2个字节
    • 程序
    java.exe		java虚拟机
    javadoc.exe		用来制作java文档
    jdb.exe			java调试器
    javaprof.exe	剖析工具
    javac.exe		编译.java文件
    
    2.标识符
    标识符以字母、_或$开头
    
    3.基本数据类型

    在这里插入图片描述

    • boolean默认值为false;占1个字节
    • float类型必带f;如float a=1.5f;
    • double必须带小数,变量除外;如double a=3.0,double b=5.3e12,Double b=t;(其中int t=3;)
    • Interger比较大小
    	在范围[-128,127]true,超过为false
    	例如: 
    		Integer a=120;
    		Integer b=120;
    	
    	则 a==b
    
    • byte
    所有的byte,short,char型的值将被提升为int型,除非操作的2个变量都用final修饰
    示例:
    	byte b1=3, b2=4;
    	final b3=5, b4=6;
    	b1+b3(int),b3+b4(byte)
    
    
    
    • 不同类型优先关系
    byte,short,char-> int -> long -> float -> double
    
    4.关键字
    • 关键字全部都是小写
      在这里插入图片描述
    (1)final
    final修饰变量,则等同于常量,不能再次被赋值
    final修饰方法中的参数,称为最终参数。
    final修饰类,则类不能被继承
    final修饰方法,则方法不能被重写
    
    (2)transient
    • 将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被序列化
    4.条件
    return
    
    5.运算
    (1)逻辑运算
    &&  两者都要判断
    ||  前者为true则后者无需判断
    
    &(1&1=1  1&0=0  0&0=0)
    |(1&1=1  1&0=1  0&0=0)
    ∧   异或   (1&1=0  1&0=1  0&0=1)     (相同为0不同为1)  
        如:143=1110异或0011=1101=13
    a++ 即a=a+1;
    
    <<	左移位
    >>	右移位
    >>> 无符号右移
    
    • Math.round(-11.5)=-11
    • 三元操作符如果遇到可以转换为数字的类型,会做自动类型提升。如Object o1 = (false) ? new Double(1.0) : new Integer(2);得到2.0
    6.异常
    class Throwable implements Serializable
    class Exception extends Throwable
    class Error extends Throwable
    
    return保存值,执行finally,最后返回已保存的值
    
    trytry-catch
    	try-finally
    	try-catch-finally
    
    6.String
    String s=new String("abc");
    如果常量池中存在“abc”则不会创建,只创建1new String("abc")的对象;
    如果常量池中没有,则会创建2个对象。1个是对象的值“xyz”,1个是new String("abc")的对象
    
    String s="welcome"+"to"+"java";
    编译器编译时,直接把"welcome""to"360这三个字面量进行"+"操作得到一个"welcometojava" 常量,并且直接将这个常量放入字符串池中,,这样做实际上是一种优化,将3个字面量合成一个,避免了创建多余的字符串对象(只有一个对象"welcometojava",在字符串常量池中)
    
    public final class String implements Serializable, Comparable<String>, CharSequence
    public final class StringBuilder extends AbstractStringBuilder implements Serializable, CharSequence
    public final class StringBuffer extends AbstractStringBuilder implements Serializable, CharSequence
    
    • 判断相等
            String s1="abc";
            String s2="abc";
            String s3=new String("abc");
            String s4="ab"+"c";
            String s5="ab"+new String("c");
            String s6=s3;
    
            s1==s2	 true
            s2==s3	 false
            s1==s4	 true
            s1==s5   false
            s3==s5   false
            s3==s6   true
    
    • 示例
    String s1=“uml”;
    String s2=“uml”;
    String s3= new String (“uml”);
    String s4= new String (“uml”);
    
    分析:
    s1==s2,比较的是比较的是地址和值,由上图得知两个引用指向的是同一个地址,所以返回 true.
    s3==s4,比较的是两个new出来开辟的空间对象地址,所以值相同,但地址不同,返回 false.
    s1.equals(s3),比较的是内容,返回true
    

    在这里插入图片描述

    7.数组
    • 数组是一个对象,不同类型的数组具有不同的类
    int[] a=new int[]{1,2,3};
    int[] a=new int[100];
    int a[]=new int[100];
    
    • 2个数组用equals方法比较时,比较的是内存的地址
    8.集合

    在这里插入图片描述
    在这里插入图片描述

    class ArrayList<E> extends AbstractList<E> implements List<E>, Cloneable, Serializable
    class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, Serializable
    
    class Vector<E> extends AbstractList<E> implements List<E>, Cloneable, Serializable
    
    interface Set<E> extends Collection<E>
    
    class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
    
    (1)HashMap
    HashMap基于哈希表实现Map接口,允许null
    使用链地址法解决hash冲突
    
    非线程安全
    
    (2)HashTable
    HashTable禁止key或value为null
    
    线程安全
    
    (3)TreeMap
    非线程安全
    
    (4)ConCurrentHashMap
    • ConCurrentHashMap禁止key或value为null
    (5)List
    • ArrayList是动态数组,增加空间时会复制全部数据到新大容量的数组中
    • LinkedList是双向链表,按需分配空间
    • Arraylist默认数组大小是10,扩容后的大小是扩容前的1.5倍,若新创建带初始值,默认就是传入的大小,也就不会扩容
    9.参数传递
    • 参数传递:地址传递、值传递
    • 地址传递:String、数组、对象
    • 值传递:基本数据类型,int,float、double等
    引用传递只改变原变量的内容
    
    值传递:
    	基本类型使用的是值传递类型,调用方法的时候在内存空间的栈中创建一个栈帧,每个栈帧里面保存当前变量的值;
    	当方法执行完成后,栈帧销毁,保存的变量的值也同时就没了,所以int类型的基本变量的值最后没有发生改变
    引用类型:
    	非基本类型使用;
    	调用方法时候传参传递的是对象或者String或者数组的地址(这些对象都是保存在堆中,地址就是堆中相应的地址);
    	当改变发生的时候,地址是不会发生变化的,但是地址所对应的内容是可以发生改变的;
    	这就解释了为什么char数组中的字符发生了变化
    
    String类型不可变:
    	String 类型是引用类型,那么为什么说不可变呢?
    	因为String类型比较特殊,String类型底层使用char类型的数组实现,但是由final修饰,因此不可变化。
    	String 类型的对象存在于jvm的字符串常量池中;
    	想要让String类型的字符串发生改变,就只能在字符串常量池中新建一个String类型的对象,然后将新的对象的地址指向变量。
    	这就解释了为什么String类型的变量没有发生改变
    

    三、类和对象

    (1)Object
    hasCode()    返回该对象的哈希码值
    equals()	 判断某个其它对象是否与此对象相等
    clone()		 返回此对象的一个副本
    toString()	 返回该对象的字符串表示
    finalize()   回收对象所占内存前调用,可临死挣扎一下
    wait()	     导致当前线程等待,直到其它线程调用此对象的notify或notifyAll方法
    notify()	 唤醒在此对象监视器上等待的单个线程
    notifyAll()  唤醒在此对象监视器上等待的所有线程
    
    (2)方法重载
    同一个类中,允许存在1个以上的同名方法,只要参数个数或参数类型不同,与返回值类型无关
    
    (3)方法重写
    • 两同两小原则
    存在于子类与父类之间,方法名相同,参数类型相同
    子类方法返回类型小于等于父类方法返回类型
    
    子类方法抛出异常小于等于父类方法抛出异常
    子类方法访问权限大于等于父类方法访问权限
    
    (4)执行顺序
    1、父类静态代码块(可多个,顺序)
    2、子类静态代码块
    3、父类构造块(可多个,顺序)
    4、父类构造函数
    5、子类构造块(可多个,顺序)
    6、子类构造函数
    
    静态块:用static申明,JVM加载了诶时执行,仅执行一次
    构造块:类中直接用{}定义,每一次创建对象时执行
    执行顺序优先级:静态块 > main() > 构造块 > 构造函数
    (提示)加载完类信息,再实例化
    
    (5)超类即父类,super
    (6)修饰符
    • 修饰符
    **访问权限修饰符:**
    	public:共有访问。对所有的类都可见
    	protected:保护型访问。对同一个包可见,对不同的包的子类可见
    	default:默认访问权限。只对同一个包可见,注意对不同的包的子类不可见
    	private:私有访问。只对同一个类可见,其余都不见
    **非访问权限修饰符:**
    	static 修饰符,用来创建类方法和类变量
    	final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的
    	abstract 修饰符,用来创建抽象类和抽象方法
    	synchronized 用于多线程的同步
    	volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。
    			 而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值
    	transient:序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量
    
    • 形参只能用final修饰
    • 子类能继承父类所有成员,但对于private没有访问权限
    • protected 修饰的成员变量被该类自身、与它在同一个包中的其它类、在其它包中的该类的子类所访问
    (7)抽象类
    • 抽象类可以有构造函数,但不能实例化
    • 抽象类有抽象和非抽象方法,其中抽象方法不能有方法体
    • is-a:继承关系;has-a:从属关系(接口);like-a:组合关系
    • 需要抽象类:
      1个类中有抽象方法则必须申明为抽象类;
      抽象类中的抽象方法必须由其子类实现,若子类不能实现则子类也必须定义为抽象类
      1个类实现1个接口就必须实现其中所有的抽象方法,若不能实现接口所有方法则该类定义为抽象类
    (8)接口
    • 接口无构造函数,不能实例化
    • 成员变量必须public static final,无静态方法(jdk8允许),方法默认public abstract
    • 接口可以多继承; interface D extends A,B,C
    (9)静态与非静态
    静态只能访问静态(变量和方法),非静态无限制
    
    (10)访问权限
    • public > protected > 默认(包访问权限) > private
    (11)内部类

    在这里插入图片描述

    • 成员内部类可直接调用外部类的所有方法(静态方法及非静态方法)
    • 局部内部类如同方法里的变量,没有public、private、static等修饰符
    • 匿名内部类不具有类名,无构造函数,无抽象和静态属性,不能有访问修饰符不能派生出子类
    • 使用示例
    interface Product{
        public double getAge();
        public String getName();
    }
    public class Test {
    
        public void print(Product p){
           System.out.println(p.getName()+","+p.getAge());
        }
    
        public static void main(String[] args){
            Test t=new Test();
            
            //实现接口并实现抽象方法
            t.print(new Product() {
                @Override
                public double getAge() {	//实现方法
                    return 20;
                }
    
                @Override
                public String getName() {	//实现方法
                    return "Kangkang";
                }
            });
        }
    
    }
    
    • 静态内部类不能直接访问外部类的非静态成员
    (12)类关系
    • “IS-A”、“HAS-A”、“USES-A” (是你、有你、用你)
    (15)其它
    getClass().getName();	 包名+类名
    类与类之间只能单继承,但能多层继承
    instanceof 判断前者是否可以类型可以转化为后者
    

    四、线程

    (1)setDaemon
    • setDaemon需写在start之前
     public final void setDaemon(boolean on) {
          checkAccess();
          //判断当前线程是否处于活动状态,若已运行抛异常
          if (isAlive()) {
              throw new IllegalThreadStateException();
          }
          daemon = on;
    }
    
    (2)volatile
    volatile解决变量在多线程之间的可见性,有序性
    轻量级,性能更好,只能修饰变量
    
    (3)synchronized
    synchronized解决多线程之间资源同步问题,保证原子性、可见性,有序性
    多线程访问synchronized会发生阻塞
    修饰方法、代码块
    
    (4)join
    等待该线程终止
    thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程
    比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B
    A.join();      //使调用线程A在此之前执行完毕。
    A.join(1000);  //等待A线程,等待时间是1000毫秒
    
    (5)ThreadLocal
    线程变量
    ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的
    ThreadLocal为变量在每个线程中都创建了一个副本,因此每个线程可以访问自己内部的副本数量
    ThreadLocal存放的值是线程封闭的,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递
    
    ThreadLocalMap使用开放定址法解决hash冲突
    
    (6)线程调度
    线程调度分为协同式调度和抢占式调度;
    java使用抢占式调度,即每个线程由操作系统分配执行时间,线程切换不是线程自身(协同式)决定的,这就是平台独立
    sleep 是线程本身的静态方法,谁调用谁休眠(在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”)
    join 调用后等待线程执行完成(等待调用join方法的线程结束,再继续执行)
    synchroinized 修饰的方法和类,会让没抢到锁的线程停止执行
    yield 让当前执行的线程让出cpu时间片,使当前线程重新回到就绪状态,不释放锁
    wait  在其他线程调用对象的notify或notifyAll方法前,导致当前线程等待
    
    (7)其它
    并发编程的同步器:
    	CountDownLatch	初始时给定一个值,每次调用countDown值减1,当值为0时阻塞的线程恢复执行
    	Semaphore		信号量。用于表示共享资源数量。用acquire()获取资源,用release()释放资源
    	CyclicBarrier	线程到达屏障后等待,当一组线程到达屏障后才一起恢复执行	
    	Exchanger
    
    使线程释放锁资源的操作:
    	wait()
    	join()
    

    五、文件

    在这里插入图片描述

    1.字符流
    • 字符流有缓冲流
    2.字节流
    • 字节流有缓冲流

    六、序列化

    序列化保存的是对象的状态
    静态变量属于类,序列化不保存静态变量
    

    七、socket

    服务器端:
    	1、创建ServerSocket对象,绑定监听端口
    	2、通过accept()方法监听客户端请求
    	3、连接建立后,通过输入流读取客户端发送的请求信息
    	4、通过输出流向客户端发送响应信息
    	5、关闭响应的资源
    客户端:
    	1、创建Socket对象,指明需要连接的服务器的地址和端口号
    	2、连接建立后,通过输出流向服务器发送请求信息
    	3、通过输入流获取服务器响应的信息
    	4、关闭相应资源
    
    Socket s = new Socket(192.168.1.1,8080)
    

    八、JVM虚拟机

    1.java命令
    • java
    javac  编译java文件生成字节码文件
    	示例: javac Test.java   生成   Test.class
    java   运行字节码文件
    	示例: java Test
    
    2.创建对象
    Java内存分为栈内存和堆内存
    
    A a=new A();
    在栈中创建变量a,在堆中创建对象new A(),变量a指向对象地址
    
    
    3.反射
    通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
    通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员。只能访问,不能修改
    Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
    
    4.ClassLoader
    java应用启动过程涉及3个ClassLoader:
    	Bootstrap
    	Extension
    	System
    	
    类装载器需要保证类装载过程的线程安全;
    
    类加载器不加载接口;
    
    双亲委派模式:
    	如果一个类加载器收到了类加载请求,它不会自己先去加载,而是把这个请求委托给父类的加载器去执行;
    	如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器;
    	如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式
    	即每个儿子都很懒,每次有活就丢给父亲去干,直到父亲说这件事我也干不了时,儿子自己想办法去完成,所以默认是父装载
    	
    自定义类加载器实现 继承ClassLoader后重写了findClass方法加载指定路径上的class
    
    5.equals
    public boolean equals(Object anObject) {
         if (this == anObject) {
             return true;
         }
         if (anObject instanceof String) {
             String anotherString = (String)anObject;
             int n = value.length;
             if (n == anotherString.value.length) {
                 char v1[] = value;
                 char v2[] = anotherString.value;
                 int i = 0;
                 while (n-- != 0) {
                     if (v1[i] != v2[i])
                         return false;
                     i++;
                 }
                 return true;
             }
         }
         return false;
     }
    
    (1)判定传入的对象和当前对象是否为同一个对象,如果是就直接返回true.
    (2)判定传入的对象是否为String类型,若不是则返回false;
    (3)判定传入的String值长度与当前的String值长度是否相等,若不相等就返回false;
    (4)循环对比两个字符串的char[]数组,逐个对比字符是否一致,若出现不同字符返回false;
    (5)循环结束都没有出现不同字符,最后返回true;
    
    
    例子:
    String a="hello";	放在常量池中
    String b="hello";	在常量池中寻找
    
    6.私有共享
    私有:
    	程序计数器:		指令
    	java虚拟机栈:	局部变量(基本数据类型变量、对象引用变量)、动态链接
    	本地方法栈:		native方法
    共享:
    	java堆:		对象实例、数组
    	方法区:			类信息、常量、静态变量
    
    7.堆内存
    • 堆内存:新生代(1/3)、老年代(2/3)
    • 新生代:Eden区(8/10)、From survivor(1/10)、To Survivor(1/10)
    8.垃圾回收
    jvm中垃圾回收:scanvenge gc和full GC
    full GC触发的条件:
    	老年代满、持久带满、System.gc()
    
    • CMS
    CMS的GC过程有6个阶段:
    1.初次标记
    2.并发标记
    3.并发可中断预处理
    4.最终重新标记
    5.并发清理
    6.并发重置
    
    (4个并发;2个暂停其它应用程序,无用户线程参与)
    
    9.其它
    java在运行时才进行翻译指令
    this()super()都必须在构造函数第1行
    不能在static方法中调用thissuper
    
    判断一块内存空间是否符合垃圾收集器收集的标准:
    1. 给对象赋值为 null,以下没有调用过。
    2. 给对象赋了新的值,重新分配了内存空间。
    

    九、MySQL

    • 驱动
    Class.forName("com.mysql.jdbc.Driver");
    
    com.mysql.jdbc.Driver				MySQL驱动
    oracle.jdbc.driver.OracleDriver		oracle驱动
    sun.jdbc.odbc.JdbcOdbcDriver		Access驱动
    
    • Statement
    public interface PreparedStatement extends Statement
    public interface CallableStatement extends PreparedStatement
    
    • 关系数据模型
    关系数据模型和对象数据模型之间对应关系:
    	表对应类
    	记录对应对象
    	表的字段对应类的属性
    
    • Result
    结果集Result从1开始遍历
    

    十、正则表达式

    • /D 匹配非数字
    • \d 表示数字,等同于[0-9]
    • ^ 起始符号
    • $ 结束符号
    • X{m} m 个X字符组成,\d{4}表4位数字

    十一、Spring

    • web容器负责将http请求转换为HttpServletRequest对象
    • servlet
    servlet周期包括 初始化、请求处理、销毁
    
    • cookie
    获取cookie的2种方式
    访问方在header中加 Cookie="aa=bb;dd=ee"
    request.getHeader("cookie")
    Cookie[] cookies=request.getCookies();
    

    十二、设计模式

    • 单例模式
    2个基本要点:
    	构造函数私有
    	唯一实例
    
    展开全文
  • Java 虚拟机面试全面解析,《深入理解Java虚拟机》干货版,自己总结,希望能够帮助大家,免费下载~什么是类加载机制? 虚拟机和物理机的区别是什么? 运行时栈帧结构 Java方法调用 什么是方法调用? Java的方法调用,...
  • JAVA面试最全集

    2010-03-13 13:09:10
    判断一个文件或目录是否存在 如何读写文件 7.Java多态的实现(继承、重载、覆盖) 8.编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和...
  • 我知道笔试B是英文水平测试,包括三...题型大概是这样的:题目大概都是在10多个框中放10多个数字,然后根据框中的数字来完成图表中(流程控制图)的逻辑判断和逻辑走向以此来给出它所要求的空的答案。选择题1:鉴于Jav...
  • 我为什么会选择阿里。第一阿里是大厂,实习的经历与经验是其他小公司不能相比的。...题目不算特别难但也不算简单,条件判断一堆,循环逻辑分析也很多。并不是你一看题目就会有思路的。(提醒多刷LeetCode)阿里...
  • 内容查看此隐藏内容查看价格5元立即支付一、单项选择题(共 25 道试题,共 75 分。)1. 下列选择重载函数的不同实现的判断条件中,错误的是A.参数类型不同B. 参数个数不同C. 参数顺序不同D. 参数返回值不同参考答案:...
  • 目录 一、java选择结构 1、if,else 条件判断 2、switch 等价判断 二、局部变量 ...概念:根据已知条件进行逻辑判断,满足条件后执行相应操作。 第一种,基本if选择结构 语法: if(布尔表达式){ ...
  • Java程序员面试宝典pdf

    热门讨论 2013-02-21 13:06:13
    面试130 JSTL提供了哪些逻辑判断标签 223 12.4 小结 225 第13章 Struts、Spring和Hibernate组合( 教学视频:109分钟) 227 13.1 MVC和Struts 227 面试131 什么是MVC设计模式 227 面试132 如何编写一个MVC的...
  • Java基础语法关键字标识符注释常量与变量运算符算术运算符赋值运算符比较运算符逻辑运算符位运算符练习十六进制形式三元运算符流程控制判断结构选择结构语句练习if-switch循环结构whilefor练习其他流程控制语句 ...
  • 顺丰笔试题不多,只有选择题和简答题,45min考完,现在想想,选择题已经忘了,大概的有:给你两个数据库字段,判断是哪个范式。java编译完后会生成什么代码?(type code)还有考了c语言的一些语法,给你一个程序判断...
  • 2.今天做的是比较基础的题,题型有判断题(8),选择题(10),简答题(3),编程(2)逻辑题(2) (ps:感觉做的还不错,有部分基础没有掌握牢固,逻辑题第二道赛马题目现在已经明白了思路) 3.技术面试官,问...
  • 用友在清华的笔试

    2017-09-07 19:16:00
    用友在清华的笔试题(java...1. 选择题:String s1 = new String("test1");String s2 = new String("test2"); 判断if(s1 == s2){};if(s1.equals(s2)){}; 2.智力题:一逻辑学家误入某部落,被囚于牢狱,酋长欲意放行...
  • Java 面试宝典

    2013-02-01 10:02:08
    Java 基础部分..................................................................................................................... 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么...
  • 最新Java面试宝典pdf版

    热门讨论 2011-08-31 11:29:22
    1. 判断第二个日期比第一个日期大 82 2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? ...
  • 6月8日笔试

    2018-06-08 20:36:37
    1、Java逻辑运算符和比较运算符分别有哪些?逻辑运算符两边必须是boolean类型的变量、常量、表达式;比较运算符用于判断两个变量或者常量的大小,返回结果为 true/false。左右两边的操作数只能是数值.2、程序设计有...
  • Java面试宝典2010版

    2011-06-27 09:48:27
    1. 判断第二个日期比第一个日期大 2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? 否则...
  • 文章目录程序流程控制练习笔试彩票结婚判断switch-case结构的基本使用练习 程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组 合成能完成一定功能的小逻辑模块。 • 其流程控制...
  • 1. 判断第二个日期比第一个日期大 82 2. 用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。 83 3、HTML 的 form 提交之前如何验证数值文本框的内容全部为数字? ...
  • 第5章继续讨论Java中控制结构(for结构,switch选择结构和do/while循环结构)。 本章用具体的代码程序解释了break和continue语句。 本章也极少了逻辑操作符。 本章也包含了大量数学,图形和商业应用程序的习题。 ...
  • 第11章 简单Java上机面试 11.1 打印九九乘法口诀表 11.2 获得任意一个时间的下一天的时间 11.3 将某个时间以固定格式转化成字符串 11.4 怎样截取字符串 11.5 怎样实现元素互换 11.6 怎样实现元素排序 11.7 怎样...
  • 文章目录程序流程控制练习笔试彩票结婚判断switch-case结构的基本使用练习 程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组 合成能完成一定功能的小逻辑模块。 • 其流程控制...
  • 三、判断题( 每小1分,共15分 ) 1.类头定义包含的四个部分分别为:访问控制修饰符、类名说明、父类名说明和接口名的说明,它们中的任何一个都是不能缺少的。 2.在 Applet 的坐标系中,(0,0) 代表输出窗口左上角...

空空如也

空空如也

1 2 3 4
收藏数 69
精华内容 27
关键字:

java逻辑判断选择题

java 订阅