快速查看

2019-12-04 16:01:09来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

 

1.Math.random

Math.random()*10 输出随机变量方法,使用:"Math.random()*数量"

如:(int)(Math.random()*10); //随机取一个10以内的整数

例如:定义一个随机1到5(取不到5)的变量 [1,5)

Math.random()*(n-m)+m,生成大于等于m小于n的随机数;

int number=(int)(Math.random()(5-1)+1); ? int number = (int)(Math.random()4+1);取值正好是[1,5)

 

2.length

length() 方法用于返回字符串的长度。

 

 1 //
 2   public class Test {
 3       public static void main(String args[]) {
 4           String Str1 = new String("www.runoob.com");
 5           String Str2 = new String("runoob" );
 6   ?
 7           System.out.print("字符串 Str1 长度 :");
 8           System.out.println(Str1.length());
 9           System.out.print("字符串 Str2 长度 :");
10           System.out.println(Str2.length());
11       }
12   }
13   //随机输入一个100以内数组
14   int[] arr=new int[10];
15   for(int i=0;i<arr.length;i++){
16       int value= (int)Math.random()*100;
17       arr[i]=value;
18   }
19   System.out.println(Arrays.toString(arr));

 

 

 

 

(Scanner/if/equals)

1.equals

使用方法 ''变量1.equals(变量2)” //变量一定要保证有一个具体的数据,排除null值

 

2.Math.pow

Math.pow(数字,几次幂) 使用:sum=Math.pow(3,2);

 

3.Math.PI=3.14

4.Sanner

Sanner input = new Scanner(System.in); //需要导包,程序开头加 "import java.util.*";(*可以换成Scanner)

*使用:int 变量 = input.nextInt(); //读一个int netxDouble/Float/Byte/Short() 只能读取空格之前的内容(空格后的数据会保留传给下一个变量),光标依然在10的后面 ? String 变量 = input.nextLine(); //读一个字符串 ? String 变量 = input.next(); //只能读取空格之前的内容(空格后的数据会保留传给下一个变量)

*如果使用netxLine之前有netxDouble/Float/Byte/Short/next(),nextLine只能读到一个换行,不让用户录入数据,使用netLine()或者添加一行"input.nextIine();"解决

 

5.boolean嵌套

合理使用boolean嵌套,优化程序

 

6.debug部分快捷键

debug调试:双击添加断点,F6:逐行运行程序,F5:进入底层代码,F8:运行到下一个断点

 

*input.close()//关闭该变量,会关闭该程序所有的该变量

 

>简单登入系统??

1   while("n".equals(answer)) {
2               System.out.println("输入账号");
3               answer = input.nextLine();
4           }
5   if("y".equals(answer)) {
6               System.out.println("********");
7           }

 

 

卫语句

例:

 1   if (true){
 2               if (true){
 3                   if (true){
 4                       for (){
 5                           if (true){
 6                               业务代码
 7                           }
 8                       }
 9                   }
10               }
11           }

 

在有比较复杂的判断和需要遍历处理业务时候,经常会出现上面这种情况,这些代码在执行起来是没问题。但是这样的代码是一次性代码,过一段时间,可能自己都不敢动这里的逻辑了,更何况下一个接盘侠呢。 这样的代码很难弄明白每个条件的作用和执行的流程,当你读到最里面一层的时候,估计你已经记不起来当初是为什么走进这个if的了,对代码的执行流程完全不可控了。因为执行你预期的流程并不明显,为了简化这种情况,需要将特殊情况隔离到立即结束执行的单独条件中。 这样就能把箭头代码给拉平.

 if (false){
  ?
          }
          if (false){
  ?
          }
          if (false){
  ?
          }
          for (){
              if (false){
                  continue;
              }
              业务代码
          }

 

这是其中一类,可以将失败前置。只要有一个条件不通过,就快速返回失败,如果到了最后一行,说明所有判断都通过,剩下的就是你预期的结果。而不是一直查成功。

  if(obj != null){
    doSomething();
  }
   
  转换成卫语句以后的代码如下:
  if(obj == null){
     return;
  }
  doSomething();

 

 

(排序/数组)

1.数组

使用:

初始化: 数据类型[] 变量名 = new 数据类型[length]

int[] array = new int[3]; // 空间大小为3的array数组

