day1
由虚拟机将java代码转化为各自操作系统的指令集。
???jdk安装和配置
jvm jre jdk的关系
jvm属于jre
package com.company;
//严格区分大小写
public class Main {
//Mai要与文件名保持一致 Main.java
public static void main(String[] args) { //程序的入口
// write your code here
System.out.println("helloworld");
/*
多行注释
多行注释
*/
}
}
day2
使用变量的作用域:在一对{ }之间有效。
定义变量的格式:
8种基本数据类型:byte short int long float double char boolean
引用是不同的变量相同的地址
String str = "abc";
int i = 2;
String str0 = "3"+2+1+7 ;
String str2 = ""+2+1+7 ;
System.out.println(str0); //3217
System.out.println(str+i); //abc2
System.out.println(str2); //217
算数运算符
char(' ')可以进行数学运算,转为ascii码进行计算;
字符串与其他数据类型相加时,实际上是把其他的数据转换为字符串,做字符串的拼接。
赋值运算符
0和1
比较运算符
++k先运算完了再赋值;k++先赋值再运算
day3
逻辑运算符
右边就不用再进行运算了。
x=2,y=2
位运算符
三目运算符
运算符的优先级
顺序结构、分支语句、
for(;;){
//for循环的无限循环
}
break语句用于终止某个语句块的执行(终止当前所在的循环)
continue是对当前所在的循环起作用,用于结束当前这次循环,当前循环的下面的代码不执行,直接进入下一次循环。
return是直接停掉整个方法。
day4
一维数组
初始化
数组元素的引用
使用动态初始化时,数组的元素会有默认值,数字类型的是0,对象的默认类型是none。
int[] ii = new int[4];
System.out.println(ii[0]); // 0
多维数组(一维数组中的每一个元素都是一个数组)
int[] arr = new int[]{4,2,7,1,3,5};
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (max<arr[i]){
max = arr[i];
}
}
System.out.println("max:"+max);
// int[] aa = arr; //赋值
// 数组的复制
int[] copy = new int[arr.length]; //声明一个与arr长度一致的数组
for (int i = 0; i < arr.length; i++) { //复制
copy[i] = arr[i]; //i是数组下标
}
System.out.println(copy);
//数组的反转
int[] temp = new int[arr.length];
int k = 0;
for (int i = arr.length-1; i >=0; i--) {
temp[k]=arr[i];
k++;
}
arr = temp;
// for (int i = 0; i < arr.length; i++) {
// System.out.print(arr[i]); //531724
// }
//
// 冒泡排序
int[] arr0 = new int[]{4,7,3,1};
int tmp = 0;
for (int i = 0; i < arr0.length; i++) { //外层循环是循环轮次
for (int j = 0; j < arr0.length-1-i; j++) { //每一轮次的数字对比排序
if (arr0[j]>arr0[j+1]){
tmp = arr0[j];
arr0[j] = arr0[j+1];
arr0[j+1] = tmp;
}
}
}
for (int i = 0; i < arr0.length; i++) {
System.out.println(arr0[i]);
}
常见问题
day5
面向对象编程
属性:对应类中的成员变量(人有什么属性,高矮胖瘦。。。)
行为:对应类中的成员方法(行为动作,吃饭,睡觉,上班。。。)
java类以及类的成员
类的语法格式
public class Person {
// 属性,成员变量:类的成员变量可以先声明,不用初始化,类成员变量有默认值
String name; //string的默认值null
int age; // int默认值0
// 行为,方法也叫函数
public void showName() {
System.out.println("姓名:"+name);
}
/**
* 获取年龄
* @return
* */
public int getAge(){
return age;
}
}
对象的创建和使用
使用new+构造器创建一个新的对象;
使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)
// 同一个包里就可以相互调用了!!!
不论类有多复杂,我们会给这类创建对象,并且使用对象,对于对象的使用无外乎就两个地方:操作对象的变量,调用类方法。
类的属性(也就是成员变量???)
编写学生类:
调用:
类的方法
方法的调用
在idea上报错:
同一类中,所有的方法可以直接互相调用,不用new去实例化对象。
方法只能调用方法,不能在方法内部定义方法。
关于对象
对象的产生
匿名对象(不限实例化变量,直接调用)
new Student().showInfo(); //匿名对象的使用
任何的类都可以当作对象:
1、
2、
提示:
方法的重载(特点:与返回值无关,只看参数列表)
重点:参数个数+参数数据类型+参数顺序
练习
2、
3、
重载的max方法
day6
方法的可变个数的形参(使用方式和数组一样,只能放在所有形参的最后!!)
...是0到多个的意思
这里有个疑问?string对象要new吗?
用数组的方式来传递可变个数的参数,如果没有参数,就要定义一个空数组或者null;而...的形式,如果没有参数就可以不填。
方法的参数传递
基础数据(值传递)
以下为什么要加static?因为类方法(static)不能直接调用实例方法(不带static)。
只是传递了a的值。栈中的a不会变,c里参数是地址或者引用传递才会改变a。
引用对象(引用传递)
在这个例子中,最后的结果是ds和ds1操作实际上是同一个对象。
包package和引用import
在java中包的概念和文件夹的概念类似,包的存在是为了解决文件太乱不好管理,文件重名等问题。(文件整理)
包的层级结构与文件夹同理。
day06和day06.test是包的嵌套,通过.来完成。(com.cn.test)
通过import来引用其他包里的类。如果使用同一个包下的类,import可以省略。
第五条:
封装和隐层
总结
访问权限修饰符
类的构造方法
new对象的根本原理就是通过调用类的构造方法。 (默认的构造方法名与类名相同,修饰限定符也保持一致)
Person person = new Person(); //调用的是public Person(){}这个构造方法
想在构造person类的时候给附上默认名字:希望在new对象的时候能够自己给属性不一样的值
3
调用
构造方法重载
是方法就能重载,为了应对不同的局面。为了调用方可以灵活的创建出不同需要的对象。重载的多个构造方法实际上就是相当于提供了多个初始化new对象的模板。
this关键字
this代表:当前对象的属性(这个对象的变量),没有this的是形参。(相当于python的self)
调用当前类的方法,调用当前类的成员变量。
this()可以作为一个类中,构造方法相互调用的特殊格式。
注意:
javabean
类似于一个实体类(人,动物,学生)
javabean的写法(一个javabean:私有的属性,属性对应的get和set方法。)
javabean的用法:
getset有快捷键。
control + return(回车键)
command + N
IntelliJ IDEA问题@一笑小先生
objc[2195]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/java (0x10ed714c0) and
/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10edf54e0). One of the two will be used. Which one is undefined.
解决方案:
1、点击IJ最上面菜单的Help-Edit Custom Properties,没有这个properties文件的话,IJ会提示创建,然后在里面加上
idea.no.launcher=true
2、重启IDEA