精华内容
下载资源
问答
  • 我只能先在数据库中根据ID查出user 然后根据前台输入获取pwd 和add 并且set到user中,ID和name值仍是数据库中值没变,最后通过 这个ibatis语句 把user 给update,我刚学对ibatis机制还是不太了解,不知道这样对...
  • 我要在数据库里查数据 规则是这样: 我要输入“上海 徐汇”就能查出所有带“上海 徐汇”字样数据(另外,条件不一定只有2个,比如“上海 徐汇 办事处”写可以查) 我现在是这样写: ...怎么写?
  • //这里的输入的s我希望在下面的SQL查询语句用到 select(); } static void select(){ Connection Conn = DBUtil.open(); String sql = "SELECT * FROM person where Deptno='s'"; //Deptno='s' 的s我...
  • 从这开始,我们进入Java教学: 现如今我们工作生活方方面面都离不开手机、电脑,像里面各式各样软件我们是非常熟悉,比如玩游戏扫雷、蜘蛛纸牌、文档用Word、购物某宝等等,那么这些软件是怎么做出来...

    第一讲

    你好! 这是Java教学的第一课,之前写过几篇二进制的前戏,掌握二进制对之后的学习理解会有更好的帮助。
    从这开始,我们进入Java教学: 现如今我们工作生活的方方面面都离不开手机、电脑,像里面各式各样的软件我们是非常熟悉的,比如玩游戏的扫雷、蜘蛛纸牌、写文档用的Word、购物的某宝等等,那么这些软件是怎么做出来的呢?其实就是用的计算机语言编程写出来的,那,什么是计算机语言?其实就是计算机能读懂的语言,正像我们现实生活中有各种人的语言,比如汉语、英语、德语等等,计算机语言也有很多种,那我们这来学习的就是Java

    键盘录入的基本格式讲解(掌握)

    • 为什么要使用键盘录入数据
      • 为了让程序的数据更符合开发的数据
      • 让程序更灵活一下
    • 如何实现键盘录入呢?
      • 先照格式来。
      • 导包
        • 格式:
          • import java.util.Scanner;
        • 位置:
          • 在class上面。
      • 创建键盘录入对象
        • 格式:
          • Scanner sc = new Scanner(System.in);
      • 通过对象获取数据
        • 格式:
          • int x = sc.nextInt();
    • 案例演示
      • 键盘录入1个整数,并输出到控制台。
    • 自我练习
      • 键盘录入2个整数,并输出到控制台。

    在这里插入图片描述
    如上演示:当运行程序后,程序会将main方法中的代码自上而下运行,但是,当运行到scan.nextInt() 的时候,程序会卡在这里,你可以看到光标在闪,他卡在这里干嘛呢? 等待你输入一个数字,你输入数字后,程序继续往下运行

    import java.util.Scanner;
    public class ScanDemo{
    	public static void main(String[] args){
    		//类型  变量名 = XXX
    		Scanner scan = new Scanner(System.in);
    		System.out.println("请输入一段你最爱的数字");
    		int x = scan.nextInt();
    		System.out.println("您输入的数字为:"+x);
    		System.out.println("OVER");
    
    	}
    
    }
    

    交换值

    如何交换两个变量的值呢?
    这里举个很简单的例子,就像我们现在有一杯可乐,还有一杯82年的拉菲,我们要把这两杯交换,怎么交换呢?我们可以使用第三个杯子,先把可乐倒入第三个杯子中,再把拉菲倒入之前装可乐的杯子,最后把可乐倒进刚才装拉菲的杯子即可

    public class Demo5{
    	public static void main(String[] args){
    		int i = 9;
    		int j = 88;
    		System.out.println("i的值为:"+i+",j的值为:"+j);
    		int k;
    		//1.把i赋值给空的k
    		k = i;
    		//2.把j的值赋值给i
    		i = j ;
    		//3.把k的值赋值给j
    		j = k;
    		System.out.println("交换后!!i的值为:"+i+",j的值为:"+j);
    		
    	}
    }
    

    特殊的String

    String是一个比较特殊的类型,他有两种赋值方式,第一种跟我们之前学的=赋值类似,另一种是使用new的方式赋值,看如下代码

    public class StringDemo{
    	public static void main(String[] args){
    		//类型 变量名 =xxx;
    		/*String str = "你好啊?";		
    		String str2 = new String("你好啊?");
    		String str3 = "你好啊?";
    		System.out.println(str);
    		System.out.println(str2);
    		System.out.println(str3);
    		System.out.println(str == str2);//false
    		System.out.println(str == str3);*///true
    		
    		/*int i = 9;
    		double d = 9.0;
    		System.out.println(i ==d);*/
    
    
    		/*char c = 'a';
    		int i = 97;
    		System.out.println(c == i );*/
    
    		int i = -2;
    		byte b = -2;
    		System.out.println(i == b);
    
    
    
    		P1:
    		str,str2,str3都是String类型的变量
    		要使得
    		str == str2结果为false
    		str == str3结果为false
    		str3 == str2结果为true
    		请定义str,str2,str3
    
    	}
    }
    

    看上面代码演示的,我们发现 只要使用new String(“xxx”)的方式出来的字符串变量,使用==跟其他的字符串变量判断的话,得到的结果都是false,实际上,我们要判断两个字符串是否一样的话,不应该使用==来判断,而是需要使用equals来判断,如下:

    public class Test1{
    	public static void main(String[] args){
    		/*
    		str,str2,str3都是String类型的变量
    		要使得
    		str == str2结果为false
    		str == str3结果为false
    		str3 == str2结果为true
    		请定义str,str2,str3
    		*/
    		//每new 一次,都会在堆内存空间创建一个新的
    		String str2 = "a";
    		String str3 = "a";
    		String str = new String("a");
    		System.out.println(str == str2);
    		System.out.println(str == str3);
    		System.out.println(str3 == str2);
    		//String使用equals方法比较  
    		//比较他们的字符串的值是否一样
    		System.out.println("使用equals方法比较:"+str.equals(str2));
    
    		String ss = new String("abc");
    		String ss2 = new String("abc");
    		System.out.println("两个new比较:"+ss.equals(ss2));
    
    	}
    
    
    }
    

    课中练习

    然后再做两个插入练习来多打打代码吧

    import java.util.Scanner;
    public class Test2{
    	public static void main(String[] args){
    		/*
    		P2:使用输入语句输入一个三位数字
    		输出出这个数字个位,十位,百位
    		*/
    		Scanner scan = new Scanner(System.in);
    		System.out.println("请输入一个三位数");
    		int i = scan.nextInt();
    		System.out.println("个位:"+i%10);
    		System.out.println("十位:"+i/10%10);
    		System.out.println("百位:"+i/100%10);
    
    	}
    
    }
    
    import java.util.Scanner;
    public class IfDemo{
    	public static void main(String[] args){
    		//有两个变量 1个是i
    		//一个是j
    		//假如i>j那么输出一句  你大你牛
    		//否则的话 ,你小你开心
    
    		//int i = 9;
    		//int j = 9;
    		
    //这个小括号中写的是条件,不管你写什么鬼,
    //只要能得到一个boolean类型的结果就行
    		/*if(i > j){
    			System.out.println("你大你牛逼");
    		}else{
    			System.out.println("你小你开心");
    		}*/
    
    	//练习1 输入一个数,如果这个数大于100,则输出一句,破百啦
    	//否则,输出一句,太小了
    		/*Scanner scan = new Scanner(System.in);			
    		System.out.println("请输入一个数");
    		int i = scan.nextInt();
    		if(i >100){
    			System.out.println("破百");
    		}else{
    			System.out.println("小了");
    		}*/
    
    
    
    
    
    	//练习2,输入一个数,如果这个数是奇数,那么输出 这个数为奇数
    		//否则输出 这个数为偶数
    		Scanner scan = new Scanner(System.in);
    		System.out.println("请输入一个数");
    		int i =scan.nextInt();
    		if(i%2 == 0 ){
    			System.out.println("您输入的数字是偶数");
    		}else{
    			System.out.println("您输入的数是奇数");
    		}
    
    	}
    }
    

    顺序结构语句(了解)

    • 什么是流程控制语句
      • 流程控制语句:可以控制程序的执行流程。
    • 流程控制语句的分类
      • 顺序结构
      • 选择结构
      • 循环结构
    • 顺序结构执行流程:
      • 从上往下,代码一行一行依次执行。

    选择结构if语句注意事项(掌握)

    • 案例演示
      • 比较表达式无论简单还是复杂,结果必须是boolean类型
      • if语句控制的语句体如果是一条语句,大括号可以省略;
        • 如果是多条语句,就不能省略。建议永远不要省略。
      • c:一般来说:有左大括号就没有分号,有分号就没有左大括号

    选择结构if语句格式1及其使用(掌握)

    • 选择结构的分类
      • if语句
      • switch语句
    • if语句有几种格式
      • 格式1
      • 格式2
      • 格式3
    • if语句的格式1
    	if(比较表达式) {
    		语句体;
    	}
    
    • 执行流程:
      • 先计算比较表达式的值,看其返回值是true还是false。
      • 如果是true,就执行语句体;
      • 如果是false,就不执行语句体;

    选择结构if语句注意事项(掌握)

    • 案例演示
      • 比较表达式无论简单还是复杂,结果必须是boolean类型
      • if语句控制的语句体如果是一条语句,大括号可以省略;
        • 如果是多条语句,就不能省略。建议永远不要省略。
      • c:一般来说:有左大括号就没有分号,有分号就没有左大括号

    选择结构if语句格式及其使用(掌握)

    • if语句的格式2
    		if(比较表达式) {
    			语句体1;
    		}else {
    			语句体2;
    		}
    
    • 执行流程:
      • 首先计算比较表达式的值,看其返回值是true还是false。
      • 如果是true,就执行语句体1;
      • 如果是false,就执行语句体2;
    • 案例演示
      • 获取两个数据中较大的值

      • 判断一个数据是奇数还是偶数,并输出是奇数还是偶数

      • 注意事项:else后面是没有比较表达式的,只有if后面有。

    if语句的格式和三元的相互转换问题(掌握)

    • 案例演示
      • if语句和三元运算符完成同一个效果
    • 案例演示
      • if语句和三元运算符的区别

      • 三元运算符实现的,都可以采用if语句实现。反之不成立。

      • 什么时候if语句实现不能用三元改进呢?

        • 当if语句控制的操作是一个输出语句的时候就不能。
        • 为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。

    选择结构if语句格式及其使用(掌握)

    • if语句的格式3:
    		if(比较表达式1) {
    			语句体1;
    		}else if(比较表达式2) {
    			语句体2;
    		}else if(比较表达式3) {
    			语句体3;
    		}
    		...
    		else {
    			语句体n+1;
    		}
    
    • 执行流程:
      • 首先计算比较表达式1看其返回值是true还是false,

      • 如果是true,就执行语句体1,if语句结束。

      • 如果是false,接着计算比较表达式2看其返回值是true还是false,

      • 如果是true,就执行语句体2,if语句结束。

      • 如果是false,接着计算比较表达式3看其返回值是true还是false,

      • 如果都是false,就执行语句体n+1。

    • 注意事项:最后一个else可以省略,但是建议不要省略,可以对范围外的错误值提示

    选择结构if语句的嵌套使用(掌握)

    • 案例演示
      • 需求:获取三个数据中的最大值
      • if语句的嵌套使用。

    选择结构switch语句的格式及其解释(掌握)

    • switch语句的格式
    		switch(表达式) {
    		      case 值1:
    				语句体1;
    				break;
    			    case 值2:
    				语句体2;
    				break;
    			    …
    			    default:	
    				语句体n+1;
    				break;
    	    }
     
    • switch语句的格式解释
    • 面试题
      • byte可以作为switch的表达式吗?
      • long可以作为switch的表达式吗?
      • String可以作为switch的表达式吗?
    • 执行流程
      • 先计算表达式的值
      • 然后和case后面的匹配,如果有就执行对应的语句,否则执行default控制的语句

    选择结构switch语句的练习(掌握)

    • 整数(给定一个值,输出对应星期几)
    • 字符串 匹配是否退出

    选择结构switch语句的注意事项(掌握)

    • 案例演示
      • case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
      • default可以省略吗?
        • 可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
        • 特殊情况:
          • case就可以把值固定。
          • A,B,C,D
      • break可以省略吗?
        • 最后一个可以省略,其他最好不要省略
        • 会出现一个现象:case穿透。
        • 最终我们建议不要省略
      • default一定要在最后吗?
        • 不是,可以在任意位置。但是建议在最后。
      • switch语句的结束条件
        • 遇到break就结束了
        • 执行到switch的右大括号就结束了

    选择结构switch语句练习(掌握)

    • 看程序写结果:
    		int x = 2;
    		int y = 3;
    		switch(x){
    			default:
    				y++;
    				break;
    			case 3:
    				y++;
    			case 4:
    				y++;
    		}
    		System.out.println("y="+y);
    
    • 看程序写结果:
    		int x = 2;
    		int y = 3;
    		switch(x){
    			default:
    				y++;
    			case 3:
    				y++;
    			case 4:
    				y++;
    		}
    		System.out.println("y="+y);
    

    选择结构if语句和switch语句的区别(掌握)

    • 总结switch语句和if语句的各自使用场景
    • switch建议判断固定值的时候用
    • if建议判断区间或范围的时候用
    • 案例演示
      • 分别用switch语句和if语句实现下列需求:
        • 键盘录入月份,输出对应的季节
          春季 1-3
          夏季 4-6
          秋季 7-9
          冬季 10-12

    课堂练习

    1. 练习双项if
      1. 从键盘录入两个数并判断大小,按照从大到小输出
      2. 从键盘录入一个数判断该数是奇数还是偶数
        a b c a + b >c &&  a+ c >b &&   b+c >a
      3. 从键盘录入3个数.判断这三个数是否可以构成3角形.
    2. 练习嵌套if
      1. 根据年龄判断人的生命期:60岁以上—老年人;40~60岁—中年人;20~40岁—青年人;10~20岁—青少年;10岁以下—儿童,

    预习

    1. for的三个表达式的写法以及含义.思考是否可以省略
    2. while的写法.
    3. do-while的写法
    展开全文
  • java核心包:java.lang包 为什么需要 package? 为了解决类之间重名问题 为了便于管理类:合适类位于合适包 package怎么用? 通常是类第一句非注释性语句 包名:域名倒着,再加上模块名,并与...

    目录

    package包的用法

    生成自己的API文档

    接受键盘输入

    Scanner类的使用

    面向对象

    框架图

    面向过程和面向对象的区别和联系

    总结

    范例

    引用类型

    类的属性

    类的方法


    package包的用法

    API:Application Programming Interface应用程序编程接口

    java中的核心包:java.lang包

    为什么需要 package?
            为了解决类之间的重名问题
            为了便于管理类:合适的类位于合适的包
    package怎么用?
            通常是类的第一句非注释性语句
            包名:域名倒着写,再加上模块名,并与内部管理类
    注意事项:
            写项目时都要加包,不要使用默认包
            com.gao和 com. gao.car,这两个包没有包含关系,是两个完全独立的包只是逻辑上看起来后者是前者的部分

    包和文件夹一样

    所有的类都要放到包里面

    生成自己的API文档

    特殊的注释:

            文档注释:/**
    使用 JAVADOC生成API文档

            解决问题:代码和文档的分离

    常用的java注释标签:
            @ Author作者
            @ version版本
            @ param参数
            @ return返回值的含义
            @ throws抛出异常描述
            @ deprecated废弃。建议用户不在使用该方法

    eg:

    创建包和类:

    输入/**添加文档,在中间上一行解释该类的作用,在中间下方加入其它标签:

    输出文档:项目右键——Export——JAVA——Javadoc

    接受键盘输入

    Scanner类的使用

    eg:

    import java.util.Scanner;
    
    ~~~
    
    Scanner s = new Scanner(System.in);
    String str = s.next();    //程序运行到next会阻塞,等待键盘的输入
    		
    System.out.println("刚才键盘输入:"+str);

    运行结果:

    12123
    刚才键盘输入:12123 

    导入Scanner包,System.in为接收键盘输入,System.out为输出控制台 

    eg2:

    public static void test02(){
    	Scanner s = new Scanner(System.in);
    	System.out.println("请输入一个加数:");
    	int a = s.nextInt();
    	System.out.println("请输入另一个加数:");
    	int b = s.nextInt();
    	int sum = a+b;
    	System.out.println("计算结果,和为:"+sum);
    }
    
    public static void main(String[] args) {
    	test02();
    }

     运行结果:

    请输入一个加数:
    233
    请输入另一个加数:
    322
    计算结果,和为:555

    面向对象

    面向对象(OOP)的本质:

            以类的方式组织代码,以对象的方式组织(封装)数据。

    面向对象思维:OOA,OOD

    对象:是具体的事物
    类:是对对象的抽象(抽象  抽出象的部分)
    先有具体的对象,然后抽象各个对象之间象的部分,归纳出类通过类再认识其他对象

    框架图

    面向过程和面向对象的区别和联系

      面向过程 面向对象
    区别 事物比较简单,可以用线性的思维去解决 事物比较复杂,使用简单的线性思维无法解决
    共同点 面向过程和面向对象都是解决实际问题的一种思维方式
    二者相辅相成,并不是对立的
    解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系、方便我们分析整个系统;具体到微观操作,仍然使用面向过程方式来处理

    总结

    对象和类的关系:特殊到一般,具体到抽象。
    类:我们叫做 class

    对象:我们叫做 Object, Instance(实例)。以后我们说某个类的对象,某个类的实例。是一样的意思。


    类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
    类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。
    对象是Java程序的核心,在Java程序中“万事万物皆对象"

    JDK提供了很多类供编程人员使用,编程人员也可定义自己的类。

    范例

    public class Student {
    	//静态的数据
    	String name;
    	int id;
    	int age;
    	String gender;
    	int weight;
    	
    	//动态的行为
    	public void study(){
    		System.out.println(name+"在学习");
    	}
    	
    	public void sayHello(String sname){
    		System.out.println(name+"向"+sname+"说:你好!");
    	}
    	
    	public static void main(String[] args) {
    		Student s1 = new Student();
    		s1.name = "明明";
    		s1.study();
                    s1.sayHello("梨花");
            
    		Student s2 = new Student();
    		s2.age = 18;
    		s2.name = "老马";
    	}
    }

    引用类型

    Java语言中除基本类型之外的变量类型都称之为引用类型。
    Java中的对象是通过引用 reference对其操作的

    类的属性

    属性   field,或者叫成员变量

    属性用于定义该类或该类对象包含的数据或者说静态属性
    属性作用范围是整个类体

    在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。(数值:0,0.0    char:/u0000    boolean:false    所有引用类型:null )

    局部变量需要手动初始化

    属性定义格式:
    (修饰符)    属性类型    属性名  =  (默认值)

    类的方法

    面向对象中,整个程序的基本单位是类,方法是从属于类的。
    方法定义格式:
    【修饰符】 方法返回值类型  方法名(形参列表){
            //n条语句

    }

    JAVA中方法参数传递:值传递

    展开全文
  • 拿我们最常用登录SQL语句来说,我们可能会下面SQL语句: select * from user where username=’’ and password=’’ 我们需要用户传入username和password。 怎么对这个SQL语句进行注入呢? 很简单,当用户...

    SQL注入
    什么是SQL注入呢?

    SQL注入的意思是,用户输入了某些参数,最终导致SQL的执行偏离了程序设计者的本意,从而导致越权或者其他类型的错误。

    也就是说因为用户输入的原因,导致SQL的涵义发送了变化。

    拿我们最常用的登录的SQL语句来说,我们可能会写下面的SQL语句:

    select * from user where username=’’ and password=’’
    我们需要用户传入username和password。

    怎么对这个SQL语句进行注入呢?

    很简单,当用户的username输入是下面的情况时:

    somebody’ or ‘1’='1
    那么整个SQL语句将会变成:

    select * from user where username=‘somebody’ or ‘1’=‘1’ and password=’’
    如果somebody是一个有效的用户,那么or后面的语言完全不会执行,最终导致不校验密码就返回了用户的信息。

    同样的,恶意攻击者可以给password输入下面的内容可以得到同样的结果:

    ’ or ‘1’='1
    整个SQL解析为:

    select * from user where username=‘somebody’ and password=’’ or ‘1’=‘1’
    这条语句将会返回所有的用户信息,这样即使不知道确定存在的用户名也可以通过SQL语句的判断。

    这就是SQL注入。

    java中的SQL注入
    java中最常用的就是通过JDBC来操作数据库,我们使用JDBC创建好连接之后,就可以执行SQL语句了。

    下面我们看一个java中使用JDBC SQL注入的例子。

    先创建一个通用的JDBC连接:

    public Connection getConnection() throws ClassNotFoundException, SQLException {
        Connection con = null;
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("数据库驱动加载成功");
            con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mysql?characterEncoding=UTF-8", "root", "");
            System.out.println("数据库连接成功");
          return con;
    }
    

    然后再自己拼装SQL语句然后调用:

    public void jdbcWithInjection(String username,char[] password) throws SQLException, ClassNotFoundException {
    Connection connection = getConnection();
    if (connection == null) {
    // Handle error
    }
    try {
    String pwd = encodePassword(password);

            String sqlString = "SELECT * FROM user WHERE username = '"
                    + username +
                    "' AND password = '" + pwd + "'";
            Statement stmt = connection.createStatement();
            ResultSet rs = stmt.executeQuery(sqlString);
    
            if (!rs.next()) {
                throw new SecurityException(
                        "User name or password incorrect"
                );
            }
        } finally {
            try {
                connection.close();
            } catch (SQLException x) {
            }
        }
    }
    

    上面的例子中,只有username会发生注入,password不会,因为我们使用了encodePassword方法对password进行了转换:

    public String encodePassword(char[] password){
    return Base64.getEncoder().encodeToString(new String(password).getBytes());
    }
    使用PreparedStatement
    为了防止SQL注入,我们一般推荐的是使用PreparedStatement,java.sql.PreparedStatement可对输入参数进行转义,从而防止SQL注入。

    注意,一定要正确的使用PreparedStatement,如果是不正确的使用,同样会造成SQL注入的结果。

    下面看一个不正确使用的例子:

    String sqlString = “SELECT * FROM user WHERE username = '”
    + username +
    “’ AND password = '” + pwd + “’”;
    PreparedStatement stmt = connection.prepareStatement(sqlString);
    ResultSet rs = stmt.executeQuery();
    上面的代码中,我们还是自己进行了SQL的拼装,虽然最后我们使用了preparedStatement,但是没有达到效果。

    正确使用的例子如下:

    String sqlString =
    “select * from user where username=? and password=?”;
    PreparedStatement stmt = connection.prepareStatement(sqlString);
    stmt.setString(1, username);
    stmt.setString(2, pwd);
    ResultSet rs = stmt.executeQuery();
    我们需要将用户输入作为参数set到PreparedStatement中去,这样才会进行转义。

    XML中的SQL注入
    可扩展标记语言(XML)旨在帮助存储,结构化和传输数据。 由于其平台独立性,灵活性和相对简单性,XML已在许多应用程序中得到使用。 但是,由于XML的多功能性,它容易受到包括XML注入在内的各种攻击的攻击。

    那么什么是XML注入呢?我们举个例子:

    Iphone20 5000.0 1 上面的例子中,我们使用了XML定义了一个iphone20的价格和数量。一个iphone20 5000块。

    上面的XML中,如果quantity是用户输入的数据的话,那么用户可以这样输入:

    120.01
    最后得出的XML文件如下:

    Iphone20 5000.0 1 20.01 一般来说,我们在解析XML的过程中,如果发现有重复的tag,那么后面的tag会覆盖前面的tag。

    结果就是1个iphone20现在的价格是20块,非常划算。

    XML注入的java代码
    我们看下XML的注入在java代码中是怎么实现的:

    public String createXMLInjection(String quantity){
        String xmlString = "<item>\n<name>Iphone20</name>\n"
                + "<price>5000.0</price>\n" + "<quantity>" + quantity
                + "</quantity></item>";
        return xmlString;
    }
    

    可以看到我们直接使用用户输入的quantity作为XML的拼接,这样做很明显是有问题的。

    怎么解决呢?有两种方法。

    第一种方法
    第一种方法就是对用户输入的quantity进行校验:

    public String createXML(String quantity){
        int count = Integer.parseUnsignedInt(quantity);
        String xmlString = "<item>\n<name>Iphone20</name>\n"
                + "<price>5000.0</price>\n" + "<quantity>" + count
                + "</quantity></item>";
        return xmlString;
    }
    

    上面代码中,我们对quantity进行了Integer的转换,从而避免了用户的非法输入。

    第二种方法
    第二种方法是使用XML Schema,来对生成的XML进行格式校验。

    先看一下我们改怎么定义这个XML Schema:

    <xs:schema xmlns:xs=“http://www.w3.org/2001/XMLSchema”>
    <xs:element name=“item”>
    xs:complexType
    xs:sequence
    <xs:element name=“name” type=“xs:string”/>
    <xs:element name=“price” type=“xs:decimal”/>
    <xs:element name=“quantity” type=“xs:nonNegativeInteger”/>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:schema>
    上面我们定义了一个XML element的序列sequence。如果用户输入了非定义格式的其他XML,就会报错。

    我们看下相对应的java代码该怎么写:

    StreamSource ss = new StreamSource(new File(“schema.xsd”));
    Schema schema = sf.newSchema(ss);
    SAXParserFactory spf = SAXParserFactory.newInstance();
    spf.setSchema(schema);
    SAXParser saxParser = spf.newSAXParser();
    XMLReader reader = saxParser.getXMLReader();
    reader.setContentHandler(defHandler);
    reader.parse(xmlStream);
    龙华大道1号 http://www.kinghill.cn/Dynamics/2106.html

    展开全文
  • java面试宝典

    2013-02-28 16:04:01
    75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private ...
  • 第6章 Java的类(Class)和对象(Object) 132 教学视频:59分钟 6.1 驾驶汽车向类(Class)的世界进发 132 6.1.1 汽车带来的问题 132 6.1.1 类的组成 134 6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 ...
  • java面试题典 java 面试题 经典

    热门讨论 2010-06-18 13:42:36
    31. Java的接口和C++的虚类的相同和不同处。 12 32. Java中的异常处理机制的简单原理和应用。 12 33. 垃圾回收的优点和原理。并考虑2种回收机制。 12 34. 你所知道的集合类都有哪些?主要方法? 13 35. 描述一下JVM...
  • java面试宝典2012

    2012-12-16 20:43:41
    给一个 Bean message 属性, 字符串类型, 注入值为 "Hello" XML 配置文件该怎么写? 137 19、Jdo是什么? 137 20、什么是springIOC AOP 137 21、STRUTS工作流程! 137 22、spring 与EJB区别!! 137 八. ...
  • Java面试宝典-经典

    2015-03-28 21:44:36
    给一个 Bean message 属性, 字符串类型, 注入值为 "Hello" XML 配置文件该怎么写? 125 19、Jdo是什么? 125 20、什么是springIOC AOP 126 21、STRUTS工作流程! 126 22、spring 与EJB区别!! 126 八. ...
  • 最新Java面试宝典pdf版

    热门讨论 2011-08-31 11:29:22
    给一个 Bean message 属性, 字符串类型, 注入值为 "Hello" XML 配置文件该怎么写? 125 19、Jdo是什么? 125 20、什么是springIOC AOP 126 21、STRUTS工作流程! 126 22、spring 与EJB区别!! 126 八. ...
  • JAVA面试宝典2010

    2011-12-20 16:13:24
    给一个 Bean message 属性, 字符串类型, 注入值为 "Hello" XML 配置文件该怎么写? 125 19、Jdo是什么? 125 20、什么是springIOC AOP 126 21、STRUTS工作流程! 126 22、spring 与EJB区别!! 126 八. ...
  • <%@page import="java.sql.*" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE ...
  • Java面试宝典2010版

    2011-06-27 09:48:27
    给一个 Bean message 属性, 字符串类型, 注入值为 "Hello" XML 配置文件该怎么写? 19、Jdo是什么? 20、什么是springIOC AOP 21、STRUTS工作流程! 22、spring 与EJB区别!! 八. 软件工程与设计...
  • Java面试宝典2012版

    2012-12-03 21:57:42
    给一个 Bean message 属性, 字符串类型, 注入值为 "Hello" XML 配置文件该怎么写? 125 19、Jdo是什么? 125 20、什么是springIOC AOP 126 21、STRUTS工作流程! 126 22、spring 与EJB区别!! 126 ...
  • 第6章 Java的类(Class)和对象(Object) 132 教学视频:59分钟 6.1 驾驶汽车向类(Class)的世界进发 132 6.1.1 汽车带来的问题 132 6.1.1 类的组成 134 6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 ...
  • 第6章 Java的类(Class)和对象(Object) 132 教学视频:59分钟 6.1 驾驶汽车向类(Class)的世界进发 132 6.1.1 汽车带来的问题 132 6.1.1 类的组成 134 6.1.3 使用自定义的Car类 136 6.1.4 类和对象 139 ...
  • Java面试宝典2012新版

    2012-06-26 19:20:00
    给一个 Bean message 属性, 字符串类型, 注入值为 "Hello" XML 配置文件该怎么写? 125 19、Jdo是什么? 125 20、什么是springIOC AOP 126 21、STRUTS工作流程! 126 22、spring 与EJB区别!! 126 八. ...
  • Java面试笔试资料大全

    热门讨论 2011-07-22 14:33:56
    给一个 Bean message 属性, 字符串类型, 注入值为 "Hello" XML 配置文件该怎么写? 125 19、Jdo是什么? 125 20、什么是springIOC AOP 126 21、STRUTS工作流程! 126 22、spring 与EJB区别!! 126 八. ...
  • 给一个 Bean message 属性, 字符串类型, 注入值为 "Hello" XML 配置文件该怎么写? 125 19、Jdo是什么? 125 20、什么是springIOC AOP 126 21、STRUTS工作流程! 126 22、spring 与EJB区别!! 126 八. ...
  • 给一个 Bean message 属性, 字符串类型, 注入值为 "Hello" XML 配置文件该怎么写? 125 19、Jdo是什么? 125 20、什么是springIOC AOP 126 21、STRUTS工作流程! 126 22、spring 与EJB区别!! 126 八. ...
  • java基础题 很全面

    2009-05-09 09:24:24
    38. Java的接口和C++的虚类的相同和不同处。 11 39. Java中的异常处理机制的简单原理和应用。 11 40. 垃圾回收的优点和原理。并考虑2种回收机制。 11 41. 你所知道的集合类都有哪些?主要方法? 12 42. 描述一下JVM...
  • 疯狂JAVA讲义

    2014-10-17 13:35:01
    1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6 1.3.2 Java程序的运行机制和JVM 6 1.4 开发...
  • java 面试题 总结

    2009-09-16 08:45:34
    它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是...
  • JAVA自学之路

    2012-09-21 20:39:46
    有不少的同学发信给我,和我探讨java的自学过程应该是什么样的,毕竟有很多人因为各种各样的原因不能参加培训。我试着给出自己的见解,抛砖引玉吧。 这个路线图是给那些为了就业的人准备的,如果只是兴趣,不一定照...
  • Java课件以及代码

    2009-12-06 09:40:49
    Java的基本语法单位  空白、注释及语句  空白  换行符及回车键、空格键、水平定位键(tab)都是空白。Java程序的元素之间可插入任意数量的空白,编译器将忽略掉多余的空白  程序中除了加入适当的空白外,还...
  • Java基础系列--04

    2021-01-05 20:28:15
    Java程序中,默认顺序执行以分号结尾的语句。但实际上实现某些功能我们需要使用循环,判断等。所以我们需要有流程控制语句,来对程序流程进行调整。 **常用控制结构有:**顺序结构,分支结构,循环结构。 **顺序...

    系列持续更新,敬请关注!
    阅读原文体验更加原文链接
    Java基础系列01–Java介绍
    Java基础系列02–常量变量
    Java基础系列03–数据类型转换,运算符
    Java基础系列04–选择语句,循环语句
    Java基础系列05–数组
    Java基础系列06–方法

    数据输入

    之前给变量赋值都是直接在代码中写固定的值。怎么通过键盘给变量赋值呢?一般使用Scanner类。其用法如下。
    在这里插入图片描述

    Java程序中,默认顺序执行以分号结尾的语句。但实际上实现某些功能我们需要使用循环,判断等。所以我们需要有流程控制语句,来对程序流程进行调整。
    **常用的控制结构有:**顺序结构,分支结构,循环结构。
    **顺序结构:**默认执行顺序,按语句的顺序从上到下依次执行。

    分支结构

    分支结构包括:1.if语句。2.switch语句。
    1.if语句,有三种常用形式:
    在这里插入图片描述
    这里为了大家好理解,在代码中为大家详细讲解,大家可以看下面的图片。(所有的Demo可在后台回复【示例】获取)
    在这里插入图片描述
    2.switch语句
    switch语句格式如下:

    switch(表达式) {
    case 常量值1:
    语句体1;
    break;
    case 常量值2:
    语句体2;
    break;

    default:
    语句体n+1;
    break;
    }
    **Switch语句执行流程:**首先计算出表达式的值。其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
    在这里插入图片描述
    **注意:**1.switch语句中,表达式的数据类型,可以是byte,short,int,char,enum(枚举),JDK7后可以接收字符串。2.在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。(第二点称为case穿透)

    循环结构

    **循环结构:**循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。
    循环结构的组成:1.初始化语句(就是对循环变量进行初始化(循环变量就是控制循环次数的变量))。2.循环条件判断语句(就是判断是否要进行循环执行(就是布尔表达式))。3.循环体语句(就是循环执行的代码)。4.步进语句(也叫条件控制语句,每次循环体执行后改变循环变量的值)。
    循环结构,常用有三个结构:1.for循环。2.while循环。3.do…while循环。
    1.for循环
    for循环形式:

    for(初始化语句1; 循环条件判断语句2; 步进语句4){
    循环体语句3
    }
    **执行流程:**第一次循环先执行语句1,然后语句2,语句3,语句4。后续循环不再执行语句1。直接语句2,语句3,语句4。直到语句2判断为假,跳出循环执行其它语句。
    下图的例子是输出4个hello world
    在这里插入图片描述
    2.while循环
    while循环格式:

    初始化语句1
    while(循环条件判断语句2){
    循环体语句3
    步进语句4
    }
    **执行流程:**第一次执行,先语句1,然后语句2,语句3,语句4。后续循环,语句2,语句3,语句4。直到语句2判断为假,跳出循环,执行其它语句。
    下图的例子是输出4个hello world
    在这里插入图片描述
    do…while循环
    do…while循环格式:

    初始化语句1
    do{
    循环体语句3
    步进语句4
    }while(环条件判断语句2);
    **执行流程:**第一次执行,先语句1,然后语句3,语句4。后续循环语句2,语句3,语句4。直到语句2判断为假,跳出循环,执行其它语句。
    下图的例子是输出4个hello world
    在这里插入图片描述
    想必大家也发现了上面三个例子其实是一个例子改出来的。说明三个循环一般情况下是可以相互转化的。接下来看看三者的区别。
    三种循环的区别:
    for循环,while循环和do…while循环的区别
    for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
    do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
    for循环和while的区别
    条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
    条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
    根据三种循环的特点进行总结:
    1.建议使用的顺序:for,while,do-while
    2.循环次数确定的话,建议使用for,循环次数不确定建议使用while
    3.do-while循环来讲的话,至少执行一次
    4.while和do-while循环而言,循环结束后,初始化条件中定义的变量可以继续使用,但是for循环的不能使用(在for循环内部定义初始化语句)

    跳出循环

    前面了解到循环一定次数(直到条件不满足)才会结束循环。那么怎么提前跳出循环呢?常用的跳出循环语句有:1.break,2.continue。
    1.break
    **使用场景:**终止switch或者循环。在选择结构switch语句中。在循环语句中。离开使用场景的存在是没有意义的。注意是终止,即执行到break语句,直接结束switch或循环结构,跳出循环直接执行其它语句。
    2.continue
    **使用场景:**结束本次循环,继续下一次的循环。注意,执行到continue只是提前结束本次循环,进入下一次循环。
    关于循环还有死循环,即循环判断条件永远为真。嵌套循环,即一个循环的循环语句中包含另一个循环。(会在Demo中展示)

    随机数

    这里直接通过代码讲解
    在这里插入图片描述

    展开全文
  • Java 面试宝典

    2013-02-01 10:02:08
    一. Java 基础部分............................................................................................................43、Java异常处理机制简单原理和应用。 .....................................

空空如也

空空如也

1 2 3 4
收藏数 76
精华内容 30
关键字:

java的输入语句怎么写?

java 订阅