int[] array = {a,b,c,d,e};

 

2.Aeeays

2.1Arrays.toString

Arrays:将数组元素转换成字符串进行打印(需要导包)

使用:Arrays.toString(数组名)

数组.length:获得数组长度

二维数组不能直接使用,需要Arrays.deepToString(二维数组[]);

 

2.2Arrays.copyOf

复制数组元素到新数组

int[] newArray = Arrays.copyOf(源数组,新数组的长度);

 

2.3Array.equals

比较数组元素是否一致

例:System.out.println(Arrays.equals(arr1,arr2));

*数组间不能以"=="或者"equals"直接比较,这样比较的是数组的地址

 

5.增强for循环

foreach:for(数组元素数据类型 变量:数组变量名称)

将数组里面的每个元素赋值给变量,不能索引具体元素

 

6.冒泡法

 1  for(int i=1;len = arrlength;i<len;i++){
 2       for(int j=0;j<len-i;j++){
 3           //相邻元素互相比较
 4           if(arr[j]>arr[j+1]){
 5               //交换位置
 6               int temp = arr[j];
 7               arr[j] = arr[j+1];
 8               arr[j+1] = temp;
 9           }
10       }
11   }
12  

 

7.选择排序

 1  for(int i=0,len = arr.length;i<;en-1;i++){
 2       int min = arr[i];
 3       int minIndex = i;
 4       for(int j=i+1;j<len;j++){
 5           if(min>arr[j]){
 6               min = arr[j];
 7               minIndex = j;
 8           }
 9       }
10   }
11  

 

 

 

8.插入排序(升/降)

 1   for(int i=1,len = arr.length;i<len;i++){
 2        int temp = arr[i];
 3        int leftIndex = i-1;
 4        while(leftIndex>=0 && arr[leftIndex]>temp){        
 5            arr[leftIndex+1] = arr[leftIndex];//左边元素要移动,大数向右
 6            leftIndex--;
 7        }
 8       arr[leftIndex+1]  = temp;
 9    }
10   倒叙
11   for(int i=1;i<arr1.length;i++) {
12       int space = arr1[i];//  取第二个数
13       int left = i-1;//=指向第一个数
14       while(left>=0 && arr1[left]<space) {
15           arr1[left+1] = arr1[left];// 小数向右移
16           left--;// 找回指向空格的索引
17       }
18       arr1[left+1] = space; //填空
19   }

 

 

9.Arrays.sort(数组变量); //升序

使用:

      int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
   Arrays.sort(a);

 

9.1Arrays.sort区间排序

Arrays.sort(int[] a, int fromIndex, int toIndex)

这种形式是对数组部分排序,也就是对数组a的下标从fromIndex到 toIndex-1的元素排序,注意:下标为toIndex的元素不参与排序。

 

  int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
            Arrays.sort(a, 0, 3);
            for(int i = 0; i < a.length; i ++) {
                System.out.print(a[i] + " ");
 

 

 

方法

 

1.方法

1.1访问权限修饰符:public/private/protectde/默认

1.2普通修饰符(关键字) : static/final/abstract

1.3返回值类型

有返回值类型 所有数据类型

无返回值 void

1.4方法名(驼峰):唯一的,不可重复的

1.5(形式参数):任意数据类型,有返回参数必须return相同类型返回值

1.6 {方法体}

2.调用方法:

静态方法和c一样。

仅适用于数组:有参无返回值调用是直接调用地址,被调用变量的最终结果可能会被其他方法改变。(具体调用是否改变可见源码是否调用地址)

2.1 有多个参数(附卫语句例/登入):


 

 1   public static void userLogin(String usename,String password){
 2       String name = "admin";
 3       String pass = "admin";
 4       
 5       //校验username与password
 6       if(username==null || password==null){
 7           System.out.println("参数不允许为null");
 8           return 9       }
10       
11       if(!neme.equals(username) || !pass.equals(password)){
12           System.out.println("用户名或密码不对");
13       }
14       
15       System.out.println("登陆成功");
16       System.out.println("执行成功之后的代码。。。。。");
17   }

 

2.2可变参数:

1   test();
2   ?
3   //可变参数->同一种数据类型 例:数据类型...变量名
4   //nums  是可变参数 >=0个实际参数 实际为一个数组
5   public static void test(int...nums){
6       System.out.println(nums[0]);
7       System.out.println(nums[1]);
8       System.out.println("nums:"+Arrays.toString(nums));
9   }

 

2.3 方法重载 overload

在一个类(java文件),可以存在多个方法名一样的方法。

  1. 方法名相同

  2. 形参的顺序(形参列表不一致)

  3. 与返回值和修饰符无关

 

(类与对象)

 

1.不同方法调用同一个成员变量?

创建成员属性

 

2.无参&有参构造方法

快捷键:alt+shift+s+c(生产无参构造)

例:调用带参/无参构造方法


成员变量 = 全局变量

 

 

 1   public class Person {
 2       
 3       public int id;
 4       public String name;
 5       
 6       //默认的无参构造方法
 7       //构造方法与类名一致
 8       //[访问权限修饰符] 类名() {}
 9       
10       //默认存在
11       //1.帮助创建对象
12       //2.初始化成员变量
13       public Person() {
14           // id = 1001;
15           // name = "jim";
16       }
17       //在创建对象的时候就对成员变量赋值  有参构造
18       //方法重载
19       //方法名相同 形参列表不同
20       //与返回值 修饰符无关
21       //构造方法重载
22       public Persion(int pid,String pname){
23           id = pid;
24           name = pname;
25       }
26       }
27   }
28   public class PersonTest {
29       public static void main(String[] args){
30           Person person = new Person();
31           System.out.println("姓名"+person.name);
32           //使用有参构造进行创建对象
33           Person person2 = new Person(1002,"tom");
34           System.out.println("person2姓名:"+person2.name);
35       }
36   }

 

(封装)

1.默认修饰符只能在本包内访问

修饰符为public时可以访问别的包的成员变量

2.private:只能在本类中被调用

setter&getter中不允许添加其他业务逻辑,会增加维护难度

快捷键生成:alt+shift+s+r

3.lombok

3.1.在使用@Setter能否再另外添加别的set方法?

a:可以,手动写的可以覆盖掉注释里的Setter/Getter

 

3.2.lombok.jar类库文件

通过注解构建一个全功能的文件:@名称

例:@Sette @Getter(生成set/get方法)

@NoArgsConstructor(生成无参构造)

@AllArgsConstructor(生成有参构造)

@ToString

@cleanup(程序运行之后关闭input,不建议使用)

4.static(作用:修饰成员变量和成员方法)

 

4.1.静态方法只能访问静态成员

静态成员变量数据是共享的(且只能在本类中调用,使用其他类调用时需要先调用静态成员变量所在方法)

 

4.2.*静态代码块:static{代码} //有且只走一次

 

4.3.非静态代码块:{代码}

会伴随类执行。

 

4.3.优先度

静态代码块 > 非静态代码块 > 构造方法

4.4.static修饰成员变量

static修饰成员变量时,该变量数据可以让所有类的对象共用。

 

5.单例模式/饿汉模式/懒汉模式

userinfo&~test

 

5.1.单例模式

1.将构造方法改为prevate修饰

2.提供一个静态的成员变量,并初始化成员变量

3.提供静态方法,获得此类的对像

5.2.饿汉模式(开发不推荐)

1   private static ShoopingCar shoppingCar = new ShoppingCar;
2   public static ShoppingCar gatShoppingCar(){
3       return shoppingCar;
4   }

 

1.不管是否使用变量,都会执行初始化操作,没有体现出懒加载的思想

2.没有线程安全问题

5.3懒汉模式

1  private static ShoppingCar shoppingCar;
2   public static ShoppingCar getShoppincar(){
3       if(shoppingCar==null){
4           shoppingCar = new ShoppingCar;
5       }
6       return shoppingCar;
7   }

 

 

1.什么时候使用对象 什么时候执行初始化操作

2.有线程安全问题

? 5.4枚举(多例/开发常用)

 

6.this

6.1.在本类里访问无参/有参构造:

使用:this(); //必须在代码第一行

6.2.this可以充当实际参数

(了解)因为他是个对象。

 


原文链接:https://www.cnblogs.com/AmierX/p/11985893.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:File操作,访问文件或目录的属性信息

下一篇:File文件的创建,删除 createNewFile() delete()